Come analizzare i dati di conteggio longitudinale: tenere conto dell'autocorrelazione temporale in GLMM?


16

Buongiorno guru statistici e maghi di programmazione R,

Sono interessato a modellare catture di animali in funzione delle condizioni ambientali e del giorno dell'anno. Come parte di un altro studio, ho conteggi di catture in circa 160 giorni in tre anni. In ognuno di questi giorni ho temperatura, precipitazioni, velocità del vento, umidità relativa, ecc. Poiché i dati sono stati raccolti ripetutamente dagli stessi 5 grafici, uso la trama come effetto casuale.

La mia comprensione è che nlme può facilmente spiegare l'autocorrelazione temporale nei residui ma non gestisce funzioni di collegamento non gaussiane come lme4 (che non può gestire l'autocorrelazione?). Attualmente, penso che potrebbe funzionare per utilizzare il pacchetto nlme in R sul registro (conteggio). Quindi la mia soluzione in questo momento sarebbe quella di eseguire qualcosa del tipo:

m1 <- lme(lcount ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + 
      sin(2*pi/360*DOY) + cos(2*pi/360*DOY), random = ~1|plot, correlation =
      corARMA(p = 1, q = 1, form = ~DOY|plot), data = Data)

dove DOY = giorno dell'anno. Potrebbero esserci più interazioni nel modello finale, ma questa è la mia idea generale. Potrei anche potenzialmente provare a modellare ulteriormente la struttura della varianza con qualcosa di simile

weights = v1Pow

Non sono sicuro se esiste un modo migliore di fare con una regressione del modello misto Poisson o altro? Ho appena trovato una discussione matematica nel capitolo 4 di "Modelli di regressione per l'analisi delle serie storiche" di Kedem e Fokianos. Era un po 'oltre me al momento, specialmente nell'applicazione (codificandolo in R). Ho anche visto una soluzione MCMC in Zuur et al. Libro dei modelli di effetti misti (Cap 23) in linguaggio BUGS (usando winBUGS o JAG). È la mia migliore opzione? Esiste un pacchetto MCMC semplice in R in grado di gestirlo? Non ho molta familiarità con le tecniche GAMM o GEE, ma sarei disposto a esplorare queste possibilità se la gente pensasse di fornire una visione migliore.Il mio obiettivo principale è quello di creare un modello per prevedere le catture di animali date le condizioni ambientali. In secondo luogo, vorrei spiegare a cosa rispondono gli animali in termini di attività.

Ogni pensiero sul modo migliore di procedere (filosoficamente), su come codificarlo in R o in BUGS sarebbe apprezzato. Sono abbastanza nuovo su R e BUGS (winBUGS) ma sto imparando. Questa è anche la prima volta che provo ad affrontare l'autocorrelazione temporale.

Grazie Dan


1
Sono un grande fan di GEE in generale, ma eviterei di usarlo qui dato che hai solo 5 cluster (grafici). Per funzionare bene in modo asintotico, GEE di solito richiede un numero maggiore (circa 40) di cluster.
StatStudent

Come proprietario di Mac, ho avuto un momento più facile con STAN piuttosto che con WINBUGS.
eric_kernfeld

Risposte:


3

Il registro che trasforma la tua risposta è un'opzione sebbene non ideale. Un framework GLM è generalmente preferito. Se non si ha familiarità con i GLM, iniziare a esaminarli prima di esaminare le estensioni del modello miste. Per i dati di conteggio saranno probabilmente adatti i presupposti distributivi binomiali di Poisson o negativi. Il binomio negativo è indicato se la varianza è superiore alla media che indica una sovra dispersione ( https://en.wikipedia.org/wiki/Overdispersion ). L'interpretazione delle stime dei parametri è equivalente per i due.

Esistono diverse opzioni in R con lme4 più comunemente citato nella mia esperienza.

#glmer
library(lme4) 
glmer(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) + (1|plot), family=poisson, data = Data) 
# use glmer.nb with identical syntax but no family for negative binomial.

# glmmADMB with negative binomial
install.packages("glmmADMB", repos=c("http://glmmadmb.r-forge.r-project.org/repos", getOption("repos")),type="source") 
require(glmmADMB)
glmmadmb(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) + (1|plot), 
           family="nbinom", zeroInflation=FALSE, data=Data)

# glmmPQL, requires an estimate for theta which can be obtained from a 
# glm model in which the correlation structure is ignored.
library(MASS)
glmmPQL(count ~ AirT + I(AirT^2) + RainAmt24 + I(RainAmt24^2) + RHpct + windspeed + sin(2*pi/360*DOY) + cos(2*pi/360*DOY) , random = list(~1 | plot), data = Data,family = negative.binomial(theta = 4.22, link = log))

Questi collegamenti possono anche essere di aiuto:

https://udrive.oit.umass.edu/xythoswfs/webui/_xy-11096203_1-t_yOxYgf1s http://www.cell.com/trends/ecology-evolution/pdf/S0169-5347(09)00019-6.pdf

Entrambi sono di Ben Bolker, autore di lme4.

Non ho testato gli esempi, ma dovrebbero darti un'idea di dove iniziare. Fornisci i dati se desideri verificarne l'implementazione.

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.