Ajustement d'un GLM de Poisson dans R - problèmes avec les taux par rapport aux nombres

11

Je travaille actuellement sur un projet impliquant des GLM (et éventuellement des GAM) de certaines données de comptage au fil du temps. Normalement, je le ferais dans SAS, mais j'essaie de passer à R, et d'avoir ... des problèmes.

Lorsque j'adapte un GLM pour compter les données à l'aide des éléments suivants:

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

Je reçois:

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

Ignorez un instant les performances, ou leur absence, du modèle lui-même - principalement en jouant avec la syntaxe et autres à ce stade.

Cependant, lorsque j'essaie d'ajuster les données de taux (nombre / jour-personne) et d'utiliser un décalage comme ceci: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Je reçois plus de 50 avertissements, tous "1: Dans dpois (y, mu, log = TRUE): non entier x = 0,002082" etc. C'est plus d'un pour chaque observation (il n'y en a que 30 dans l'ensemble de données).

De plus, l'ajustement du modèle semble aller au pot. Sortie comme suit:

 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

Malgré cela, si je trace le taux prévu par rapport aux données réelles, l'ajustement ne semble pas bien pire et l'estimation de l'effet réel ne semble pas changer beaucoup.

Quelqu'un a une idée de ce qui se passe - ou si tout va bien et que je manque quelque chose en raison de l'inexpérience?

Fomite
la source

Réponses:

17

Lorsque vous ajoutez le décalage, vous n'avez pas besoin (et ne devriez pas) également calculer le taux et inclure l'exposition.

Je ne sais pas si c'est la cause des erreurs, mais si l'exposition par cas est des jours-personnes pd, alors la variable dépendante devrait être countset le décalage devrait être log(pd), comme ceci:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)
conjugateprior
la source
(+1) Parfois, j'ai vu des épidémiologistes appeler toute variable d'intérêt indépendante "exposition" (par exemple "exposition à la cigarette"). Mais bonne capture, vous ne devez certainement pas utiliser le taux comme variable dépendante.
Andy W
J'aurais deviné que la variable «mois» est la durée de l'exposition, mais le principe serait le même.
Aniko
@Aniko Je suppose que nous le saurons assez tôt. Je pensais que s'il est raisonnable de penser à un taux, (counts/thing)alors le modèle logarithmique linéaire est presque toujours counts ~ ... + offset(log(thing)). Et alors que nous sommes en train de deviner les choses, je prédis également que log(pd) == exposure...
conjugateprior
Pour clarifier certaines choses - Andy W a raison. L'exposition est en fait une variable d'intérêt indépendante (dans ce cas, un changement de politique). Mois n'est que "mois depuis la date X" pour permettre un certain contrôle des tendances dans les données.
Fomite
@ConjugatePrior Lorsque vous utilisez le modèle dans votre réponse, la sortie du modèle ne devrait-elle pas être dans un taux? En cours d'exécution, il semble que tout soit compté brut malgré l'inclusion du décalage. Ou y a-t-il une autre étape qui me manque?
Fomite