Anpassen eines Poisson GLM in R - Probleme mit Raten vs. Zählungen

11

Ich arbeite derzeit an einem Projekt, an dem GLMs (und eventuell GAMs) mit einigen Zähldaten im Laufe der Zeit beteiligt sind. Normalerweise würde ich dies in SAS tun, aber ich versuche, zu R zu wechseln, und habe ... Probleme.

Wenn ich einen GLM anpasse, um Daten wie folgt zu zählen:

cdi_model <- glm(counts ~ exposure + covariate + month, data=test, family = poisson)

Ich bekomme:

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.9825  -0.7903  -0.1187   0.5717   1.7649  

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  1.97563    0.20117   9.821  < 2e-16 ***
exposure     0.94528    0.30808   3.068  0.00215 ** 
covariate   -0.01317    0.28044  -0.047  0.96254    
months      -0.03203    0.01303  -2.458  0.01398 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1 

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 40.219  on 29  degrees of freedom
Residual deviance: 29.297  on 26  degrees of freedom
AIC: 137.7

Number of Fisher Scoring iterations: 5

Ignorieren Sie für einen Moment die Leistung oder das Fehlen des Modells selbst - spielen Sie an dieser Stelle meistens mit Syntax und dergleichen.

Wenn ich jedoch versuche, Tarifdaten (Anzahl / Personentage) anzupassen und einen Offset wie folgt zu verwenden: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Ich erhalte mehr als 50 Warnungen, alle "1: In dpois (y, mu, log = TRUE): nicht ganzzahlig x = 0,002082" usw. Das ist mehr als eine für jede Beobachtung (es gibt nur 30 im Datensatz).

Zusätzlich scheint die Modellanpassung in den Topf zu gehen. Ausgabe wie folgt:

 Deviance Residuals: 
       Min          1Q      Median          3Q         Max  
-0.0273656  -0.0122169   0.0002396   0.0072269   0.0258643  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)
(Intercept) -15.40110   15.12772  -1.018    0.309
exposure      0.84848   22.18012   0.038    0.969
covariate    -0.02751   21.31262  -0.001    0.999
months       -0.01889    0.95977  -0.020    0.984

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 0.0068690  on 29  degrees of freedom
Residual deviance: 0.0054338  on 26  degrees of freedom
AIC: Inf

Number of Fisher Scoring iterations: 9

Wenn ich jedoch die vorhergesagte Rate gegen die tatsächlichen Daten zeichne, sieht die Anpassung nicht viel schlechter aus, und die tatsächliche Effektschätzung scheint sich nicht allzu sehr zu ändern.

Hat jemand eine Idee, was los ist - oder ob alles richtig läuft und ich aufgrund von Unerfahrenheit etwas vermisse?

Fomite
quelle

Antworten:

16

Wenn Sie den Offset hinzufügen, müssen (und sollten) Sie nicht auch die Rate berechnen und die Belichtung einbeziehen.

Ich weiß nicht, ob dies die Ursache für die Fehler ist, aber wenn die Exposition pro Fall Personentage beträgt pd, sollte die abhängige Variable countsund der Offset log(pd)wie folgt sein :

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)
Konjugatprior
quelle
(+1) Manchmal habe ich gesehen, wie Epidemiologen eine unabhängige interessierende Variable als "Exposition" bezeichneten (z. B. "Exposition gegenüber rauchenden Zigaretten"). Aber guter Fang, Sie sollten die Rate definitiv nicht als abhängige Variable verwenden.
Andy W
Ich hätte vermutet, dass die Variable "Monate" die Dauer der Exposition ist, aber das Prinzip wäre dasselbe.
Aniko
@ Aniko Ich denke, wir werden es früh genug herausfinden. Ich dachte, wenn es vernünftig ist, sich eine Rate wie diese (counts/thing)vorzustellen, ist das logarithmische lineare Modell fast immer counts ~ ... + offset(log(thing)). Und während wir das zweite Mal raten, sage ich auch voraus, dass log(pd) == exposure...
Conjugateprior
Um einige Dinge zu klären - Andy W ist richtig. "Exposition" ist eigentlich eine unabhängige interessierende Variable (in diesem Fall eine Änderung der Politik). Monate sind nur "Monate seit Datum X", um Trends in den Daten zu steuern.
Fomite
@ConjugatePrior Wenn Sie das Modell in Ihrer Antwort verwenden, sollte die Ausgabe des Modells nicht in einer Rate erfolgen? Beim Ausführen scheint trotz der Einbeziehung des Offsets alles als Rohzählung ausgegeben zu werden. Oder fehlt mir noch ein Schritt?
Fomite