泊松回归R语言实例

泊松回归

当通过一系列连续型和/或类别型变量来预测计数型结果变量时,泊松回归是一个非常有用的工具。泊松回归(Poisson regression)是用来为计数资料和列联表建模的一种回归分析。泊松回归假设反应变量Y是泊松分布,并假设它期望值的对数可被未知参数的线性组合建模。泊松回归模型有时(特别是当用作列联表模型时)又被称作对数-线性模型。该模型在地理学中被广泛应用,如Wu、张华和贺灿飞运用泊松模型分别研究了外资企业在广州和北京城市内部区位选择。
以下文献列举了泊松回归在地理学中的应用:

[1] Wu F. Intrametropolitan FDI firm location in Guangzhou, China: A Poisson and negative binomial analysis. The Annals of Regional Science, 1999, 33: 535-555.
[2] 张华, 贺灿飞. 区位通达性与在京外资企业的区位选择. 地理研究, 2007, 26(5): 984-994.
[3] 袁丰,魏也华,陈雯,金志丰.苏州市区信息通讯企业空间集聚与新企业选址[J].地理学报,2010,65(02):153-163.
[4] 吕卫国,陈雯.制造业企业区位选择与南京城市空间重构[J].地理学报,2009,64(02):142-152.

研究数据

数据来自robust包中的Breslow(癫痫数据),就遭受轻微或严重间歇性的病人的年龄和癫痫发病数收集了数据,包含病人被随机化分配到药物组或者安慰剂组前八周和随机分配后八周两种情况,利用该数据集,讨论在治疗初期的八周内,抗癫痫药物对癫痫发病数的影响。
响应变量:

  • sumY:随机化后八周内癫痫发病数
预测变量:
  • Trt:治疗条件
  • Age:年龄
  • Base:前八周内的基础癫痫发病数
#import and view data 
> library(robust)
> data("breslow.dat")
> names(breslow.dat)
 [1] "ID"    "Y1"    "Y2"    "Y3"    "Y4"    "Base"  "Age"   "Trt"   "Ysum"  "sumY"  "Age10" "Base4"
> head(breslow.dat)
   ID Y1 Y2 Y3 Y4 Base Age     Trt Ysum sumY Age10 Base4
1 104  5  3  3  3   11  31 placebo   14   14   3.1  2.75
2 106  3  5  3  3   11  30 placebo   14   14   3.0  2.75
3 107  2  4  0  5    6  25 placebo   11   11   2.5  1.50
4 114  4  4  1  4    8  36 placebo   13   13   3.6  2.00
5 116  7 18  9 21   66  22 placebo   55   55   2.2 16.50
6 118  5  2  8  7   27  29 placebo   22   22   2.9  6.75
> summary(breslow.dat[,c(6,7,8,10)])
      Base             Age               Trt          sumY       
 Min.   :  6.00   Min.   :18.00   placebo  :28   Min.   :  0.00  
 1st Qu.: 12.00   1st Qu.:23.00   progabide:31   1st Qu.: 11.50  
 Median : 22.00   Median :28.00                  Median : 16.00  
 Mean   : 31.22   Mean   :28.34                  Mean   : 33.05  
 3rd Qu.: 41.00   3rd Qu.:32.00                  3rd Qu.: 36.00  
 Max.   :151.00   Max.   :42.00                  Max.   :302.00  
 #plotting data
opar <- par(no.readonly = TRUE)
par(mfrow=c(1,2))
attach(breslow.dat)
hist(sumY,breaks = 20,ylim = c(0,35))
boxplot(sumY ~ Trt, xlab = "Treatment",main="Group Comparisons")

在这里插入图片描述
从图中可以看出因变量的偏倚性以及可能的离群点,药物治疗下的癫痫发病数似乎变小了,且方差业变小了(泊松分布中,较小的方差伴随着较小的均值),与标准的最小二乘回归不同,泊松回归不关注模型的方差异质性。

建模分析

  • 泊松回归建模
> fit <- glm(sumY ~ Base + Age + Trt, data = breslow.dat, family = poisson())
> summary(fit)

Call:
glm(formula = sumY ~ Base + Age + Trt, family = poisson(), data = breslow.dat)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-6.0569  -2.0433  -0.9397   0.7929  11.0061  

Coefficients:
               Estimate Std. Error z value Pr(>|z|)    
(Intercept)   1.9488259  0.1356191  14.370  < 2e-16 ***
Base          0.0226517  0.0005093  44.476  < 2e-16 ***
Age           0.0227401  0.0040240   5.651 1.59e-08 ***
Trtprogabide -0.1527009  0.0478051  -3.194   0.0014 ** 
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

(Dispersion parameter for poisson family taken to be 1)

    Null deviance: 2122.73  on 58  degrees of freedom
Residual deviance:  559.44  on 55  degrees of freedom
AIC: 850.71

Number of Fisher Scoring iterations: 5

从输出结果中可以看出三个预测变量都通过了0.05的显著性检验

  • 模型参数解释
    使用coef()函数可以获取模型参数
> coef(fit)
 (Intercept)         Base          Age Trtprogabide 
  1.94882593   0.02265174   0.02274013  -0.15270095 
> exp(coef(fit))
 (Intercept)         Base          Age Trtprogabide 
   7.0204403    1.0229102    1.0230007    0.8583864 

在泊松回归中,因变量以条件均值的对数形式loge(λ)来建模。年龄的回归参数为0.0227,表示其他预测变量保持不变时,年龄增加一岁,癫痫发病的对数均值将增加0.0227。截距项表示预测变量都为0时,癫痫发病的对数均值,由于年龄不可能为0岁,且调查对象的基础发病数均不为0,因此在本例中截距项没有意义。
通常在因变量的初始尺度(癫痫发病数,而非发病的对数)上解释回归系数比较容易,通过指数化系数可以发现,当其他变量保持不变时,年龄增加一岁,期望的癫痫发病数将乘以1.023,这意味着年龄的增加与较高的癫痫发病数相关联。更为重要的,一单位Trt的变化(即从安慰剂组到治疗组),期望的癫痫发病数将乘以0.86,也就是说,当其他变量保持不变时,服药物组相对服安慰剂组癫痫发病数降低了14%,表明从统计学的角度上,药物对癫痫的发病具有一定的抑制作用。

  • 过度离势
    此外,还需要评价模型的过度离势,泊松分布的方差和均值相等,当响应变量观测的方差比一句泊松分布预测的方差大时,泊松回归会发生过度离势。处理计数型数据时经常发生过度离势,过度离势会对结果的可解释性造成负面影响。
    如果存在过度离势,在模型中将无法进行解释,那么可能会得到很小的标准误差和置信区间,并且显著性建议也过于宽松(也就是说,你将会发现并不真实存在的效应)。与logistic回归类似,如果残差偏差与残差自由度的比例远远大于1,那么表明存在过度离势。
#检验过度离势
> deviance(fit)/df.residual(fit)
[1] 10.1717

显然,比例远远大于1。
qcc包也提供了一个对泊松模型过度离势的检验方法。

#过度离势检验
> #install.packages("qcc")
> library(qcc)
> qcc.overdispersion.test(breslow.dat$sumY,type = "poisson")
                   
Overdispersion test Obs.Var/Theor.Var Statistic p-value
       poisson data          62.87013  3646.468       0

显著性检验p值小于0.05,表明确实存在过度离势。
处理过度离势
可以通过用family="quasipossion"替换family=“possion”,与logistic回归处理过度离势的方法是相同的。

> fit.od <- glm(sumY ~ Base + Age + Trt, data = breslow.dat,family = quasipoisson())
> summary(fit.od)

Call:
glm(formula = sumY ~ Base + Age + Trt, family = quasipoisson(), 
    data = breslow.dat)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-6.0569  -2.0433  -0.9397   0.7929  11.0061  

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept)   1.948826   0.465091   4.190 0.000102 ***
Base          0.022652   0.001747  12.969  < 2e-16 ***
Age           0.022740   0.013800   1.648 0.105085    
Trtprogabide -0.152701   0.163943  -0.931 0.355702    
---
Signif. codes:  0***0.001**0.01*0.05.0.1 ‘ ’ 1

(Dispersion parameter for quasipoisson family taken to be 11.76075)

    Null deviance: 2122.73  on 58  degrees of freedom
Residual deviance:  559.44  on 55  degrees of freedom
AIC: NA

Number of Fisher Scoring iterations: 5

> coef(fit.od)
 (Intercept)         Base          Age Trtprogabide 
  1.94882593   0.02265174   0.02274013  -0.15270095 

注意,使用类泊松(qussi-poisson)方法所得到的参数估计与泊松方法相同,但是标准误差(Std.Error)变大了许多,预测变量显著性也发生了变化。标准误差越大,将会导致Trt和Age的p值越大于0.05。从统计学角度来看,当考虑过度离势,并控制其他变量不变时,没有充足的证据表明药物治疗相对于使用安慰剂能显著降低癫痫发病次数。

猜你喜欢

转载自blog.csdn.net/qingchen98/article/details/107673471