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

359b9f38db041d84b73a222266b4805c.jpeg

reg

Logistic回归分析

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

一个例子

78c250dab1f42d3f6c805304fbfc072c.pnga1d146751118fa8030aa276545a09582.png

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

木舟笔记永久VIP企划

「权益:」

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

    7492e7658560b437692e9bb0bde31fd1.png
    data+code
  2. 木舟笔记「科研交流群」

「收费:」

「169¥/人」。可添加微信:mzbj0002 转账(或扫描下方二维码),或直接在文末打赏。木舟笔记「2022VIP」可直接支付「70¥」升级。

点赞在看 本文,分享至朋友圈集赞30个保留30分钟,可优惠20¥

9ffa5e180e9524d04c2637d56a4f2a10.png

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)
749fb06ac10640fb954aca32a992929e.png
#重新建立回归模型
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")
4d85020e6c3a12dee1ba4ea962f11e15.png
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")#输出文档
2c5d529f828deb06182b664d36ba9ead.png

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年11月13日
下一篇 2023年11月13日

相关推荐