Glmm binomiale con una variabile categoriale con pieno successo


11

Sto eseguendo un glmm con una variabile di risposta binomiale e un predittore categorico. L'effetto casuale è dato dal disegno nidificato utilizzato per la raccolta dei dati. I dati si presentano così:

m.gen1$treatment
 [1] sucrose      control      protein      control      no_injection .....
Levels: no_injection control sucrose protein
m.gen1$emergence 
 [1]  1  0  0  1  0  1  1  1  1  1  1  0  0....
> m.gen1$nest
 [1] 1  1  1  2  2  3  3  3  3  4  4  4  .....
Levels: 1 2 3 4 5 6 8 10 11 13 15 16 17 18 20 22 24

Il primo modello che corro sembra così

m.glmm.em.<-glmer(emergence~treatment + (1|nest),family=binomial,data=m.gen1)

Ricevo due avvisi simili a questo:

Warning messages:
1: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model failed to converge with max|grad| = 0.0240654 (tol = 0.001, component 4)
2: In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv,  :
  Model is nearly unidentifiable: large eigenvalue ratio
 - Rescale variables?

Il riepilogo del modello mostra che uno dei trattamenti presenta un errore standard insolitamente grande, che puoi vedere qui:

Fixed effects:
                 Estimate Std. Error z value Pr(>|z|)  
(Intercept)         2.565      1.038   2.472   0.0134 *
treatmentcontrol   -1.718      1.246  -1.378   0.1681  
treatmentsucrose   16.863   2048.000   0.008   0.9934  
treatmentprotein   -1.718      1.246  -1.378   0.1681 

Ho provato i diversi ottimizzatori dal controllo glmer e dalle funzioni di altri pacchetti e ho ottenuto un risultato simile. Ho eseguito il modello usando glm ignorando l'effetto casuale e il problema persiste. Durante l'esplorazione dei dati mi sono reso conto che il trattamento con un elevato standard. l'errore ha solo esiti positivi nella variabile di risposta. Solo per verificare se ciò potrebbe causare il problema, ho aggiunto un punto dati falso con un "fallimento" per quel trattamento e il modello funziona senza intoppi e fornisce un ragionevole errore standard. Puoi vederlo qui:

Fixed effects:
                 Estimate Std. Error z value Pr(>|z|)  
(Intercept)        3.4090     1.6712   2.040   0.0414 *
treatmentcontrol  -1.8405     1.4290  -1.288   0.1978  
treatmentsucrose  -0.2582     1.6263  -0.159   0.8738  
treatmentprotein  -2.6530     1.5904  -1.668   0.0953 .

Mi chiedevo se la mia intuizione fosse giusta sulla mancanza di fallimenti per quel trattamento che impedisce una buona stima, e come posso aggirare questo problema.

Grazie in anticipo!

Risposte:


15

Il tuo intuito è esattamente giusto. Questo fenomeno si chiama separazione completa . Puoi trovarne parecchi (ora che conosci il suo nome) Googling in giro ... È discusso abbastanza approfonditamente qui in un contesto generale , e qui nel contesto dei GLMM . La soluzione standard a questo problema è quella di aggiungere un piccolo termine che spinge i parametri indietro verso lo zero - in contesti frequentisti questo è chiamato un metodo penalizzato o corretto . L'algoritmo standard è dovuto a Firth (1993, "Riduzione del bias delle stime di massima verosimiglianza" Biometrika 80, 27-38), ed è implementato nel pacchetto logistfsu CRAN. Nei contesti bayesiani questo è definito come l'aggiunta di un debole prima dei parametri a effetto fisso.

Per quanto ne so, l'algoritmo di Firth non è stato esteso ai GLMM, ma puoi usare il trucco bayesiano usando il pacchetto blme , che mette un sottile strato bayesiano sopra il lme4pacchetto. Ecco un esempio dalla discussione GLMM collegata sopra:

cmod_blme_L2 <- bglmer(predation~ttt+(1|block),data=newdat,
                   family=binomial,
                   fixef.prior = normal(cov = diag(9,4)))

Le prime due righe in questo esempio sono esattamente le stesse che useremmo nel glmermodello standard ; l'ultimo specifica che il precedente per gli effetti fissi è una distribuzione normale multivariata con una matrice diagonale di varianza-covarianza. La matrice è 4x4 (perché in questo esempio abbiamo 4 parametri ad effetto fisso) e la varianza precedente di ciascun parametro è 9 (corrispondente a una deviazione standard di 3, che è piuttosto debole - ciò significa che +/- 2SD è ( -6,6), che è un intervallo molto ampio sulla scala logit).

Gli errori standard molto grandi dei parametri nel tuo esempio sono un esempio di un fenomeno strettamente correlato alla separazione completa (si verifica ogni volta che otteniamo valori di parametri estremi in un modello logistico) chiamato effetto Hauck-Donner .

Altri due riferimenti potenzialmente utili (non li ho ancora scavati):

  • Gelman A, Jakulin A, Pittau MG e Su TS (2008) Una distribuzione precedente di default debolmente informativa per i modelli logistici e di regressione. Annals of Applied Statistics , 2, 1360–383.
  • José Cortiñas Abrahantes e Marc Aerts (2012) Una soluzione per la separazione dei dati binari raggruppati Modellistica statistica 12 (1): 3–27 doi: 10.1177 / 1471082X1001200102

Una ricerca più recente di Google studiosa per "migliore separazione completa" "trova:

  • Quiñones, AE e WT Wcislo. "Cryptic Extended Brood Care in the Facultively Eusocial Sweat Bee Megalopta genalis ." Insectes Sociaux 62.3 (2015): 307–313.

wow grazie mille !! Questo ha perfettamente senso, e il modello ora funziona senza intoppi con l'incantatore. Vorrei solo un'altra domanda, posso usare i metodi come in lme4 per valutare gli effetti casuali e fissi, in altre parole per confrontare diversi modelli?

2
Direi di sì, ma non so se ci sia supporto formale e / o peer-reviewed per la mia opinione ...
Ben Bolker,

Grazie! Anche questo è esattamente il mio problema. Un rapido follow-up: in contrasto con il tuo esempio, che ha un fattore con 4 livelli, ho un design 2 x 2 in cui ogni fattore ha 2 livelli (quindi il totale è ancora 4 livelli). Posso usare diag (9,4) anche per il mio modello? Non sono esperto di matrici, quindi ho voluto ricontrollare. Allo stesso modo, per giustificare questa soluzione nel mio documento, dovrei citare Firth (1993) o esiste un documento più direttamente pertinente, che ha implementato la tua soluzione usando bglmer ()?
Sol,

2
vedi risposta aggiornata.
Ben Bolker,

2
Penso di si - dovrebbe importare solo quanti parametri di effetti fissi ci sono in totale.
Ben Bolker,
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.