今天是各类统计方法R语言实现的第12期,我们主要介绍泊松回归。
泊松回归
计数型,如某地区某年发生肿瘤患者的人数等,常用泊松回归,假设因变量Y服从泊松分布。
此处分析的是robust 包中的Breslow癫痫数据,我们需要预测癫痫的发病次数。
# 载入数据
library(robust)
## Loading required package: fit.models
data(breslow.dat,package="robust")
names(breslow.dat)
## [1] "ID" "Y1" "Y2" "Y3" "Y4" "Base" "Age" "Trt" "Ysum"
## [10] "sumY" "Age10" "Base4"
summary(breslow.dat[c(6: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
opar<-par(no.readonly=TRUE)
hist(breslow.dat$sumY,breaks=20,xlab="Seizure Count",main="Distribution of Seizures")
可以看到该数据为计数资料。
boxplot(breslow.dat$sumY~breslow.dat$Trt,xlab="Treatment",main="Group Comparisons")
两组间看起来似乎有一定的差异,但差异不大。同时progabide治疗组似乎有一个离群点。
泊松回归
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
此处每一个变量均非常显著。
解释模型参数
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
以Age 为例进行举例:此处说明保持其他变量不变,年龄增加一岁,期望的癫痫发病次数将乘以1.023。同时,可以分析得出治疗组发病次数比安慰剂组期望发病数降低了14%(即1-0.858)
过度离势
可能发生过度离势的原因如下:
(1)遗漏了某个重要的预测变量;
(2)可能因为事件相关;
(3)在纵向数据分析中,重复测量的数据由于内在群聚特性可导致过度离势。此处暂不讨论纵向泊松模型。
过度离势由于放宽了统计检验的条件,会导致模型不准确,评价方法与上次Logistic回归类似。
deviance(fit)/df.residual(fit)
## [1] 10.1717
得到的结果远大于1.
library(qcc)
## Warning: package 'qcc' was built under R version 3.6.3
## Package 'qcc' version 2.7
## Type 'citation("qcc")' for citing this R package in publications.
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,二者有显著差异,因此存在过度离势,可以使用quasipoisson方法进行拟合。
fit<-glm(sumY~Base+Age+Trt,data=breslow.dat,family=quasipoisson())
summary(fit)
##
## 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
此时age不再显著,可以将其剔除后重新建模。
好了,今天的R语言实现统计方法系列推文暂时告一段落,我们下次再见吧! 小伙伴们如果有什么统计上的问题,或者如果想要学习什么方面的生物信息内容,可以在微信群或者知识星球提问,没准哪天的推文就是专门解答你的问题哦!