R实战|从文献入手谈谈logistic回归、Cox回归以及Lasso分析(一)

简介: R实战|从文献入手谈谈logistic回归、Cox回归以及Lasso分析(一)

reg

Logistic回归分析

Logistic回归 (Logistic regression)属于「概率型非线性回归」,是研究二分类 (可扩展到多分类)观察结果和一些影响因素之间关系的一种多变量分析方法。在流行病学研究中,经常需要分析疾病与各危险因素之间的关系,如食管癌的发生与吸烟、饮酒、不良饮食习惯等危险因素等关系,为了正确说明这种关系,需要排锤一些混杂因素等影响。如果用「线性回归分析」,由于因变量是一个二值变量(通常取之为1或0),不满足应用条件。

一个例子

作者首先用t检验和卡方检验筛选有差异的变量,之后进行多因素logistic回归分析。

木舟笔记永久VIP企划

「权益:」

  1. 「木舟笔记所有推文示例数据及代码(「在VIP群里」实时更新」)。
    data+code

R实现

多因素logistic回归
rm(list = ls())
data <- read.csv('data.csv')
head(data) 
summary(data)
# 将分类变量设置为factor,删除缺失值记录
## 因子化
VarsC<-c("sex","cp","fbs","restecg","exang","slope","ca","thal")#分类变量
for(i in VarsC){
  data[,i] <- as.factor(data[,i])
}#利用循环因子化
## 将hd(heart disease)中的数字(0~4)改成"Healthy" 和"Unhealthy"
data$hd <- ifelse(test=data$hd == 0, yes="Healthy", no="Unhealthy")
data$hd <- as.factor(data$hd) 
str(data)
# NA值处理:如果NA较少,可以直接删除;如果NA较多,需要进行缺失值处理
## 查看NA个数
table(is.na(data))
##展示含有NA的记录
data[!complete.cases(data),]
##去除含NA的样本
data <- na.omit(data)
#多因素logistic回归
## 构建Logistic模型
fitMul <- glm(formula = hd ~ ., data =data, family = 'binomial')
summary(fitMul) ##logistic回归结果
> head(ResultMul)
               Estimate Std. Error    z value     Pr(>|z|)           OR        2.5 %
(Intercept) -6.25397767 2.96039852 -2.1125459 0.0346396558  0.001922791 4.732245e-06
age         -0.02350753 0.02512158 -0.9357505 0.3494016427  0.976766619 9.290676e-01
sex1         1.67015202 0.55248644  3.0229738 0.0025030392  5.312975393 1.858511e+00
cp2          1.44839631 0.80913642  1.7900521 0.0734455437  4.256283277 8.875191e-01
cp3          0.39335276 0.70033787  0.5616614 0.5743467297  1.481941062 3.820686e-01
cp4          2.37328693 0.70909374  3.3469298 0.0008171191 10.732611757 2.823872e+00
                97.5 %
(Intercept)  0.5585898
age          1.0258173
sex1        16.4363241
cp2         21.7494748
cp3          6.0931562
cp4         46.5187371

可利用「逐步回归」筛选并剔除引起多重共线性的变量

逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除。以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止。以保证最后所得到的解释变量集是最优的。

依据上述思想,可利用逐步回归筛选并剔除引起多重共线性的变量,其具体步骤如下:先用被解释变量对每一个所考虑的解释变量做简单回归,然后以对被解释变量贡献最大的解释变量所对应的回归方程为基础,再逐步引入其余解释变量。经过逐步回归,使得最后保留在模型中的解释变量既是重要的,又没有严重多重共线性。

逐步回归存在的「争议」:可能得到一个好的模型,但是不能保证该模型是最佳模型,因为不是每一个可能的模型都被评价了。(可以使用自由子集回归的方法)

#逐步回归
logit.step <- step(fitMul,direction="both")
summary(logit.step)

#重新建立回归模型
fitstep <- glm(formula = hd ~ sex + cp + trestbps + thalach + exang + oldpeak + slope + ca + thal, family = "binomial", data = data)
fitSum<-summary(fitstep)
ResultMul<-c()#准备空向量,用来储存结果
ResultMul<-rbind(ResultMul,fitSum$coef)
OR<-exp(fitSum$coef[,'Estimate'])
ResultMul<-cbind(ResultMul,cbind(OR,exp(confint(fitstep))))
# 导出结果
write.csv(ResultMul,file="Mul_log.csv")

res

关于变量筛选

前文已经提到两种方法:「单因素分析」「逐步回归」

单因素分析可以用t检验,卡方检验,秩和检验,Logistic回归。

批量单因素Logistic回归
# 批量单因素logistic
## 准备进行分析的自变量
varsU<-names(data[,1:13])#自变量
Result<-c()
for (i in 1:length(varsU)){
  fit<-glm(substitute(hd~x,list(x=as.name(varsU[i]))),data=data,family=binomial())
  fitSum<-summary(fit)
  result1<-c()
  result1<-rbind(result1,fitSum$coef)
  OR<-exp(fitSum$coef[,'Estimate'])
  result1<-data.frame(cbind(result1,cbind(OR,exp(confint(fit)))))
  result1$Characteristics<-varsU[i]   #添加变量名
  Result<-rbind(Result,result1[-1,])#[-1,],删除常数项
}
## 为R语言logistic回归默认将分类变量的第一个factor设置为参照
Uni_log<-data.frame(Result[,c(1,4:8)]) #提取"P","OR","CIlower","CIupper"和变量名
colnames(Uni_log)[2:5]<-c("P","OR","CIlower","CIupper")#变量重命名
head(Uni_log)
ExtractVar<-unique(Uni_log$Characteristics[Uni_log$"P"<0.05])#提取有意义的变量
write.csv(Uni_log,file="Uni_log.csv")#输出文档

筛选后的变量可以用来做多因素回归分析(同上)。

除了上述几种变量筛选方法,常用的还有Lasso、最优子集、支持向量机、决策树、随机森林等,后续我们会陆续提到。

本系列的第一部分logistic回归就先介绍到这里,后续会更新其他模型。

Reference

  1. 医学统计学.第5版.颜艳,王彤.2020年。
  2. https://mp.weixin.qq.com/s/NowePGv6DF9_dF4blSyzVQ
  3. https://zhuanlan.zhihu.com/p/535482448
  4. https://blog.csdn.net/qq_42696043/article/details/125134962?spm=1001.2014.3001.5502

往期内容

  1. 资源汇总 | 2022 木舟笔记原创推文合集(附数据及代码领取方式)
  2. CNS图表复现|生信分析|R绘图 资源分享&讨论群!
  3. R绘图 | 浅谈散点图及其变体的作图逻辑
  4. 这图怎么画| 有点复杂的散点图
  5. 这图怎么画 | 相关分析棒棒糖图
  6. 组学生信| Front Immunol |基于血清蛋白质组早期诊断标志筛选的简单套路
  7. (免费教程+代码领取)|跟着Cell学作图系列合集
  8. Q&A | 如何在论文中画出漂亮的插图?
  9. 跟着 Cell 学作图 | 桑葚图(ggalluvial)
  10. R实战 | Lasso回归模型建立及变量筛选
  11. 跟着 NC 学作图 | 互作网络图进阶(蛋白+富集通路)(Cytoscape)
  12. R实战 | 给聚类加个圈圈(ggunchull)
  13. R实战 | NGS数据时间序列分析(maSigPro)
  14. 跟着 Cell 学作图 | 韦恩图(ggVennDiagram)


相关文章
|
7月前
|
机器学习/深度学习 数据采集 自然语言处理
岭回归与LASSO回归:解析两大经典线性回归方法
岭回归与LASSO回归:解析两大经典线性回归方法
岭回归与LASSO回归:解析两大经典线性回归方法
|
机器学习/深度学习 数据采集 数据处理
岭回归与LASSO回归:解析两大经典线性回归方法(上)
岭回归与LASSO回归:解析两大经典线性回归方法
|
4月前
|
机器学习/深度学习
一文了解回归模型10个重要知识点
一文了解回归模型10个重要知识点
|
4月前
|
机器学习/深度学习 数据可视化 算法
深入浅出:可视化理解揭示决策树与梯度提升背后的数学原理
本文将通过视觉方式解释用于分类和回归问题的决策树的理论基础。我们将看到这个模型是如何工作的,以及为什么它可能会导致过拟合。首先将介绍梯度提升以及它是如何改善单个决策树的性能的。然后将用Python从头实现梯度提升回归器和分类器。最后详细解释梯度提升背后的数学原理。
75 3
深入浅出:可视化理解揭示决策树与梯度提升背后的数学原理
|
4月前
|
机器学习/深度学习 算法
【机器学习】简单解释贝叶斯公式和朴素贝叶斯分类?(面试回答)
简要解释了贝叶斯公式及其在朴素贝叶斯分类算法中的应用,包括算法的基本原理和步骤。
78 1
|
7月前
|
数据挖掘
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
【数据挖掘】Lasso回归原理讲解及实战应用(超详细 附源码)
828 0
|
6月前
|
机器学习/深度学习 算法 数据格式
机器学习线性回归——概念梳理及非线性拟合
机器学习线性回归——概念梳理及非线性拟合
88 0
|
机器学习/深度学习 算法
【机器学习】Logistic回归(重新整理)
【机器学习】Logistic回归(重新整理)
160 0
|
机器学习/深度学习 人工智能 vr&ar
【机器学习】线性回归——岭回归从贝叶斯角度理解(理论+图解+公式推导)
【机器学习】线性回归——岭回归从贝叶斯角度理解(理论+图解+公式推导)
382 0
【机器学习】线性回归——岭回归从贝叶斯角度理解(理论+图解+公式推导)
|
机器学习/深度学习 人工智能 vr&ar
【机器学习】线性回归——岭回归解决过拟合问题(理论+图解+公式推导)
【机器学习】线性回归——岭回归解决过拟合问题(理论+图解+公式推导)
279 0
【机器学习】线性回归——岭回归解决过拟合问题(理论+图解+公式推导)