Analyse von Längsschnittdaten: Berücksichtigung der zeitlichen Autokorrelation in GLMM?

16

Hallo Statistik-Gurus und R-Programmier-Assistenten,

Ich interessiere mich für die Modellierung von Tierfängen als Funktion der Umgebungsbedingungen und des Tages des Jahres. Im Rahmen einer anderen Studie habe ich über einen Zeitraum von drei Jahren eine Anzahl von Erfassungen an ~ 160 Tagen. An jedem dieser Tage habe ich Temperatur, Niederschlag, Windgeschwindigkeit, relative Luftfeuchtigkeit usw. Da die Daten wiederholt aus den gleichen 5 Parzellen gesammelt wurden, verwende ich die Parzelle als Zufallseffekt.

Ich verstehe, dass nlme die zeitliche Autokorrelation in den Residuen leicht erklären kann, aber nicht mit nicht-Gaußschen Verknüpfungsfunktionen wie lme4 (die die Autokorrelation nicht verarbeiten können?) Umgeht. Derzeit denke ich, dass es funktionieren könnte, das nlme-Paket in R on log (count) zu verwenden. Meine derzeitige Lösung wäre also, Folgendes auszuführen:

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)

wo DOY = Tag des Jahres. Das endgültige Modell enthält möglicherweise mehr Interaktionen, aber dies ist meine allgemeine Idee. Ich könnte auch versuchen, die Varianzstruktur mit so etwas wie weiter zu modellieren

weights = v1Pow

Ich bin mir nicht sicher, ob es einen besseren Weg gibt, mit einer gemischten Poisson-Modellregression umzugehen, oder was auch immer? Ich habe gerade eine mathematische Diskussion in Kapitel 4 von "Regressionsmodelle für die Zeitreihenanalyse" von Kedem und Fokianos gefunden. Es war mir im Moment ein bisschen ein Rätsel, vor allem in der Anwendung (Codierung in R). Ich habe auch eine MCMC-Lösung bei Zuur et al. Mixed Effects Models-Buch (Kap. 23) in der Sprache BUGS (unter Verwendung von winBUGS oder JAG). Ist das meine beste Option? Gibt es ein einfaches MCMC-Paket in R, das dies handhaben würde? Ich bin nicht wirklich mit GAMM- oder GEE-Techniken vertraut, wäre aber bereit, diese Möglichkeiten zu erkunden, wenn die Leute meinen, sie würden bessere Einblicke liefern.Mein Hauptziel ist die Erstellung eines Modells zur Vorhersage von Tierfängen unter gegebenen Umweltbedingungen. Zweitens möchte ich erklären, worauf die Tiere in Bezug auf ihre Aktivität reagieren.

Überlegungen zur besten Vorgehensweise (philosophisch), zur Codierung in R oder in BUGS würden wir uns freuen. Ich bin ziemlich neu in R und BUGS (winBUGS), lerne aber. Dies ist auch das erste Mal, dass ich versucht habe, die zeitliche Autokorrelation zu behandeln.

Danke, Dan

djhocking
quelle
1
Ich bin im Allgemeinen ein großer Fan von GEE, aber ich würde es vermeiden, es hier zu verwenden, da Sie nur 5 Cluster (Grundstücke) haben. Um eine gute asymptotische Leistung zu erzielen, benötigt GEE normalerweise eine größere Anzahl von Clustern (ca. 40).
StatsStudent
Als Mac-Besitzer hatte ich es mit STAN leichter als mit WINBUGS.
eric_kernfeld

Antworten:

3

Die Protokollumsetzung Ihrer Antwort ist eine Option, obwohl sie nicht ideal ist. Ein GLM-Framework wird im Allgemeinen bevorzugt. Wenn Sie mit GLMs nicht vertraut sind, lesen Sie sie zunächst durch, bevor Sie sich mit gemischten Modellerweiterungen befassen. Für Zähldaten sind wahrscheinlich Poisson- oder negative Binomialverteilungsannahmen geeignet. Negatives Binomial wird angezeigt, wenn die Varianz höher als der Mittelwert ist, der eine Überdispersion anzeigt ( https://en.wikipedia.org/wiki/Overdispersion ). Die Interpretation der Parameterschätzungen ist für beide äquivalent.

In R gibt es mehrere Optionen, wobei lme4 meiner Erfahrung nach am häufigsten genannt wird.

#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))

Diese Links können auch hilfreich sein:

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

Beide stammen von Ben Bolker, Autor von lme4.

Ich habe die Beispiele nicht getestet, aber sie sollten Ihnen eine Vorstellung davon geben, wo Sie anfangen sollen. Bitte geben Sie Daten an, wenn Sie deren Implementierung überprüfen möchten.

T-Student
quelle