广义线性回归是一类常用的统计模型,在各个领域都有着广泛的应用。今天我会以逻辑回归和泊松回归为例,讲解如何在R语言中建立广义线性模型。

在R语言中我们通常使用glm()函数来构建广义线性模型,glm实际上是generalized linear model(广义线性模型)的首字母缩写,它的具体形式如下所示:

glm(formula, family=familytype(link=linkfunction), data=)
# formula就是我们的模型形式,family是我们指定的具体回归类型(见下表)

你可以通过 help(glm)来查看其它的模型选项, 使用 help(family)来查看每一族的连接函数。在这里我主要和大家讲解一下逻辑(logistic)回归和泊松(poisson)回归这两个模型。

第一部分 逻辑回归

逻辑回归主要应用于因变量(y)是二分类变量而自变量(x)是连续型变量的情形,当然这里的自变量和因变量也可以都是分类变量。由于逻辑回归本身的假设条件并没有那么严格,因此它的应用范围比判别分析要更广。关于判别分析的知识,我会在后续内容中和大家详细介绍。

这里我们使用鸢尾花(iris)数据集,将setosa这一类去掉后鸢尾花的种类(Species)就是一个二分类变量,将virginica设置为0,versicolor设置为1,使用花瓣和花萼数据来预测鸢尾花的种类。

# 逻辑回归
mydata <- iris[which(iris$Species!= "setosa"),] # 去除setosa这类
mydata$type[which(mydata$Species== "virginica")] <- 0 # virginica编号为0
mydata$type[which(mydata$Species== "versicolor")] <- 1 # versicolor编号为1
attach(mydata) # 固定数据集
fit <-glm(type~Sepal.Length+Sepal.Width+Petal.Length+Petal.Width,data=mydata,family=binomial())# 指定分布为二项分布
summary(fit) # 输出拟合结果
confint(fit) # 输出95%置信区间
exp(coef(fit)) # 取拟合系数的自然指数
exp(confint(fit)) # 取95%置信区间的自然指数
predict(fit, type="response") # 输出拟合值
residuals(fit, type="deviance") # 输出残差

从输出结果来看,花瓣长度是可以较好区分这两类鸢尾花的,但是这个模型是原始和粗糙的,我们应该通过回归诊断的方式来修正此模型,使之更加精确,关于回归诊断请参见R语言入门之线性回归,这里就不赘述。

当然我们也可以用anova(fit1,fit2,test="Chisq")来比较模型的优劣,这个在入门阶段也已经介绍过了,不明白的可以参考往期内容方差分析(ANOVA)。

第二部分 泊松回归

泊松回归主要用于因变量(y)是计数资料而自变量(x)是连续型变量的时候,当然自变量(x)也可以是分类变量。

这里我先和大家介绍一下数据的信息,这个数据主要包括三部分信息:treatment代表对患者采取的治疗措施,分成1、2、3三类,1代表被认可的有效药,2代表新药A,3是指新药B;outcome是指患者治疗之后的结局,同样可分成1、2、3三类,1代表病情好转,2代表病情迁延不愈(没恶化),3代表病情恶化;counts是指采取不同治疗措施的不同结局的患者个数,是一个计数资料。注意这里不使用安慰剂作为空白对照的原因主要是考虑到伦理学问题,原则上要使患者利益最大化。

# 泊松回归
# counts是计数值
# outcome是指患者治疗后可能的结局
# treatment是指对患者采取的治疗措施
counts <- c(18,17,15,20,10,20,25,13,12) # 生成计数值
outcome <- gl(3,1,9) # 生成结局
treatment <- gl(3,3) # 生成治疗方案
print(d.AD <- data.frame(treatment, outcome, counts))
glm.D93 <- glm(counts ~outcome + treatment, family = poisson()) # 指定泊松回归模型
summary(glm.D93)  # 输出回归结果

这里我们主要看一下相关系数(coefficients),只有outcome2的p值显著并且其效应量值(estimate)是负值,由此可见这三种药之间的效果可能差异不大,并且都能使患者受益。那么只能说这两个新药和现行药的疗效差不多,并不是新药的效果更好。

当然,如果拟合模型的残差比自由度大很多,这个时候最好使用quasipossion()。

关于广义线性回归模型的应用就先分享到这里,希望大家持续关注【生信与临床】!

r语言 回归分析 分类变量_R语言进阶之广义线性回归相关推荐

  1. r语言 回归分析 分类变量_R语言 | 回归分析(二)

    R语言 语言学与R语言的碰撞 Xu & Yang PhoneticSan 学习参考 Discovering Statistics Using R Statistics for Linguist ...

  2. r语言 回归分析 分类变量_R语言下的PSM分析分类变量处理与分析步骤

    最近学习了PSM,我选择了用R去跑PSM,在这过程中遇到了许多问题,最后也都一一解决了,写下这个也是希望大家在遇到相同问题的时候能够得到帮助和启发,别的应该不会遇到太难的问题了哈哈.最近我也没做什么, ...

  3. r语言 分类变量 虚拟变量_R语言中的变量

    r语言 分类变量 虚拟变量 R语言| 变数 (R Language | Variables) In the previous tutorial, we have come across the bas ...

  4. r语言各形状编号_R语言入门第八讲:编码分类变量(factor)

    今天第八篇~~~~~~ 在第一讲中我给大家介绍了read.table函数的使用.最近我在处理一个一百万左右的数据,发现read.table函数出了问题.我不知道是在excel转成txt时出的问题还是因 ...

  5. r k-means 分类结果_R语言信用评分卡:数据分箱(binning)

    作者:黄天元,复旦大学博士在读,热爱数据科学与R,热衷推广R在工业界与学术界的应用.邮箱:huang.tian-yuan@qq.com.欢迎合作交流 library(knitr) opts_chunk ...

  6. r语言清除变量_R语言(1)初识与数据结构

    点击上方蓝字,记得关注我们! a picture is worth a thousand words! 一,R语言简介 1,R语言的发展 上世纪90年代初,新西兰奥克兰大学 Ross Ihaka 和 ...

  7. R语言绘制分类变量柱状图

    背景 Excel中无法实现分组区分颜色. 右边的图是我手动点击各个柱形修改分组颜色的. 请问如何在R和Excel中分别实现右图? 更新后完整解决方案: # 数据载入 ----------------- ...

  8. r语言 面板数据回归_R语言_018回归

    回归分析是统计学的核心.它其实是一个广义的概念,指那些用一个或多个预测变量来预测响应变量的方法.通常,回归分析可以用来挑选与响应变量相关的解释变量,可以描述两者的关系,也可以生成一个等式,通过解释变量 ...

  9. R循环有两个_R语言数据分析与挖掘(第九章):聚类分析(2)——层次聚类

    层次聚类(hierarchical clustering)基于簇间的相似度在不同层次上分析数据,从而形成树形的聚类结构,层次聚类一般有两种划分策略:自底向上的聚合(agglomerative)策略和自 ...

最新文章

  1. 想自学Python却不知该如何入门?这篇文章带你轻松入门Python
  2. Doxygen简单经验谈。。。
  3. 让你的AIR程序脱离AIR环境运行
  4. 监控服务器项目报备,智慧环保监控预警平台运维项目
  5. 创建 linuxrc 文件
  6. saltstack之keepalived的安装配置
  7. 零基础:邪恶带你3步快速掌握iSCSI搭建
  8. Linux系统中增加Swap分区大小
  9. python编辑器中文字体倒立的_如何用Python+人工识别处理知乎的倒立汉字验证码...
  10. HDFS异常:last block does not have enough number of replicas
  11. 数据质量低该如何解决
  12. 【android】AIDL传递自定义类型参数
  13. jlink v9可升级固件‘_在rt-thread下实现OTA在线固件更新功能
  14. 一步步破解app协议第二步(审计代码)
  15. 浏览器请求web服务器的过程
  16. 跑跑卡丁车道具攻与防
  17. Nacos 中配置 Map 类型,不香
  18. Java8 - 使用 Comparator.comparing 进行排序
  19. 自然常数e(无理数)探究
  20. 二进制(二):十进制转二进制的两种方法

热门文章

  1. 如何将一个完整项目推到码云_怎么将本地项目放到码云(gitee)上面?图文详解
  2. python如何连接sql server数据库_Python连接SQLServer数据库
  3. 对计算机网络教程的计划,计算机网络技术与应教程教学计划14.doc
  4. 服务器网络销售软文,关于云服务器的软文
  5. 内衬纸缺陷在线检测系统
  6. aver函数C语言怎么用,C语言函数使用
  7. RAC11g使用数据泵导入导出报ORA-6512,ORA-25306,ORA-39079错
  8. Open Xml Sdk创建目录
  9. windows 2008 R2 如何更新SID
  10. Fluent NHibernate实战(原创)