本篇介绍一种常见的广义线性模型:泊松回归。泊松分布是离散型分布,它的概率分布函数如下:

写成指数族分布的形式如下:

对照指数族分布的通式:

可得,

广义线性模型假设与解释变量存在线性关系,即

又因为泊松分布的数学期望就是,因此泊松回归可写成如下形式:

泊松回归是计数模型,因变量必须为自然数。一般针对具有稳定发生频数/率的事件进行建模。在glm函数中,泊松回归的family参数设置为poisson(link = "log")poisson()

示例

示例数据是来自dlnm工具包的chicagoNMMAPS数据集,它记录的是芝加哥逐日的死亡人口数和温度、环境污染物浓度等信息。

library(dlnm)
names(chicagoNMMAPS)
##  [1] "date"  "time"  "year"  "month" "doy"   "dow"   "death" "cvd"   "resp"
## [10] "temp"  "dptp"  "rhum"  "pm10"  "o3"

在一段时间内,自然状态下地区的死亡人口可以看作是等频数发生的,因此可以使用泊松回归进行建模。

model <- glm(death ~ 1, family = poisson(),data = chicagoNMMAPS)summary(model)
##
## Call:
## glm(formula = death ~ 1, family = poisson(), data = chicagoNMMAPS)
##
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -4.6735  -0.9850  -0.1323   0.7891  21.2791
##
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept) 4.748568   0.001302    3648   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
##     Null deviance: 9873.8  on 5113  degrees of freedom
## Residual deviance: 9873.8  on 5113  degrees of freedom
## AIC: 43525
##
## Number of Fisher Scoring iterations: 4

在模型中添加温度变量temp作为解释变量:

model.2 <- glm(death ~ temp, family = poisson(),data = chicagoNMMAPS)summary(model.2)
##
## Call:
## glm(formula = death ~ temp, family = poisson(), data = chicagoNMMAPS)
##
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -4.3097  -0.8563  -0.0719   0.7530  22.5216
##
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)
## (Intercept)  4.7927697  0.0017346 2762.97   <2e-16 ***
## temp        -0.0044903  0.0001197  -37.51   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
##     Null deviance: 9873.8  on 5113  degrees of freedom
## Residual deviance: 8471.8  on 5112  degrees of freedom
## AIC: 42125
##
## Number of Fisher Scoring iterations: 4

在模型中添加温度的时间滞后项作为解释变量:

library(dplyr)
model.3 <- glm(death ~ temp + lag(temp, 1) + lag(temp, 2) +lag(temp, 3) + lag(temp, 4) + lag(temp, 5),family = poisson(),data = chicagoNMMAPS)summary(model.3)
##
## Call:
## glm(formula = death ~ temp + lag(temp, 1) + lag(temp, 2) + lag(temp,
##     3) + lag(temp, 4) + lag(temp, 5), family = poisson(), data = chicagoNMMAPS)
##
## Deviance Residuals:
##     Min       1Q   Median       3Q      Max
## -3.8876  -0.8192  -0.0514   0.7029  22.6409
##
## Coefficients:
##                Estimate Std. Error  z value Pr(>|z|)
## (Intercept)   4.8028333  0.0017758 2704.577  < 2e-16 ***
## temp          0.0019664  0.0003720    5.286 1.25e-07 ***
## lag(temp, 1) -0.0011023  0.0005198   -2.121    0.034 *
## lag(temp, 2) -0.0021813  0.0005301   -4.115 3.87e-05 ***
## lag(temp, 3) -0.0005632  0.0005295   -1.064    0.287
## lag(temp, 4) -0.0008187  0.0005193   -1.577    0.115
## lag(temp, 5) -0.0028462  0.0003720   -7.651 1.99e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for poisson family taken to be 1)
##
##     Null deviance: 9856.6  on 5108  degrees of freedom
## Residual deviance: 7768.2  on 5102  degrees of freedom
##   (5 observations deleted due to missingness)
## AIC: 41398
##
## Number of Fisher Scoring iterations: 4

偏移项

在很多情况下,保持恒定的并非计数变量(如示例中的死亡人口),而是比率变量。在上述示例中,死亡人口受到总人口或老年人口(如60岁以上人口)数量的影响:

泊松回归要求因变量必须为非负整数,比率变量显然不能满足这一条件。

利用对数的运算法则,有如下变形:

在上式中,log(pop)作为系数恒为1的解释变量,即偏移项。因此可以设置如下形式的模型:

model.4 <- glm(death ~ temp, offset = log(pop),family = poisson(),data = chicagoNMMAPS)
  • chicagoNMMAPS数据集中无pop变量,上式只作为演示,不能运行。

准泊松回归

泊松分布的均值和方差相等,均为:

## (Dispersion parameter for poisson family taken to be 1)

但很多情况下该条件并满足:

deviance(model.2)/df.residual(model.2)
## [1] 1.657238

这种情况可以使用准泊松分布族quasipoisson()

model.22 <- glm(death ~ temp, family = quasipoisson(),data = chicagoNMMAPS)summary(model.22)

结果对比:

coef(summary(model.2))
##                 Estimate   Std. Error   z value      Pr(>|z|)
## (Intercept)  4.792769652 0.0017346450 2762.9687  0.000000e+00
## temp        -0.004490284 0.0001196991  -37.5131 5.633927e-308coef(summary(model.22))
##                 Estimate   Std. Error    t value      Pr(>|t|)
## (Intercept)  4.792769652 0.0023079821 2076.60605  0.000000e+00
## temp        -0.004490284 0.0001592622  -28.19428 1.102289e-162
  • 泊松回归和准泊松回归的系数估计值是一样的,但后者的标准误(Std. Error)较大。

相关阅读:

  1. stats | 概率分布与随机数生成(一)——离散型分布

  2. stats | 线性回归(一)——模型表达式和输出结果

  3. stats | 广义线性模型(一)——广义线性模型的基本结构及与线性模型的比较


往期推荐阅读:

  • 《数据处理通识》专辑-base | 使用apply族函数进行向量化运算

  • 《制表与可视化》专辑-ggplot2 | ggplot2作图语法入门

  • 《数学模型》专辑-car | 线性回归(三)——残差分析和异常点检验

  • 《地理计算与分析》专辑-spdep | 如何在R语言中计算空间自相关指数

stats | 广义线性模型(二)——泊松回归相关推荐

  1. Python使用sklearn构建广义线性模型:泊松回归(Poisson regression)实战

    Python使用sklearn构建广义线性模型:泊松回归(Poisson regression)实战 目录 Python使用sklearn构建广义线性模型:泊松回归(Poisson regressio ...

  2. Python使用sklearn构建广义线性模型:gamma回归(Gamma regression)实战

    Python使用sklearn构建广义线性模型:gamma回归(Gamma regression)实战 目录 Python使用sklearn构建广义线性模型:gamma回归(Gamma regress ...

  3. Python使用sklearn构建广义线性模型:Tweedie回归(Tweedie regression)实战

    Python使用sklearn构建广义线性模型:Tweedie回归(Tweedie regression)实战 目录 Python使用sklearn构建广义线性模型:Tweedie回归(Tweedie ...

  4. 广义线性模型(逻辑回归、泊松回归)

    线性回归模型也并不适用于所有情况,有些结果可能包含而元数据(比如正面与反面)或者计数数据,广义线性模型可用于解释这类数据,使用的仍然是自变量的线性组合. 目录 逻辑回归 使用statsmodels 使 ...

  5. stats | 广义线性模型(三)——二元Logistic模型和Probit模型

    本篇再介绍一种常见的广义线性模型:Logistic模型.该模型主要针对分类结果进行建模.与之功能类似的另一个模型是Probit模型,但较少应用. Logistic模型的形式 两点分布,又称伯努利分布, ...

  6. 对数线性模型之一(逻辑回归), 广义线性模型学习总结

    经典线性模型自变量的线性预测就是因变量的估计值. 广义线性模型:自变量的线性预测的函数是因变量的估计值.常见的广义线性模型有:probit模型.poisson模型.对数线性模型等等.对数线性模型里有: ...

  7. UA MATH571A 多元线性回归IV 广义线性模型

    UA MATH571A 多元线性回归IV 广义线性模型 广义线性模型 二值被解释变量 Probit模型 Logit模型 系数的最大似然估计 系数的推断 Wald检验 似然比检验 二项回归 拟合优度检验 ...

  8. 大数据分析R中泊松回归模型实例

    如果您知道如何以及何时使用泊松回归,它可能是一个非常有用的工具.在大数据分析R中泊松回归模型实例中,我们将深入研究泊松回归,它是什么以及R程序员如何在现实世界中使用它. 具体来说,我们将介绍: 1)泊 ...

  9. 调整泊松回归中的过度分散

    广义线性模型(Generalized Linear Models) The Poisson regression model naturally arises when we want to mode ...

最新文章

  1. 【综述】介绍这些常用机器学习算法的优缺点
  2. 深圳大学面向全球引进高精尖缺人才!
  3. [原]如何做一份精致的性能测试报告?
  4. QML笔记-QML中SpriteSequence及Sprite的基本使用
  5. h5跳转小程序_微信小程序吞掉H5?
  6. [leetcode] Median of Two Sorted Arrays 寻找两个有序数组的中位数
  7. Sqlyog的安装与使用
  8. 前端的c语言面试题,腾讯WEB前端笔试题和面试题答案
  9. 统计二叉树的叶子结点个数(C语言数据结构)
  10. matlab中的插值函数
  11. bootstrap3.x popover报错Cannot read property 'off' of null
  12. wps折线图如何画多条折线_如何用wps制作折线图
  13. 时间戳转换格林威治时间
  14. 创业的路,每一天都是劫后余生,怎么走?
  15. 磁盘盘符隐藏并访问隐藏磁盘的文件数据
  16. 一图读懂DV、OV、EV三种SSL证书之间的区别
  17. 面试时想拿 13K,HR 说你只值 8K,该怎么回答?
  18. 利用 Universal Transformer,翻译将无往不利!
  19. [从零开始学习FPGA编程-7]:快速入门篇 - 总体 - FPGA产品开发简化流程、关键步骤解读
  20. 修改d2-admin

热门文章

  1. qpushbutton 添加本地文件图标_1.PyQt5实现多文件调用以及UI和逻辑分离
  2. 万测试验机软件,万测TestStar®新秀®100kN微机控制电子万能试验机
  3. (一)java版spring cloud+spring boot+redis多租户社交电子商务平台-简介
  4. 联合国儿童基金会投资六家区块链初创企业,目标是解决“全球性挑战”
  5. 通过样式调整input 中password text默认长度
  6. java 父类 new 子类
  7. 关于虚拟化 云计算
  8. “变态级”系统管理员笔试题 我的答卷
  9. cratedb导入json文件
  10. 洛谷 p1197 [JSOI2008]星球大战(并查集)