MASS | 广义线性模型(四)——负二项回归

本文介绍了负二步回归作为计数模型的一种,用于处理泊松回归中过度离散的问题。负二项回归在泊松回归的基础上增加了一个伽马分布的随机项,其方差大于数学期望。在R语言中,可通过`glm.nb`函数进行负二项回归分析,或者使用`negative.binomial`函数配合指定参数进行建模。文中通过实例展示了如何在R中运用这两个函数进行模型拟合。
摘要由CSDN通过智能技术生成

本篇是“广义线性模型”系列推文的最后一篇,来介绍另外一种重要的广义线性模型:负二项回归。

同泊松回归一样,负二项回归也是计数模型。由于泊松回归的内在要求是因变量的数学期望和方差相等,而当数据序列出现“过度离散”(方差比理论值大)时,可有两种方式进行模型修正:

  • 使用准泊松分布族;

  • 改用负二项回归。

前者已经介绍过了,本篇来介绍后者——负二项回归。

模型形式

负二项回归的模型形式与泊松回归十分相似。

泊松回归:

负二项回归:

泊松分布与负二项分布有着内在的联系。当泊松分布的参数 不再是一个确定的数值,而是服从伽马分布进行变化时,此时的分布形式称为伽马-泊松混合分布,负二项分布是伽马-泊松混合分布的特例。

《Modern Applied Statistics with S-PLUS》[1]上有关于负二项分布与泊松分布关系的描述:

负二项分布的方差恒大于数学期望,并受参数 的影响。从模型形式上看,负二项回归比泊松回归多了一个随机项

  • 为伽马分布的记号。

负二项分布

泊松分布的概率函数如下:

伽马分布 的概率密度函数如下:

为形状参数, 为逆尺度参数。数学期望 ,方差

伽马-泊松混合分布的概率密度函数如下:

负二项分布的概率函数如下:

对比伽马-泊松混合分布和负二项分布的概率(密度)函数,令 ,则二者相等。

负二项分布的意义:随机事件刚好第 次发生(不发生)时所经历的不发生(发生)的次数。

模型的R代码

负二项回归虽然属于广义线性模型,但在stats工具包中并没有定义负二项分布族函数。

MASS工具包的glm.nb函数可以进行负二项回归,并自动确定 参数的取值。

glm.nb(formula, data, weights,
       subset, na.action,
       start = NULL, etastart, mustart,
       control = glm.control(...),
       method = "glm.fit",
       model = TRUE, x = FALSE, y = TRUE,
       contrasts = NULL, ...,
       init.theta, link = log)
  • MASS工具包的名称即上面提到的《Modern Applied Statistics with S-PLUS》的首字母缩写;

  • glm.nb函数专门用于负二项回归,因此无需family参数。

library(MASS)
model.nb <- glm.nb(Days ~ Eth + Sex + Age+ Lrn,
                   data = quine)

summary(model.nb)
## 
## Call:
## glm.nb(formula = Days ~ Eth + Sex + Age + Lrn, data = quine, 
##     init.theta = 1.274892646, link = log)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -2.7918  -0.8892  -0.2778   0.3797   2.1949  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept)  2.89458    0.22842  12.672  < 2e-16 ***
## EthN        -0.56937    0.15333  -3.713 0.000205 ***
## SexM         0.08232    0.15992   0.515 0.606710    
## AgeF1       -0.44843    0.23975  -1.870 0.061425 .  
## AgeF2        0.08808    0.23619   0.373 0.709211    
## AgeF3        0.35690    0.24832   1.437 0.150651    
## LrnSL        0.29211    0.18647   1.566 0.117236    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for Negative Binomial(1.2749) family taken to be 1)
## 
##     Null deviance: 195.29  on 145  degrees of freedom
## Residual deviance: 167.95  on 139  degrees of freedom
## AIC: 1109.2
## 
## Number of Fisher Scoring iterations: 1
## 
## 
##               Theta:  1.275 
##           Std. Err.:  0.161 
## 
##  2 x log-likelihood:  -1093.151

MASS工具包还定义可以在glm函数中使用的负二项分布族函数negative.binomial

negative.binomial(theta = stop("'theta' must be specified"),
                  link = "log")

使用negative.binomial函数时需指定 参数。根据《Modern Applied Statistics with S-PLUS》中的方法,可以使用MASS工具包中的logtrans函数大致确定 的取值:

logtrans(Days ~ Eth + Sex + Age+ Lrn,
         data = quine)

根据上图, 的最佳取值约等于2。

model.nb2 <- glm(Days ~ Eth + Sex + Age+ Lrn,
                 family = negative.binomial(2),
                  data = quine)

summary(model.nb2)
## 
## Call:
## glm(formula = Days ~ Eth + Sex + Age + Lrn, family = negative.binomial(2), 
##     data = quine)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -3.2421  -1.0864  -0.3369   0.4767   2.7006  
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  2.88658    0.22715  12.708  < 2e-16 ***
## EthN        -0.56765    0.15245  -3.724 0.000285 ***
## SexM         0.08699    0.15903   0.547 0.585268    
## AgeF1       -0.44501    0.23909  -1.861 0.064820 .  
## AgeF2        0.09283    0.23451   0.396 0.692819    
## AgeF3        0.35938    0.24659   1.457 0.147260    
## LrnSL        0.29671    0.18594   1.596 0.112812    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for Negative Binomial(2) family taken to be 1.483669)
## 
##     Null deviance: 280.18  on 145  degrees of freedom
## Residual deviance: 239.11  on 139  degrees of freedom
## AIC: 1120.5
## 
## Number of Fisher Scoring iterations: 7

相关阅读:

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

  2. stats | 广义线性模型(二)——泊松回归

参考资料

[1]

Venables, W. N. and Ripley, B. D. (1999) Modern Applied Statistics with S-PLUS. Third Edition. Springer .

  • 13
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,您想问关于python预测糖尿病的问题。在Python中,我们可以使用线性回归模型来预测糖尿病。下面是一个简单的例子,演示如何使用线性回归模型来预测糖尿病。 首先,我们需要导入必要的库,如下所示: ```python import pandas as pd from sklearn import linear_model from sklearn.model_selection import train_test_split ``` 接下来,我们可以使用Pandas库来读取糖尿病数据集,并将其转换为数据框。数据集可以从UCI机器学习库中获取。 ```python # 读取数据集 diabetes = pd.read_csv('https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv', header=None) # 将列名添加到数据框 diabetes.columns = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class'] ``` 然后,我们可以将数据集分为训练集和测试集,以便评估模型的性能。 ```python # 将数据集分为训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(diabetes.drop('class', axis=1), diabetes['class'], test_size=0.2) ``` 接下来,我们可以定义一个线性回归模型,并将训练数据拟合到模型中。 ```python # 定义线性回归模型 model = linear_model.LinearRegression() # 将训练数据拟合到模型中 model.fit(X_train, y_train) ``` 最后,我们可以使用测试数据来评估模型的性能,并计算模型的准确性。 ```python # 使用测试数据来评估模型的性能 accuracy = model.score(X_test, y_test) print("模型准确性为 {:.2f}%".format(accuracy * 100)) ``` 以上就是使用线性回归模型预测糖尿病的简单示例。当然,还有其他更复杂的模型和方法可以用来预测糖尿病,如支持向量机、决策树等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值