Montagem de um GLM de Poisson em R - problemas com taxas x contagens

11

Atualmente, estou trabalhando em um projeto envolvendo GLMs (e eventualmente GAMs) de alguns dados de contagem ao longo do tempo. Normalmente eu faria isso no SAS, mas estou tentando mudar para R e tendo ... problemas.

Quando encaixo um GLM para contar dados usando o seguinte:

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

Eu recebo:

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

Ignore por um momento a performance, ou a falta dela, do próprio modelo - principalmente jogando com sintaxe e coisas semelhantes neste momento.

No entanto, quando tento ajustar dados de taxa (contagens / pessoa-dia) e usar um deslocamento da seguinte forma: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

Recebo mais de 50 avisos, todos "1: In dpois (y, mu, log = TRUE): não inteiro x = 0,002082" etc. Isso é mais do que um para cada observação (há apenas 30 no conjunto de dados).

Além disso, o ajuste do modelo parece ir para o pote. Saída da seguinte forma:

 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

Apesar disso, se eu plotar a taxa prevista em relação aos dados reais, o ajuste não parece muito pior e a estimativa do efeito real não parece mudar muito.

Alguém tem uma idéia do que está acontecendo - ou se tudo está dando certo e estou sentindo falta de algo devido à inexperiência?

Fomite
fonte

Respostas:

17

Quando você adiciona o deslocamento, não precisa (e não deve) também calcular a taxa e incluir a exposição.

Não sei se essa é a causa dos erros, mas se a exposição por caso for dias-pessoa pd, a variável dependente deve ser countse o deslocamento deve ser log(pd)assim:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)
conjugado
fonte
(+1) Às vezes, tenho visto epidemiologistas chamarem qualquer variável de interesse independente de "exposição" (por exemplo, "exposição a fumar cigarros"). Mas boa captura, você definitivamente não deve usar a taxa como variável dependente.
Andy W
Eu teria imaginado que a variável 'meses' é a duração da exposição, mas o princípio seria o mesmo.
Aniko
@ Aniko Acho que descobriremos em breve. Eu estava pensando que se é razoável pensar em uma taxa como (counts/thing)o modelo linear logarítmico é quase sempre counts ~ ... + offset(log(thing)). E enquanto nós estamos adivinhando as coisas, eu também prevêem que log(pd) == exposure...
conjugateprior
Para esclarecer algumas coisas - Andy W está correto. "Exposição" é na verdade uma variável independente de interesse (nesse caso, uma mudança na política). Meses é apenas "meses desde a data X" para permitir algum controle de tendências nos dados.
Fomite 12/04
@ConjugatePrior Ao usar o modelo em sua resposta, a saída do modelo não deve estar em uma taxa? A execução parece exibir tudo como uma contagem bruta, apesar da inclusão do deslocamento. Ou há outro passo que estou perdendo?
Fomite 12/04