R语言实战(八)广义线性模型
本文对应《R语言实战》第13章:广义线性模型
广义线性模型扩展了线性模型的框架,包含了非正态因变量的分析。
两种流行模型:Logistic回归(因变量为类别型)和泊松回归(因变量为计数型)
glm()函数的参数
分布族 |
默认的连接函数 |
binomial |
(link = “logit”) |
gaussian |
(link = “identity”) |
gamma |
(link = “inverse”) |
inverse.gaussian |
(link = “1/mu^2”) |
poisson |
(link = “log”) |
quasi |
(link = “identity”, variance = “constant”) |
quasibinomial |
(link = “logit”) |
quasipoisson |
(link = “log”) |
连用的函数
函数 |
描述 |
summary() |
展示拟合模型的细节 |
coefficients(), coef() |
列出拟合模型的参数(截距项和斜率) |
confint() |
给出模型参数的置信区间(默认为95%) |
residuals() |
列出拟合模型的残差值 |
anova() |
生成两个拟合模型的方差分析表 |
plot() |
生成评价拟合模型的诊断图 |
predict() |
用拟合模型对新数据集进行预测 |
模型拟合和回归诊断:
#诊断图(以下model都是glm拟合的模型)
plot(predict(model, type = “response”), residuals(model, type = “deviance”)) #帽子值(hat value),学生化残差,Cook距离统计量近似值
plot(hatvalues(model))
plot(rstudent(model))
plot(cooks.distance(model)) #综合性诊断图
library(car)
influencePlot(model)
当响应变量有许多时,诊断图非常有用;而当响应变量只有有限个值时(比如Logistic回归),诊断图的功效就会降低很多。
Logistic回归
一般过程:
首先将所有变量作为预测变量拟合模型,通过回归系数的显著性,筛选对方程贡献显著的变量,再次拟合模型。使用anova()函数对两个嵌套模型的拟合优度进行检验,广义线性回归时,可采用卡方检验,在卡方值不显著的时候,表示少变量的模型与多变量的模型拟合效果没有差异。(具体例子详见书上285-288页)
解释模型参数:
Logistic回归中,响应变量是Y=1的对数优势比(log)。回归系数含义是当其他预测变量不变时,一单位预测变量的变化可引起的响应变量对数优势比的变化。由于对数优势比解释性差,所以常将结果进行指数化后进行解释,也可以使用confint()函数获取系数的置信区间。
exp(confint(fit.reduced))
评价预测变量对结果概率的影响:
由于使用概率的方式思考比使用优势比更直观,所以可以先创建一个包含感兴趣预测变量值的虚拟数据集,然后对这个数据集使用predict()函数,以预测这些值的结果概率。(具体例子详见书289-290页)
过度离势:
抽样于二项分布的期望方差是,n为观测数,pie为属于Y=1组的概率。
所谓过度离势,即观测到的响应变量的方差大于期望的二项分布的方差。过度离势会导致奇异的标准误检验和不精确的显著性检验。
当出现过度离势时,仍可使用glm()函数拟合Logistic回归,但此时需要将二项分布改为类二项分布(quasibinomial distribution)。
检测过度离势的一种方法是比较二项分布模型的残差偏差与残差自由度,如果比值:
比1大很多,便可认为存在过度离势。
具体检验方式:拟合两次模型,第一次使用family = “binomial”, 第二次使用family = “quasibinomial”, 记第一次返回的对象为fit,第二次返回的对象为fit.od,
pchsq(summary(fit.od)$dispersion * fit$df.residual, fit$df.residual, lower = F)
提供的p值即可对零假设H0:Φ=1 与备择假设 H1:Φ≠1进行检验,若p很小就可以拒绝H0.
Logistic回归的扩展:
稳健Logistic回归:robust包中的glmRob()函数,解决离群点和强影响点的问题
多项分布回归:mlogit包中的mlogit()函数,应用于响应变量包含两个以上的无序类别
序数Logistic回归:rms包中的lrm()函数,应用于响应变量是一组有序类别
泊松回归:
适用范围:通过一系列连续型和类别型预测变量来预测计数型结果变量。
分析过程与模型参数的解释与Logistic回归类似。
过度离势:
泊松分布的方差和均值相等。当响应变量观测的方差观测的方差比依据泊松分布预测的方差大时,泊松回归可能发生过度离势。处理计数型数据时经常发生过度离势,因此需要格外注意。
可能的原因:
- 遗漏了某个重要的预测变量;
- 可能因为时间相关;
- 在纵向数据分析中,重复测量的数据由于内在群聚特性可导致过度离势。
如果存在过度离势,在模型中将无法进行解释,可能会得到很小的标准误和置信区间,并且显著性检验也过于宽松(也就是说,将会发现并不真是存在的效应)。
与Logistic回归类似,如果残差偏差与残差自由度的比例远远大于1,表明存在过度离势。
检验方法:qcc包
library(qcc)
qcc.overdispersion.test(breslow.dat$sumY, type = “poisson”)
p值显著(小于0.05)表明存在过度离势。
与Logistic回归的过度离势处理类似,通过用family = “quasipoisson”替换family = “poisson”改进。需要注意的是,使用类泊松(quasi-Poisson)方法所得的参数估计与泊松方法相同,但标准误变大了许多。
泊松回归的扩展:
- 时间段变化的泊松回归:
对于泊松回归的讨论,是将响应变量局限在一个固定长度时间段中进行测量,整个观测集中时间长度都是不变的。允许时间段变化时,假设结果变量是一个比率,也就是将
修改为:
或等价形式:
具体实现方式是,在glm()函数里增加offset参数,offset = log(time).
- 零膨胀的泊松回归:
在数据集中0计数的数目时常比用泊松模型预测的数目多,这些0值称为结构零值。此时使用零膨胀的泊松回归分析数据,将同时拟合两个模型,可以看做是Logistic回归和泊松回归的组合。pscl包中的zeroinfl()函数可做零膨胀泊松回归。
- 稳健泊松回归:
robust包中的glmRob()函数可以拟合稳健广义线性模型,包含稳健泊松回归。解决存在离群点和强影响点带来的问题。
R语言实战(八)广义线性模型的更多相关文章
- R语言实战(四)回归
本文对应<R语言实战>第8章:回归 回归是一个广义的概念,通指那些用一个或多个预测变量(也称自变量或解释变量)来预测响应变量(也称因变量.效标变量或结果变量)的方法.通常,回归分析可以用来 ...
- R语言实战(五)方差分析与功效分析
本文对应<R语言实战>第9章:方差分析:第10章:功效分析 ================================================================ ...
- R语言实战(六)重抽样与自助法
本文对应<R语言实战>第12章:重抽样与自助法 之前学习的基本统计分析.回归分析.方差分析,是假定观测数据抽样自正态分布或者其他性质较好的理论分布,进而进行的假设检验和总体参数的置信区间估 ...
- R 语言实战-Part 4 笔记
R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ...
- R 语言实战-Part 3 笔记
R 语言实战(第二版) part 3 中级方法 -------------第8章 回归------------------ #概念:用一个或多个自变量(预测变量)来预测因变量(响应变量)的方法 #最常 ...
- R语言实战(十)处理缺失数据的高级方法
本文对应<R语言实战>第15章:处理缺失数据的高级方法 本文仅在书的基础上进行简单阐述,更加详细的缺失数据问题研究将会单独写一篇文章. 处理缺失值的一般步骤: 识别缺失数据: 检查导致数据 ...
- R语言实战(九)主成分和因子分析
本文对应<R语言实战>第14章:主成分和因子分析 主成分分析(PCA)是一种数据降维技巧,它能将大量相关变量转化为一组很少的不相关变量,这些无关变量成为主成分. 探索性因子分析(EFA)是 ...
- R语言实战(七)图形进阶
本文对应<R语言实战>第11章:中级绘图:第16章:高级图形进阶 基础图形一章,侧重展示单类别型或连续型变量的分布情况:中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关 ...
- R入门<三>-R语言实战第4章基本数据管理摘要
入门书籍:R语言实战 进度:1-4章 摘要: 1)实用的包 forecast:用于做时间序列预测的,有auto.arima函数 RODBC:可以用来读取excel文件.但据说R对csv格式适应更加良好 ...
随机推荐
- swiper隐藏再显示出现点击不了情况
//初始化swiper var swiper = new Swiper('.swiper-container', { pagination: '.swiper-pagination', nextBut ...
- 【BZOJ】2006: [NOI2010]超级钢琴
[题意]给定长度为n的整数序列,求长度为[L,R]的前k大区间和的和.n,k<=500000. [算法]堆+贪心+RMQ [题解]考虑暴力是取所有长度为[L,R]的子串的前k大求和,复杂度O(n ...
- 富文本存储型XSS的模糊测试之道
富文本存储型XSS的模糊测试之道 凭借黑吧安全网漏洞报告平台的公开案例数据,我们足以管中窥豹,跨站脚本漏洞(Cross-site Script)仍是不少企业在业务安全风险排查和修复过程中需要对抗的“大 ...
- 通过BurpSuite和sqlmap配合对dvwa进行sql注入测试和用户名密码暴力破解
0x1 工具和环境介绍 dvwa:渗透测试环境 BurpSuite:强大的WEB安全测试工具 sqlmap:强大的sql注入工具 以上工具和环境都在kali linux上安装和配置. 0x2 步骤说明 ...
- 【连接查询】mySql多表连接查询与union与union all用法
1.准备两个表 表a: 结构: mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | T ...
- jenkins 入门教程(上)【转】
转自:https://www.cnblogs.com/yjmyzz/p/jenkins-tutorial-part-1.html jenkins是一个广泛用于持续构建的可视化web工具,持续构建说得更 ...
- Linux下内存泄漏工具
概述 内存泄漏(memory leak)指由于疏忽或错误造成程序未能释放已经不再使用的内存的情况,在大型的.复杂的应用程序中,内存泄漏是常见的问题.当以前分配的一片内存不再需要使用或无法访问时,但是却 ...
- Oracle 11G R2 RAC中的scan ip 的用途和基本原理【转】
Oracle 11G R2 RAC增加了scan ip功能,在11.2之前,client链接数据库的时候要用vip,假如你的cluster有4个节点,那么客户端的tnsnames.ora中就对应有四个 ...
- 【Android开发】之Fragment开发1
一直知道Fragment很强大,但是一直都没有去学习,现在有些空闲的时间,所以就去学习了一下Fragment的简单入门.我也会把自己的学习过程写下来,如果有什么不足的地方希望大牛指正,共同进步! 一. ...
- 30 C? Go? Cgo!
C? Go? Cgo! 17 March 2011 Introduction Cgo lets Go packages call C code. Given a Go source file writ ...