在 R 中拟合 Poisson GLM - 比率与计数的问题

机器算法验证 r 泊松分布 广义线性模型
2022-03-24 04:28:05

我目前正在从事一个项目,该项目涉及一些计数数据的 GLM(最终是 GAM)。通常我会在 SAS 中执行此操作,但我正在尝试迁移到 R,并且遇到......问题。

当我使用以下方法拟合 GLM 来计算数据时:

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

我得到:

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

暂时忽略模型本身的性能或缺乏性能——此时主要是在玩语法等。

但是,当我尝试拟合速率数据(计数/人天)并使用如下偏移量时: cdi_model <- glm(count_rate ~ exposure + covariate + months + offset(log(pd)), data=test, family = poisson)

我收到 50 多个警告,全部为“1:在 dpois(y, mu, log = TRUE) 中:非整数 x = 0.002082”等。对于每个观察,这不止一个(数据集中只有 30 个)。

此外,模型拟合似乎很糟糕。输出如下:

 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

尽管如此,如果我根据实际数据绘制预测率,拟合看起来并没有那么差,实际效果估计似乎也没有太大变化。

任何人都知道发生了什么 - 或者如果一切正常并且由于缺乏经验而我错过了一些东西?

1个回答

当您添加偏移量时,您不需要(也不应该)计算比率并包括曝光。

我不知道这是否是错误的原因,但如果每个案例的曝光是 person days pd,那么因变量应该是counts,偏移量应该是log(pd),如下所示:

cdi_model <- glm(counts ~ covariate + months + offset(log(pd)), 
                 data=test, family = poisson)