Uso dell'offset nel modello binomiale per tenere conto dell'aumento del numero di pazienti


18

Due domande correlate da parte mia. Ho un frame di dati che contiene un numero di pazienti in una colonna (range 10-17 pazienti) e 0 e 1 che mostrano se un incidente è accaduto quel giorno. Sto usando un modello binomiale per regredire la probabilità di incidente sul numero di pazienti. Tuttavia, vorrei adeguarmi al fatto che quando ci saranno più pazienti, inevitabilmente ci saranno più incidenti perché il tempo totale del paziente nel reparto è più elevato in quel giorno.

Quindi sto usando un modello binomiale offset come questo (codice R):

glm(Incident~Numbers, offset=Numbers, family=binomial, data=threatdata)

Le mie domande sono:

  1. Va bene avere esattamente le stesse variabili che prevedono e nell'offset? Voglio parzializzare l'aumento tonico della probabilità di incidente e vedere se è rimasto qualcosa, essenzialmente. Per me ha senso, ma sono un po 'cauto nel caso mi sbagli.

  2. L'offset è stato specificato correttamente? So che nei modelli a poisson avrebbe letto

    offset=log(Numbers)
    

Non so se ci sia un equivalente qui e non riesco a trovare alcun offset binomiale con Google (il problema principale è che continuo a ricevere un binomio negativo che ovviamente non va bene).


2
Non è ciò che stai cercando di adattare, esattamente ciò che vuoi misurare, ovvero come aumenta la probabilità di "incidente" con il numero di pazienti?
B_Miner,

1
Devo ribadire il punto di B_Miner. Penso che tu sia confuso quando / perché l'offset è usato in questa situazione. Il tuo modello, senza offset, ti fornirà i valori adattati per probabilità di incidente in funzione del numero di pazienti. Se sei interessato a una diversa forma funzionale, prendi in considerazione le trasformazioni (come log o esponentiation di #) in base a ciò che è scientificamente interessante.
AdamO,

Puoi chiarire qualcosa sugli incidenti? Un incidente è legato a un paziente o qualcosa del reparto nel suo insieme? Se correlato ai pazienti, è possibile che ci sia> 1 incidente Se non ci sono pazienti, è impossibile avere un incidente?
atiretoo,

1
Apparentemente la mia risposta "non contiene abbastanza dettagli". Ho fornito uno sviluppo teorico, un codice eseguibile e risposte a entrambe le tue domande, quindi puoi forse chiarire cos'altro è necessario?
conjugateprior

1
Scusa, Coniugato prima, la tua risposta è ottima. La cosa "non abbastanza dettagliata" era il tag aggiunto alla taglia (cioè era lì prima che tu pubblicassi). Accetterò quando la generosità finirà nel caso in cui qualcuno produca una risposta ancora migliore, ma questo è improbabile e il tuo è molto utile, grazie.
Chris Beeley,

Risposte:


17

Se sei interessato alla probabilità di un incidente dato N giorni di pazienti in reparto allora vuoi un modello come:

mod1 <- glm(incident ~ 1, offset=patients.on.ward, family=binomial)

l'offset rappresenta prove, incidentè 0 o 1 e la probabilità di un incidente è costante (nessuna eterogeneità nella tendenza a generare incidenti) e i pazienti non interagiscono per causare incidenti (nessun contagio). In alternativa, se la possibilità di un incidente è piccola, questo è per te (o se hai superato il numero di incidenti senza menzionarlo), potresti preferire la formulazione di Poisson

log.patients.on.ward <- log(patients.on.ward)
mod2 <- glm(incident ~ 1, offset=log.patients.on.ward, family=poisson)

dove si applicano le stesse ipotesi. L'offset viene registrato perché il numero di pazienti in reparto ha un effetto proporzionale / moltiplicativo.

Espandendo il secondo modello, forse pensi che ci siano più incidenti di quanti altrimenti non ti aspetteresti semplicemente a causa dell'aumento del numero di pazienti. Cioè, forse i pazienti interagiscono o sono eterogenei. Quindi ci provi

mod3 <- glm(incident ~ 1 + log.patients.on.ward, family=poisson)

Se il coefficiente su log.patients.on.wardè significativamente diverso da 1, dove è stato fissato mod2, allora qualcosa potrebbe effettivamente essere sbagliato con i tuoi presupposti di nessuna eterogeneità e nessun contagio. E sebbene non sia possibile distinguere ovviamente questi due (né l'uno né l'altro da altre variabili mancanti), ora si ha una stima di quanto aumentando il numero di pazienti in corsia aumenti il ​​tasso / probabilità di un incidente al di là di ciò che avresti aspettarsi dal caso. Nello spazio dei parametri è 1-coef(mod3)[2]con intervallo derivabile da confint.

In alternativa puoi semplicemente lavorare direttamente con la quantità di registro e il suo coefficiente. Se vuoi solo prevedere la probabilità di incidente usando il numero di pazienti in reparto, allora questo modello sarebbe un modo semplice per farlo.

Le domande

  1. Va bene avere variabili dipendenti nel tuo offset? Mi sembra una pessima idea, ma non vedo che devi farlo.

  2. L'offset nei modelli di regressione di Poisson per exposureè davvero log(exposure). Forse l'uso confuso dei offsetmodelli di regressione binomiale di R è sostanzialmente un modo per indicare il numero di prove. Può sempre essere sostituito da una variabile dipendente definita come cbind(incidents, patients.on.ward-incidents)e nessun offset. Pensala in questo modo: nel modello di Poisson entra nella parte destra dietro la funzione log link, e nel modello Binomiale entra nella parte sinistra davanti alla funzione logit link.


18

Offset nelle regressioni di Poisson

Iniziamo osservando perché utilizziamo un offset in una regressione di Poisson. Spesso vogliamo che ciò sia dovuto al controllo dell'esposizione. Let sia il tasso di riferimento per unità di orientamento e essere il tempo di esposizione nella stessa unità. Il numero previsto di eventi sarà .t λ × tλtλ×t

In un modello GLM stiamo modellando il valore atteso usando una funzione di collegamento , cioèg

g(λti)=log(λti)=β0+β1x1,i+

dove è la durata dell'esposizione per l'individuo e è il valore di covariata per l'individuo . I puntini di sospensione indicano semplicemente ulteriori termini di regressione che potremmo voler aggiungere. i x i itiixii

Possiamo semplificare semplificando l'espressione sopra

log(λ)=log(ti)+β0+β1x1,i+

Il è semplicemente un "offset" aggiunto alla regressione di Poisson in quanto non è un prodotto di uno dei parametri del modello che ci sarà la stima.log(ti)

Regressione binomiale

In una regressione binomiale, che in genere utilizza un collegamento logit, ovvero:

g(pi)=logit(pi)=log(pi1pi)=β0+β1x1,i+

Si può vedere che sarà difficile derivare un modello per che produrrà un offset costante.pi

Ad esempio, se è la probabilità che uno qualsiasi paziente il giorno abbia un incidente. Sarà una funzione dei singoli pazienti disponibili in quel giorno. Come affermato da jboman, è più facile ottenere il complimento per nessuna incidenza, piuttosto che determinare direttamente la probabilità di almeno un incidente. pii

Sia la probabilità che un paziente abbia un incidente il giorno . La probabilità che nessun paziente abbia un incidente il giorno sarà , dove è il numero di pazienti nel giorno . A parte il complimento, la probabilità che almeno un paziente abbia un incidente sarà, j i i N i j =pi,jjiiNiipi=1- N i j=1(1-pi , j ).j=1Ni(1pi,j)Nii

pi=1j=1Ni(1pi,j).

Se siamo disposti ad assumere la probabilità che un paziente abbia un incidente in qualsiasi giorno sia lo stesso, possiamo semplificarlo a dove e è la probabilità di incidenza condivisa.

pi=1(q)Ni,
q=1pp

Se sostituiamo questa nuova definizione di nella nostra funzione di collegamento logit , il meglio che possiamo fare in termini di semplificazione e riorganizzazione è . Questo non ci lascia ancora con un termine costante che può essere preso in considerazione. pig(pi)log((q)N1)

Di conseguenza non possiamo usare un offset in questo caso.

Il meglio che puoi fare è discretizzare il problema (come suggerito da jboman) puoi creare bin per il numero di pazienti e stimare un valore separato per per ciascuno di questi bin. Altrimenti dovrai derivare un modello più complicato.p


2
+1, benvenuto nel sito, @Rider_X. Spero che possiamo aspettarci più risposte simili in futuro.
gung - Ripristina Monica

1
@gung - Grazie! Non avevo sentito molto indietro su ciò che pensavo fosse una risposta utile, quindi non sono tornato molto. Dovrò cambiarlo. Saluti.
Rider_X,

2
+1 Apprezzo molto le risposte che spiegano la teoria e il ragionamento, piuttosto che (o in aggiunta a) mostrare quale codice e comandi usare.
whuber

9

Questa risposta arriva in due parti, la prima una risposta diretta alla domanda e la seconda un commento sul modello che stai proponendo.

La prima parte riguarda l'uso di Numberscome offset oltre ad averlo sul rhs dell'equazione. L'effetto di ciò sarà semplicemente quello di sottrarre 1 dal coefficiente stimato di Numbers, invertendo così l'effetto dell'offset, e non cambierà altrimenti i risultati. L'esempio seguente, con alcune righe di output irrilevanti rimosse, dimostra questo:

library(MASS)
Numbers <- rpois(100,12)
p <- 1 / (1 + exp(0.25*Numbers))
y <- rbinom(100, Numbers, p)
Incident <- pmin(y, 1) 

> summary(glm(Incident~Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)  
(Intercept)  0.99299    0.80624   1.232   0.2181  
Numbers     -0.11364    0.06585  -1.726   0.0844 . <= COEFFICIENT WITH NO OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 135.37  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

> summary(glm(Incident~Numbers, offset=Numbers, family="binomial"))

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.3121  -1.0246  -0.8731   1.2512   1.7465  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  0.99299    0.80624   1.232    0.218    
Numbers     -1.11364    0.06585 -16.911   <2e-16 *** <= COEFFICIENT WITH OFFSET TERM
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 342.48  on 99  degrees of freedom
Residual deviance: 132.24  on 98  degrees of freedom
AIC: 136.24

Nota come tutto sia uguale tranne il coefficiente di numeri e la deviazione nulla (e la statistica t, perché sta ancora testando su 0 invece di -1.)

La seconda parte si riferisce al modello che stai costruendo. Poiché gli incidenti non vengono registrati come il numero di incidenti in un giorno ma se ci sono stati incidenti in un giorno, la probabilità di osservare un 1 nel giorno è , dove è il il numero di pazienti nel giorno e è la probabilità per paziente di un incidente nel giorno . La solita funzione di collegamento, logit, la parametrizza come . Ciò indica che la relazione tra la probabilità di osservare un 1 nel giorno e1 - ( 1 - p t ) N t N t t p t t log ( 1 - ( 1 - p t ) N t ) / N t log ( 1 - p t ) tt1(1pt)NtNttpttlog(1(1pt)Nt)/Ntlog(1pt)tN tNtpotrebbe non essere ben modellato da una funzione lineare sulla scala logit. (Questo può essere il caso comunque, poiché ci si potrebbe aspettare una "soglia" approssimativa al di sotto della quale la qualità dell'assistenza al paziente è OK ma al di sopra della quale la qualità dell'assistenza al paziente diminuisce rapidamente.) Invertire la definizione delle probabilità in modo da spostare la nel denominatore invece del numeratore ti lascia ancora con quell'imbarazzante esponenziale all'interno del registro.Nt

Si potrebbe anche sospettare che la probabilità per paziente varia da paziente a paziente, il che porterebbe a un modello gerarchico più complesso, ma non approfondirò qui.

In ogni caso, dato questo e il range limitato del numero di pazienti che osservi, piuttosto che utilizzare un modello lineare sulla scala logit, potrebbe essere meglio non parametrico sulla relazione e raggruppare il numero di pazienti in tre o quattro gruppi, ad esempio 10-11, 12-13, 14-15 e 16-17, costruiscono variabili fittizie per quei gruppi, quindi eseguono la regressione logistica con le variabili fittizie sul lato destro. Ciò consentirà meglio di acquisire relazioni non lineari come "il sistema è sovraccarico di circa 16 pazienti e gli incidenti iniziano a crescere in modo significativo". Se tu avessi una gamma molto più ampia di pazienti, suggerirei un modello di additivo generalizzato, ad esempio "gam" dal pacchetto "mgcv".


0

Sembra più semplice specificare un log-link e mantenere l'offset come per un modello di Poisson.


2
Sono sicuro che hai ragione, ma a mio vantaggio, come è questo un Poisson? Sembra che l'OP abbia un set di dati con un risultato binario. Questo sarebbe glm (Incidente ~ Numbers, offset = log (Numbers), family = poisson, data = threatdata) ??
B_Miner,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.