广义线性模型

理论部分取自《R语言实战》:

当因变量结果为计数型变量(非负有限值)、二值变量或多分类变量时进行适用广义线性模型。
标准线性模型中假设y符合正态分布,而广义线性模型使用连接函数,将Y为正态分布的假设改为了Y服从指数概率分布族(family)的一种分布。

R中使用glm函数基本形式为:

glm(fomula,data=,family = family(link=function))#不同分布族具有不同link

glm主要流行的拟合模型为logistic回归和泊松回归
标准线性模型是glm当连接函数为“identity”时的特殊情况,

glm(Y~X1+X2+X3,family = gaussian(link = "identity"),data = mydata)
lm(Y~X1+X2+X3,data = mydata)

两行代码结果相同

(一)泊松回归:

1.模型使用
当用连续型变量或分类型变量来预测计数型结果变量时使用泊松回归,
对计数数据进行建模使用possion分布dpois(x=  , lambda=  )。
泊松回归默认Y服从泊松分布,将Y计数数据或二项数据进行取对数后呈生态分布。

#使用医疗数据包进行举例
install.packages("robust")
library(robust)
data(breslow.dat)
attach(breslow.dat)#简化数据集列名写法
A<- glm(sumY~Base+Trt+Age, data = breslow.dat, family = poisson(link = "log") )#(link = "log")为默认链接函数,
#当然family还可以为family=binomial\gaussian\gamma\inverse.quassian\poisson\quasi\quasibinomial\quasipoisson)
#连接函数依次为Logitech\identity\inverse\1/mu^2\log\"indentity",varance = "constant"\logi\log
summary(A)#查看模型
coef(A)#截距和系数
#泊松模型中的指数化参数对响应变量的影响是成倍增加的,而不是线性相加。
#将对数化的变量取指数则可得出每增加单位自变量因变量结果变化的实际值。
#exp为取指数
exp(coef(A))

2.模型过度离势评价
    需要对模型进行过度离势评价,比较模型的残差和自由度比值是否接近1,越接近越好。
解释:泊松回归的方差和均值是相等的,当响应变量观测的方差比依据泊松回归预测的方差大时,
泊松回归可能发生过度离势,对结果的解释度造成负面影响。发生过度离势的原因可能是遗漏了某个重要的预测变量等。若发生过度离势,则获得的标准误和置信区间都会极小,且显著性检验结果过于宽松,导致发现了错误的存在效应。

#qcc包提供了一个对泊松模型过度离势的检验方法:
install.packages("qcc")
library(qcc)
qcc.overdispersion.test(breslow.dat$sumY,type = "poisson")#P小于0.05,存在过度离势
#通过将第一次family=poisson改为第二次family=quasipoisson,再次拟合
A<- glm(sumY~Base+Trt+Age, data = breslow.dat, family = poisson())
A2<- glm(sumY~Base+Trt+Age, data = breslow.dat, family = quasipoisson())
summary(A2)#结果显示TRT和Age的P值不再显著,则表明年龄和药物作用并不能影响癫痫病的发病次数。

3.其他情况
#当数据记录时间段长度不同时,在模型中加入offset=log(time),对显示结果在不同时间段的比例进行调整。
#当数据集0计数的数据十分多时(结构零值),适用零膨胀的泊松回归,适用pscl包中的zeroinfl()函数。
#当存在离群点和强影响时,还可以适用glm模型中的glmRob()函数拟合稳健广义线性模型。

(二)logist回归
1.模型使用;

当预测二值型结果变量时使用logist回归。一单位预测变量的变化可能引起响应变量优势比的变化,因此将回归系数通常进行指数化,如exp(coef(模型)),还可以将回归系数的置信区间进行指数化,如exp(confit(模型))

#下面使用婚恋数据进行举例
install.packages("AER")
library("AER")
data(Affairs)
table(Affairs$affairs)
table(Affairs$gender)
prop.table(table(Affairs$gender))#对计数结果比例进行计算
Affairs$ynaffair[Affairs$affairs>0] <- 1
Affairs$ynaffair[Affairs$affairs==0] <- 0#对出轨是或者否进行分类赋值,将affairs转化为二值型因子ynaffair
Affairs$ynaffair
#该二值型因子可作为logistic回归的结果变量
FIT <- factor(Affairs$ynaffair,levels= c(0,1), labels = c("NO","YES"))#转化为二分型变量attach(Affairs)
fit <- glm(ynaffair~gender+age+yearsmarried+children+religiousness+education+occupation+rating,data = Affairs, family = binomial())#默认连接函数为“link=logist”,假设Y概率分布为二项分布summary(fit)#响应变量是Y的对数优势比。如当婚龄增加一岁,婚外情优势比乘以系数,增加两岁乘两次系数
#选取显著变量重新拟合
fit2 <- glm(ynaffair~age+yearsmarried+religiousness+rating,data = Affairs, family = binomial())
summary(fit2)
#对两模型P值进行比较,对于广义线性回归一般使用卡方检验,结果为两个模型不具有显著差异P>0.05
anova(fit,fit2,test = "Chisq")
AIC(fit,fit2)
exp(coef(fit))

2.同样需要对模型拟合进行诊断

过度离散的比较:当响应变量方差大于期望的二项分布的方差时,过度离散会导致奇异的标准误差检验和不精确的显著性检验,当出现过度离散时,使用glm函数进行拟合回归,但此时需要将二项分布改成类二项分布。过度离散的一种判别方法是计算二项分布模型残差偏差/残差自由度。若接近1则表明没有过度离势如第一次family=binomial,第二次family=quasibinomial,则为logistic回归对过度离势的处理方式。

fit <- glm(ynaffair~age+yearsmarried+religiousness+rating,data = Affairs, family = binomial())
fitbijiao <- glm(ynaffair~age+yearsmarried+religiousness+rating,data = Affairs, family = quasibinomial())
pchisq(summary(fitbijiao)$dispersion*fit$df.residual,fit$df.residual,lower=F)

3.其他情况

#稳健的logistics回归,函数和泊松回归一样。
#当包含两个以上的无顺序类别变量时,如离婚/独居/寡居,适用mlogit包中的mlogit()函数拟合模型。
#当包含两个以上的有顺序类别变量时,如差/良/好,适用rms包中的lrm函数拟合logistic回归。

(三)函数的连用技巧

summary()展示函数细节
coef(fit)#截距项和斜率
confint()#模型参数95%置信区间
residuals()#模型残差值
anova()#生成两个拟合模型的方差分析表
plot(fit)#评价拟合模型的诊断图
predict()#用拟合模型对数据集进行预测、

《R语言实战》:广义线性模型R实现相关推荐

  1. R语言为广义线性模型绘制列线图(nomogram)实战

    R语言为广义线性模型绘制列线图(nomogram)实战 我们来看图说话: gist是一种胃肠道间质瘤,作者构建了无复发生存率的logistic回归模型. 并构建了如下的列线图或者nomogram 现在 ...

  2. R语言实战-第八章 R in action-chapter8

    #第八章 回归 #简单线性回归 #用到基础包中的women数据集,研究身高与体重的关系 head(women) fit <- lm(weight~height,data=women) summa ...

  3. R语言实战应用-基于R语言的对应分析

    一.基本概念和原理 对应分析(Correspondence Analysis)是在因子分析的基础上发展起来的,对应分析是多变量统计分析中有用的分析方法.对应分析把R型和Q型因子统一起来,通过R型因子分 ...

  4. R语言实战-第九章 R in action-chapter9

    #第九章方差分析 #需要的packages:car gplots HH rrcov multicomp effects MASS mvotlier #单因素方差分析 #数据集来源multcomp包的c ...

  5. R语言构建广义相加模型(GAM:Generalized Additive Model)实战

    R语言构建广义相加模型(GAM:Generalized Additive Model)实战 目录 R语言构建广义相加模型(GAM:Generalized Additive Model)实战

  6. R语言实战笔记--第十五章 处理缺失数据

    R语言实战笔记–第十五章 处理缺失数据 标签(空格分隔): R语言 处理缺失数据 VIM mice 缺失值(NA),是导致我们计算错误的一大来源,处理缺失数据在实际的应用中有着较为重要的作用. 基本方 ...

  7. R 语言实战-Part 4 笔记

    R 语言实战(第二版) ## part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服 ...

  8. R语言实战笔记--第八章 OLS回归分析

    R语言实战笔记–第八章 OLS回归分析 标签(空格分隔): R语言 回归分析 首先,是之前的文章,数理统计里面的简单回归分析,这里简单回顾一下: 简单回归分析的原理:最小二乘法,即使回归函数与实际值之 ...

  9. R语言实战(七)图形进阶

    本文对应<R语言实战>第11章:中级绘图:第16章:高级图形进阶 基础图形一章,侧重展示单类别型或连续型变量的分布情况:中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关 ...

最新文章

  1. 一个MIT计算机博士对数学的思考
  2. 趣味c语言编程100例(一)
  3. linux 编译src.rpm,CentOS6.5下编译src.rpm包的内核
  4. @scheduled 每30s 执行一次_荣耀30S正式发布:麒麟820 5G SoC/6400万像素AI四摄/40W超级快充...
  5. opencv批量灰度转换_OpenCV图像处理之常见的图像灰度变换
  6. 59. web 攻击技术(3)
  7. 条款40:慎重的选择多重继承
  8. Atitit 数据库结果集映射 ResultSetHandler 目录 1. 常见的四种配置ResultSetHandler 1 2. Dbutil 1 3. Mybatis 致敬 3 4. H
  9. 【MATLAB】三角函数
  10. urule决策引擎实现增量打包部署
  11. 编码应该运筹帷幄之中,决胜千里之外
  12. CodeCademy | Python | 6. Pyglatin
  13. resultful 风格
  14. 编辑器之神——vim编辑器
  15. 【CSS】尺寸和边框、盒子模型、外边距_02
  16. 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组
  17. 神了!有人用一个项目把23种设计模式与六大原则融会贯通了
  18. 微信视频号怎么运营?实操分享我的30个经验
  19. 计算机技术水平考核试卷带答案,中小学教师计算机技术水平考核试卷笔试题带答案...
  20. 如何防止uniswap/pancakeswap被机器人夹

热门文章

  1. 计算机的存储规则【小白进】
  2. Java初学者常见五大问题 ,解决你的心结!
  3. 泡泡机器人视频连接讲解-很好
  4. mui框架android,mui框架安卓离线打包高级应用
  5. 使用php写输出hello的代码,如何使用php输出hello world?-PHP问题
  6. Linux--md5sum的使用
  7. js常见弹窗以及简单使用
  8. 牛客OI周赛7-提高组 B小睿睿的询问(ST打表)
  9. 互联网最新灰产项目“视频号霸屏”
  10. CC And MC Introduce