Dopasowanie Poissona GLM w R - problemy ze stawkami vs. zliczeniami

11

Obecnie pracuję nad projektem z udziałem GLM (i ewentualnie GAM) niektórych danych zliczających w czasie. Normalnie zrobiłbym to w SAS, ale próbuję przejść do R i mam ... problemy.

Kiedy dopasowuję GLM do zliczania danych, używając następujących elementów:

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

Dostaję:

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

Zignoruj ​​na chwilę wydajność lub jej brak samego modelu - w tym momencie głównie grając ze składnią i tym podobnymi.

Jednak gdy próbuję dopasować dane stawki (liczby / osobodni) i użyć przesunięcia w następujący sposób: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Dostaję ponad 50 ostrzeżeń, wszystkie „1: In dpois (y, mu, log = TRUE): non-integer x = 0,002082” itd. To więcej niż jedno na każdą obserwację (w zestawie danych jest tylko 30).

Dodatkowo dopasowanie modelu wydaje się pasować. Dane wyjściowe są następujące:

 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

Mimo to, jeśli wykreślę przewidywaną częstość w stosunku do rzeczywistych danych, dopasowanie nie będzie wyglądać o wiele gorzej, a oszacowanie rzeczywistego efektu nie zmieni się aż tak bardzo.

Czy ktoś ma pojęcie, co się dzieje - a może wszystko idzie dobrze i brakuje mi czegoś z powodu braku doświadczenia?

Fomite
źródło

Odpowiedzi:

17

Po dodaniu przesunięcia nie trzeba (i nie należy) obliczać szybkości i uwzględniać ekspozycję.

Nie wiem, czy to jest przyczyną błędów, ale jeśli ekspozycja na przypadek przypada na osobodni pd, zmienna zależna powinna być, countsa przesunięcie powinno być log(pd)takie:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)
sprzężonyprior
źródło
(+1) Czasami widziałem, jak epidemiologowie nazywają każdą niezależną zmienną będącą przedmiotem zainteresowania „narażeniem” (np. „Narażeniem na palenie papierosów”). Ale dobry haczyk, zdecydowanie nie powinieneś używać stawki jako zmiennej zależnej.
Andy W
Domyślam się, że zmienną „miesięcy” jest długość ekspozycji, ale zasada byłaby taka sama.
Aniko,
@Aniko Chyba wkrótce się dowiemy. Myślałem, że jeśli rozsądnie jest myśleć o szybkości, (counts/thing)to logarytmiczny model liniowy jest prawie zawsze counts ~ ... + offset(log(thing)). I podczas gdy domyślamy się innych rzeczy, przewiduję również, że log(pd) == exposure...
sprzężony przed
Aby wyjaśnić niektóre rzeczy - Andy W ma rację. „Ekspozycja” jest w rzeczywistości niezależną zmienną zainteresowania (w tym przypadku zmiana polityki). Miesiące to tylko „miesiące od daty X”, aby umożliwić pewną kontrolę trendów w danych.
Fomite,
@ConjugatePrior Kiedy używasz modelu w swojej odpowiedzi, czy wydajność modelu nie powinna być szybka? Wydaje się, że uruchomienie tego wszystkiego wydaje się surową liczbą, pomimo uwzględnienia przesunięcia. A może brakuje mi innego kroku?
Fomite,