Aiuta a interpretare i dati di conteggio GLMM usando lme4 glmer e glmer.nb - Binomio negativo contro Poisson


9

Ho alcune domande in merito alle specifiche e all'interpretazione dei GLMM. 3 domande sono sicuramente statistiche e 2 sono più specifiche su R. Sto pubblicando qui perché alla fine penso che il problema sia l'interpretazione dei risultati GLMM.

Attualmente sto provando a montare un GLMM. Sto usando i dati del censimento degli Stati Uniti dal database del tratto longitudinale . Le mie osservazioni sono tratti di censimento. La mia variabile dipendente è il numero di unità abitative vacanti e sono interessato alla relazione tra le posizioni vacanti e le variabili socio-economiche. L'esempio qui è semplice, usando solo due effetti fissi: percentuale di popolazione non bianca (razza) e reddito familiare medio (classe), oltre alla loro interazione. Vorrei includere due effetti casuali nidificati: tratti entro decenni e decenni, ovvero (decennio / tratto). Sto considerando questi casuali nel tentativo di controllare l'autocorrelazione spaziale (cioè tra i tratti) e temporale (cioè tra i decenni). Tuttavia, sono interessato al decennio anche come effetto fisso, quindi lo includo anche come fattore fisso.

Dato che la mia variabile indipendente è una variabile di conteggio di numeri interi non negativi, ho cercato di adattare i GLMM binomiali negativi e negativi. Sto usando il registro delle unità abitative totali come offset. Ciò significa che i coefficienti vengono interpretati come l'effetto sul tasso di posti vacanti, non sul numero totale di case libere.

Attualmente ho risultati per un Poisson e un GLMM binomiale negativo stimati usando glmer e glmer.nb di lme4 . L'interpretazione dei coefficienti ha senso per me in base alla mia conoscenza dei dati e dell'area di studio.

Se vuoi i dati e gli script sono sul mio Github . Lo script include più delle indagini descrittive che ho fatto prima di costruire i modelli.

Ecco i miei risultati:

Modello di Poisson

Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: poisson  ( log )
Formula: R_VAC ~ decade + P_NONWHT + a_hinc + P_NONWHT * a_hinc + offset(HU_ln) +      (1 | decade/TRTID10)
   Data: scaled.mydata

     AIC      BIC   logLik deviance df.resid 
 34520.1  34580.6 -17250.1  34500.1     3132 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.24211 -0.10799 -0.00722  0.06898  0.68129 

Random effects:
 Groups         Name        Variance Std.Dev.
 TRTID10:decade (Intercept) 0.4635   0.6808  
 decade         (Intercept) 0.0000   0.0000  
Number of obs: 3142, groups:  TRTID10:decade, 3142; decade, 5

Fixed effects:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -3.612242   0.028904 -124.98  < 2e-16 ***
decade1980       0.302868   0.040351    7.51  6.1e-14 ***
decade1990       1.088176   0.039931   27.25  < 2e-16 ***
decade2000       1.036382   0.039846   26.01  < 2e-16 ***
decade2010       1.345184   0.039485   34.07  < 2e-16 ***
P_NONWHT         0.175207   0.012982   13.50  < 2e-16 ***
a_hinc          -0.235266   0.013291  -17.70  < 2e-16 ***
P_NONWHT:a_hinc  0.093417   0.009876    9.46  < 2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) dc1980 dc1990 dc2000 dc2010 P_NONWHT a_hinc
decade1980  -0.693                                            
decade1990  -0.727  0.501                                     
decade2000  -0.728  0.502  0.530                              
decade2010  -0.714  0.511  0.517  0.518                       
P_NONWHT     0.016  0.007 -0.016 -0.015  0.006                
a_hinc      -0.023 -0.011  0.023  0.022 -0.009  0.221         
P_NONWHT:_h  0.155  0.035 -0.134 -0.129  0.003  0.155   -0.233
convergence code: 0
Model failed to converge with max|grad| = 0.00181132 (tol = 0.001, component 1)

Modello binomiale negativo

Generalized linear mixed model fit by maximum likelihood (Laplace Approximation) ['glmerMod']
 Family: Negative Binomial(25181.5)  ( log )
Formula: R_VAC ~ decade + P_NONWHT + a_hinc + P_NONWHT * a_hinc + offset(HU_ln) +      (1 | decade/TRTID10)
   Data: scaled.mydata

     AIC      BIC   logLik deviance df.resid 
 34522.1  34588.7 -17250.1  34500.1     3131 

Scaled residuals: 
     Min       1Q   Median       3Q      Max 
-2.24213 -0.10816 -0.00724  0.06928  0.68145 

Random effects:
 Groups         Name        Variance  Std.Dev. 
 TRTID10:decade (Intercept) 4.635e-01 6.808e-01
 decade         (Intercept) 1.532e-11 3.914e-06
Number of obs: 3142, groups:  TRTID10:decade, 3142; decade, 5

Fixed effects:
                 Estimate Std. Error z value Pr(>|z|)    
(Intercept)     -3.612279   0.028946 -124.79  < 2e-16 ***
decade1980       0.302897   0.040392    7.50 6.43e-14 ***
decade1990       1.088211   0.039963   27.23  < 2e-16 ***
decade2000       1.036437   0.039884   25.99  < 2e-16 ***
decade2010       1.345227   0.039518   34.04  < 2e-16 ***
P_NONWHT         0.175216   0.012985   13.49  < 2e-16 ***
a_hinc          -0.235274   0.013298  -17.69  < 2e-16 ***
P_NONWHT:a_hinc  0.093417   0.009879    9.46  < 2e-16 ***
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) dc1980 dc1990 dc2000 dc2010 P_NONWHT a_hinc
decade1980  -0.693                                            
decade1990  -0.728  0.501                                     
decade2000  -0.728  0.502  0.530                              
decade2010  -0.715  0.512  0.517  0.518                       
P_NONWHT     0.016  0.007 -0.016 -0.015  0.006                
a_hinc      -0.023 -0.011  0.023  0.022 -0.009  0.221         
P_NONWHT:_h  0.154  0.035 -0.134 -0.129  0.003  0.155   -0.233

Prove DHARMa di Poisson

    One-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.044451, p-value = 8.104e-06
alternative hypothesis: two-sided

    DHARMa zero-inflation test via comparison to expected zeros with simulation under H0 = fitted model

data:  simulationOutput
ratioObsExp = 1.3666, p-value = 0.159
alternative hypothesis: more

Test DHARMa binomiali negativi

    One-sample Kolmogorov-Smirnov test

data:  simulationOutput$scaledResiduals
D = 0.04263, p-value = 2.195e-05
alternative hypothesis: two-sided

    DHARMa zero-inflation test via comparison to expected zeros with simulation under H0 = fitted model

data:  simulationOutput2
ratioObsExp = 1.376, p-value = 0.174
alternative hypothesis: more

Diagrammi DHARMa

poisson

Trama DHARMa modello Poisson

Binomio negativo

Trama DHARMa binomiale negativa del modello

Domande statistiche

Dal momento che sto ancora cercando di capire i GLMM, mi sento insicuro riguardo alle specifiche e all'interpretazione. Ho alcune domande:

  1. Sembra che i miei dati non supportino l'uso di un modello di Poisson e quindi sto meglio con un binomio negativo. Tuttavia, ricevo costantemente avvisi che i miei modelli binomiali negativi raggiungono il loro limite di iterazione, anche quando aumento il limite massimo. "In theta.ml (Y, mu, pesi = oggetto @ resp $ pesi, limite = limite,: limite di iterazione raggiunto." Ciò accade usando diverse specifiche (ovvero modelli minimi e massimi per effetti sia fissi che casuali). Ho anche provato a rimuovere i valori anomali nella mia persona a carico (lordo, lo so!), Poiché l'1% superiore dei valori è molto anomalo (intervallo inferiore del 99% da 0-1012, primo 1% da 1013-5213). non ha alcun effetto sulle iterazioni e anche un effetto minimo sui coefficienti. Non includo questi dettagli qui. Anche i coefficienti tra Poisson e binomio negativo sono abbastanza simili. Questa mancanza di convergenza è un problema? Il modello binomiale negativo è adatto? Ho anche eseguito il modello binomiale negativo utilizzandoAllFit e non tutti gli ottimizzatori generano questo avviso (bobyqa, Nelder Mead e nlminbw no).

  2. La varianza per il mio decennio di effetto fisso è costantemente molto bassa o 0. Capisco che questo potrebbe significare che il modello è troppo adatto. Prendere un decennio dagli effetti fissi aumenta la varianza degli effetti casuali del decennio a 0,2620 e non ha molto effetto sui coefficienti degli effetti fissi. C'è qualcosa di sbagliato nel lasciarlo dentro? Sto bene interpretandolo come semplicemente non necessario per spiegare tra la varianza dell'osservazione.

  3. Questi risultati indicano che dovrei provare modelli a gonfiaggio zero? DHARMa sembra suggerire che l'inflazione zero potrebbe non essere il problema. Se pensi che dovrei provare comunque, vedi sotto.

Domande R

  1. Sarei disposto a provare modelli a zero inflazionato, ma non sono sicuro di quale pacchetto limita gli effetti casuali nidificati per Poisson a zero inflazionato e GLMM binomiali negativi. Userei glmmADMB per confrontare l'AIC con i modelli a zero inflazione, ma è limitato a un singolo effetto casuale, quindi non funziona per questo modello. Potrei provare MCMCglmm, ma non conosco le statistiche bayesiane quindi anche questo non è attraente. Altre opzioni?

  2. Posso visualizzare i coefficienti esponenziali nel riepilogo (modello) o devo farlo al di fuori del riepilogo come ho fatto qui?


1
(2) è facile: avere decadesia fisso che casuale non ha senso. O impostalo come fisso e includilo solo (1 | decade:TRTID10)come casuale (il che equivale a (1 | TRTID10)supporre che il tuo TRTID10non abbia gli stessi livelli per decenni diversi) o rimuovilo dagli effetti fissi. Con solo 4 livelli potresti essere meglio di averlo riparato: la consueta raccomandazione è di adattare effetti casuali se uno ha 5 livelli o più.
ameba,

1
A parte questo, le tue due trame sembrano identiche.
ameba,

1
Per quanto riguarda l'avviso di convergenza, in (1) hai detto che hai provato l' bobyqaottimizzatore e che non ha prodotto alcun avviso. Qual è il problema allora? Basta usare bobyqa.
ameba,

1
A proposito, non capisco perché dici che "I miei dati non supportano l'utilizzo di un modello di Poisson".
ameba,

1
Nella mia esperienza bobyqaconverge meglio dell'ottimizzatore predefinito (e penso di aver letto da qualche parte che diventerà predefinito nelle versioni future di lme4). Non penso che devi preoccuparti della non convergenza con l'ottimizzatore predefinito se converge con bobyqa.
ameba,

Risposte:


10

Credo che ci siano alcuni problemi importanti da affrontare con la tua stima.

Da quello che ho raccolto esaminando i tuoi dati, le tue unità non sono raggruppate geograficamente, ovvero tratti di censimento all'interno delle contee. Pertanto, l'uso dei volantini come fattore di raggruppamento non è appropriato per catturare l'eterogeneità spaziale in quanto ciò significa che hai lo stesso numero di individui dei gruppi (o, in altre parole, tutti i tuoi gruppi hanno solo un'osservazione ciascuno). L'uso di una strategia di modellazione multilivello ci consente di stimare la varianza a livello individuale, controllando al contempo la varianza tra i gruppi. Poiché i tuoi gruppi hanno un solo individuo ciascuno, la tua varianza tra i gruppi è la stessa della tua varianza a livello individuale, vanificando così lo scopo dell'approccio multilivello.

D'altra parte, il fattore di raggruppamento può rappresentare misurazioni ripetute nel tempo. Ad esempio, nel caso di uno studio longitudinale, i punteggi "matematici" di un individuo possono essere calcolati annualmente, quindi avremmo un valore annuale per ogni studente per n anni (in questo caso, il fattore di raggruppamento è lo studente come abbiamo n numero di osservazioni "nidificate" all'interno degli studenti). Nel tuo caso, hai ripetuto le misure di ciascun tratto del censimento entro decade. Pertanto, è possibile utilizzare la TRTID10variabile come fattore di raggruppamento per acquisire "tra varianza decennale". Ciò porta a 3142 osservazioni nidificate in 635 trattati, con circa 4 e 5 osservazioni per tratto censuale.

Come accennato in un commento, l'utilizzo decadecome fattore di raggruppamento non è molto appropriato, poiché hai solo circa 5 decenni per ogni tratto del censimento e il loro effetto può essere catturato meglio introducendo decadecome una covariata.

In secondo luogo, determinare se i dati devono essere modellati utilizzando un modello binomiale negativo o negativo (o un approccio a zero inflazione). Considera la quantità di sovradispersione nei tuoi dati. La caratteristica fondamentale di una distribuzione di Poisson è l'equidispersione, il che significa che la media è uguale alla varianza della distribuzione. Guardando i tuoi dati, è abbastanza chiaro che c'è molta sovradispersione. Le varianze sono molto maggiori delle medie.

library(dplyr)    
 dispersionstats <- scaled.mydata %>%
 + group_by(decade) %>%
 + summarise(
 + means = mean(R_VAC),
 + variances = var(R_VAC),
 + ratio = variances/means)

##   dispersionstats
##   # A tibble: 5 x 5
##   decade     means variances     ratio 
##    <int>     <dbl>     <dbl>     <dbl> 
## 1   1970  45.43513   4110.89  90.47822 
## 2   1980 103.52365  17323.34 167.33707 
## 3   1990 177.68038  62129.65 349.67087 
## 4   2000 190.23150  91059.60 478.67784 
## 5   2010 247.68246 126265.60 509.78821 

Tuttavia, per determinare se il binomio negativo è statisticamente più appropriato, un metodo standard consiste nell'eseguire un test del rapporto di verosimiglianza tra un modello di Poisson e un modello binomiale negativo, il che suggerisce che la negbin si adatta meglio.

library(MASS)
library(lmtest)

modelformula <- formula(R_VAC ~ factor(decade) + P_NONWHT * a_hinc + offset(HU_ln))

poismodel <- glm(modelformula, data = scaled.mydata, family = "poisson")   
nbmodel <- glm.nb(modelformula, data = scaled.mydata)

lrtest(poismodel, nbmodel)

## Likelihood ratio test

##  Model 1: R_VAC ~ factor(decade) + P_NONWHT * a_hinc + offset(HU_ln)  
## Model 2: R_VAC ~ factor(decade) + P_NONWHT * a_hinc + offset(HU_ln)
##   #Df  LogLik Df  Chisq Pr(>Chisq)
## 1   8 -154269
## 2   9  -17452  1 273634  < 2.2e-16 ***
##  ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Dopo aver stabilito ciò, un prossimo test potrebbe considerare se l'approccio multilivello (modello misto) sia giustificato utilizzando un approccio simile, il che suggerisce che la versione multilivello fornisce una soluzione migliore. (Un test analogo potrebbe essere usato per confrontare un adattamento glmer ipotizzando una distribuzione poisson all'oggetto glmer.nb, a condizione che i modelli siano uguali).

library(lme4)

glmmformula <- update(modelformula, . ~ . + (1|TRTID10))

nbglmm <- glmer.nb(glmmformula, data = scaled.mydata)

lrtest(nbmodel, nbglmm)

## Model 1: R_VAC ~ factor(decade) + P_NONWHT * a_hinc + offset(HU_ln)
## Model 2: R_VAC ~ factor(decade) + P_NONWHT + a_hinc + (1 | TRTID10) +
##     P_NONWHT:a_hinc + offset(HU_ln)
##   #Df LogLik Df Chisq Pr(>Chisq)
## 1   9 -17452
## 2  10 -17332  1 239.3  < 2.2e-16 ***
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Per quanto riguarda le stime dei modelli poisson e nb, si prevede che siano molto simili tra loro, con la distinzione principale che sono gli errori standard, vale a dire se è presente una sovradispersione, il modello di poisson tende a fornire errori standard distorti. Prendendo i tuoi dati come esempio:

poissonglmm <- glmer(glmmformula, data = scaled.mydata)
summary(poissonglmm)

## Random effects:
##  Groups  Name        Variance Std.Dev.
## TRTID10 (Intercept) 0.2001   0.4473
## Number of obs: 3142, groups:  TRTID10, 635

## Fixed effects:
##                     Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -2.876013   0.020602 -139.60   <2e-16 ***
## factor(decade)1980  0.092597   0.007602   12.18   <2e-16 ***
## factor(decade)1990  0.903543   0.007045  128.26   <2e-16 ***
## factor(decade)2000  0.854821   0.006913  123.65   <2e-16 ***
## factor(decade)2010  0.986126   0.006723  146.67   <2e-16 ***
## P_NONWHT           -0.125500   0.014007   -8.96   <2e-16 ***
## a_hinc             -0.107335   0.001480  -72.52   <2e-16 ***
## P_NONWHT:a_hinc     0.160937   0.003117   51.64   <2e-16 ***
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

summary(nbglmm)
## Random effects:
##  Groups  Name        Variance Std.Dev.
##  TRTID10 (Intercept) 0.09073  0.3012
## Number of obs: 3142, groups:  TRTID10, 635

## Fixed effects:
##                     Estimate Std. Error z value Pr(>|z|)
## (Intercept)        -2.797861   0.056214  -49.77  < 2e-16 ***
## factor(decade)1980  0.118588   0.039589    3.00  0.00274 **
## factor(decade)1990  0.903440   0.038255   23.62  < 2e-16 ***
## factor(decade)2000  0.843949   0.038172   22.11  < 2e-16 ***
## factor(decade)2010  1.068025   0.037376   28.58  < 2e-16 ***
## P_NONWHT            0.020012   0.089224    0.22  0.82253
## a_hinc             -0.129094   0.008109  -15.92  < 2e-16 ***
## P_NONWHT:a_hinc     0.149223   0.018967    7.87 3.61e-15 ***
## ---
## Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Nota come le stime dei coefficienti sono tutte molto simili, la differenza principale è solo il significato di una delle tue covariate, così come la differenza nella varianza degli effetti casuali, il che suggerisce che la varianza a livello di unità catturata dal parametro overdispersion in nb Il modello (il thetavalore nell'oggetto glmer.nb) acquisisce una parte della varianza tra i tratti acquisita dagli effetti casuali.

Per quanto riguarda i coefficienti esponenziali (e gli intervalli di confidenza associati), è possibile utilizzare quanto segue:

fixed <- fixef(nbglmm)
confnitfixed <- confint(nbglmm, parm = "beta_", method = "Wald") # Beware: The Wald method is less accurate but much, much faster.

# The exponentiated coefficients are also known as Incidence Rate Ratios (IRR)
IRR <- exp(cbind(fixed, confintfixed)
IRR
##                         fixed      2.5 %     97.5 %
## (Intercept)        0.06094028 0.05458271 0.06803835
## factor(decade)1980 1.12590641 1.04184825 1.21674652
## factor(decade)1990 2.46807856 2.28979339 2.66024515
## factor(decade)2000 2.32553168 2.15789585 2.50619029
## factor(decade)2010 2.90962703 2.70410073 3.13077444
## P_NONWHT           1.02021383 0.85653208 1.21517487
## a_hinc             0.87889172 0.86503341 0.89297205
## P_NONWHT:a_hinc    1.16093170 1.11856742 1.20490048

Considerazioni finali, relative all'inflazione zero. Non esiste un'implementazione multilivello (almeno di cui sono a conoscenza) di un modello di Poisson o Negbin gonfiato zero che consente di specificare un'equazione per il componente gonfiato zero della miscela. il glmmADMBmodello consente di stimare un parametro di inflazione zero costante. Un approccio alternativo sarebbe quello di utilizzare la zeroinflfunzione nel psclpacchetto, sebbene ciò non supporti i modelli multilivello. Pertanto, è possibile confrontare l'adattamento di un binomio negativo a livello singolo al binomio negativo a livello zero gonfiato. È probabile che se l'inflazione zero non è significativa per i modelli a livello singolo, è probabile che non sia significativa per le specifiche multilivello.

appendice

Se sei preoccupato per l'autocorrelazione spaziale, puoi controllarlo usando una qualche forma di regressione geografica ponderata (anche se credo che questo usi i dati dei punti, non le aree). In alternativa, è possibile raggruppare i tratti del censimento per un ulteriore fattore di raggruppamento (stati, contee) e includerlo come effetto casuale. Infine, e non sono sicuro che ciò sia del tutto fattibile, potrebbe essere possibile incorporare la dipendenza spaziale usando, ad esempio, il conteggio medio dei R_VACvicini del primo ordine come covariata. In ogni caso, prima di tali approcci, sarebbe sensato determinare se l'autocorrelazione spaziale è effettivamente presente (usando I di Global Moran, test LISA e approcci simili).


1
brmspuò adattarsi a modelli binomiali negativi a zero inflazione con effetti casuali.
Andrew M,

@prestevez e @Andrew, questo è super utile! Ha chiarito molti problemi che stavo riscontrando. Grazie per aver dedicato del tempo a guidarmi. Proverò a montare un modello misto zinb da brmse lo confronterò con il modello glmer.nb come indicato sopra. Proverò anche a includere il luogo definito dal censimento (sostanzialmente comune, ~ 170 gruppi) come fattore di raggruppamento per gli effetti casuali (solo 5 contee nei dati, quindi non lo userò). Testerò anche l'autocorrelazione spaziale dei residui usando il Global Moran's I. Riporterò indietro quando l'ho fatto.
Samuel Walker

@AndrewM, grazie per le informazioni! Non ero a conoscenza dei problemi e non avevo familiarità con le statistiche bayesiane in generale, anche se ora sono abbastanza interessato a esaminarle.
prestevez,

1
@SamuelWalker Sono contento che sia stato utile! Il comune sembra una buona scelta (non ho familiarità con i dati del censimento degli Stati Uniti, quindi ho suggerito le contee senza sapere davvero se sarebbero appropriate). Per quanto riguarda il confronto di glmer.nb si adatta a un oggetto brms, non sono sicuro che whay sarebbe il modo migliore per confrontarli, poiché non ho familiarità con le statistiche bayesiane. In bocca al lupo!
prestevez,

1
@SamuelWalker una potenziale alternativa potrebbe essere quella di adattarsi a modelli negbin standard e zero gonfiati utilizzandoli brmse confrontandoli.
prestevez,
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.