Anpassen eines gemischten Poisson GLM-Modells mit zufälliger Steigung und Achsenabschnitt


9

Ich arbeite derzeit an einer Reihe von Poisson-Zeitreihenmodellen, die versuchen, den Effekt einer Änderung der Art und Weise, wie die Zählungen erhalten wurden (Wechsel von einem Diagnosetest zu einem anderen), abzuschätzen und gleichzeitig andere Trends im Laufe der Zeit zu kontrollieren (z. B. eine allgemeine Zunahme der Inzidenz von Krankheiten). Ich habe Daten für verschiedene Websites.

Während ich auch an GAMs herumgebastelt habe, habe ich eine Reihe ziemlich grundlegender GLMs mit Zeittrends angepasst und dann die Ergebnisse zusammengefasst. Der Code dafür würde in SAS ungefähr so ​​aussehen:

PROC GENMOD data=work.data descending;
  model counts = dependent_variable time time*time / link=log dist = poisson;
run;

oder dies in R:

glm(counts ~ dependent_variable + time + time*time, family="poisson")

Nehmen Sie dann diese Schätzungen und bündeln Sie sie über die verschiedenen Standorte. Es wurde auch vorgeschlagen, dass ich versuche, ein Poisson-Mischmodell mit einer zufälligen Steigung und einem zufälligen Schnittpunkt für jede Site zu verwenden, anstatt zu bündeln. Im Grunde genommen hätten Sie also den festen Effekt von abhängige_Variable, dann einen zufälligen Effekt für den Achsenabschnitt und die Zeit (oder im Idealfall Zeit und Zeit ^ 2, obwohl ich verstehe, dass das etwas haarig wird).

Mein Problem ist, dass ich keine Ahnung habe, wie ich eines dieser Modelle anpassen soll, und es scheint, dass bei gemischten Modellen die Dokumentation aller plötzlich sehr undurchsichtig wird. Hat jemand eine einfache Erklärung (oder einen Code), wie man das anpasst, worauf ich achten möchte, und worauf man achten muss?

Antworten:


14

In R:

library(lme4)
lmer(counts ~ dependent_variable + (1+time|ID), family="poisson")

In diesem Fall und dieser Code passt zum Modell YiPoisson(λi)

log(λi)=β0+β1Xi+ηi1+ηi2t

wo ist , ist und ist . sind feste Effekte und sind zufällige Effekte, deren Varianzen vom Modell geschätzt werden.Xidependent_variablei β 0 , β 1 η i 1 , η i 2ttimeiIDβ0,β1ηi1,ηi2

Hier ist ein Beispiel mit einigen schnell simulierten Daten, bei denen die zufälligen Effektvarianzen tatsächlich 0 sind, die Kovariate keine Auswirkung hat, jedes Ergebnis ist und jedes Individuum 10 Mal zu Zeiten .t = 1 , . . . , 10Poisson(1)t=1,...,10

x = rnorm(100)
t = rep(1:10,each=10)
ID = rep(1:10,10)
y = rpois(100,1)
g <- lmer(y ~ x + (1+t|ID), family="poisson")
summary(g)
Generalized linear mixed model fit by the Laplace approximation 
Formula: y ~ x + (1 + t | ID) 
   AIC   BIC logLik deviance
 108.8 121.9 -49.42    98.85
Random effects:
 Groups Name        Variance  Std.Dev. Corr   
 ID     (Intercept) 0.0285038 0.168831        
        t           0.0027741 0.052669 -1.000 
Number of obs: 100, groups: ID, 10

Fixed effects:
            Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.09078    0.11808  -0.769    0.442
x            0.13670    0.08845   1.546    0.122

Correlation of Fixed Effects:
  (Intr)
x -0.127

Ein Punkt der Vorsicht - die Std.Dev.Spalte ist nur die Quadratwurzel der VarianceSpalte, NICHT der Standardfehler der Varianzschätzung!


Und sein ηi1, das zum zufälligen Achsenabschnitt führt?
Fomite

ηi1 ist der zufällige Achsenabschnitt, ja.
Makro

Danke für die Antwort - noch eine Frage. In einigen GLMs profitieren einige Standorte stark von der Laufzeit. Es scheint, dass die meisten Leute ein oder zwei zufällige Effekte erkennen - wie böse wird ein dritter in Bezug auf die Berechnung sein?
Fomite

Nun, in dem obigen simulierten Beispiel, das nur 100 Beobachtungen und 10 Gruppen hatte g <- lmer(y ~ x + (1+t+I(t^2)|ID), family="poisson"), erhöhte das Hinzufügen des dritten zufälligen Effekts (durch Tippen ) die Rechenzeit von ungefähr 0,75 Sekunden auf ungefähr 11 Sekunden. Mit zunehmender Stichprobengröße nimmt wahrscheinlich auch die Zunahme der Rechenzeit zu.
Makro

1
@andrea, das würde die Überzeugung widerspiegeln, dass es einen säkularen Trend im Datensatz gibt - ich habe nicht a priori angenommen, dass dies sinnvoll ist. Wenn die Einheiten Menschen und Alter wären, dann stimme ich sicherlich zu, dass ein fester Effekt in der Zeit viel Sinn machte, aber in anderen Situationen wäre die zeitliche Steigung eher eine zufällige Richtung, in die sich jeder Einzelne bewegt. Deshalb habe ich diesen Effekt nicht berücksichtigt (und Epigrad hat nicht gefragt, wie der feste Zeiteffekt aufgenommen werden soll)t
Makro

2

In SAS:

proc glimmix data = yourdata ic = q;
    class id;
    model y = x / dist = poisson solution;
    random intercept t / subject = id;
run;

Aber dann gibt es natürlich viele mehr oder weniger nützliche Optionen zum Spielen.


Danke :) Leider bin ich bei Konvergenzproblemen auf Grund gelaufen, aber ich werde daran basteln.
Fomite
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.