【R语言】LASSO回归(含代码)

LASSO回归的介绍

LASSO回归是由统计学家Robert Tibshirani于1996年提出的一种回归分析方法。它通过在损失函数中加入L1正则化项,实现对模型参数的惩罚,使得一部分参数趋于零。这种稀疏性的特点使得LASSO回归在高维数据集中具有出色的性能。

LASSO在医学中的应用:

  • 基因表达数据分析:LASSO回归可以用于选择最相关的基因。

  • 临床预测模型构建:选择对目标变量有重要影响的临床指标。

  • 生物医学图像分析:选择最相关的图像特征。

  • 生存分析:预测患者生存时间,并识别对生存有显著影响的生物标记或临床特征。

  • 流行病学研究:建立与健康相关的模型,帮助识别影响健康状况的卫生指标与因素。

 LASSO实例:

该篇研究将LASSO回归用于:对各变量进行单因素Cox分析后,将有统计学意义(p<0.05)的变量纳入LASSO方程进行特征选择。随后,进行多变量Cox分析以确定独立预测因素。

该篇研究将LASSO回归用于:通过单变量logistic回归分析筛选风险因素后,采用LASSO回归模型筛选SAP的独立预测因子,逐级后退分析。

使用LASSO的注意事项

  • 选择合适的正则化参数(lambda):可以使用交叉验证来选择合适的 λ。
  • 处理共线性:LASSO回归对于存在高度相关性的特征集合可能表现出选择其中一个的倾向。在面对共线性时,可能需要考虑使用岭回归(Ridge regression)或弹性网络(Elastic Net)来综合处理。
  • 标准化输入变量:有助于确保所有变量受到相似的惩罚,并且更容易比较它们的影响。
  • 考虑非线性关系:LASSO回归是线性模型的一种,可能无法捕捉非线性关系。如果数据中存在复杂的非线性关系,考虑使用非线性模型或者对输入变量进行转换。
  • 处理缺失数据:在使用LASSO回归之前,需要先处理缺失数据,可以考虑使用合适的插补方法。

R语言实战

#install.packages("glmnet")

#这个包一般应用于linear regression, lasso,logistic regression, and Poisson regression

library(glmnet)

library(foreign)#阅读文件
#读取数据

data <- read.csv("C:\\Users\\86134\\Desktop\\ABC.csv")
#查找缺失值

install.packages("psych")

library(psych)

describe(data)

#找出具体哪个变量的哪个数据有缺失

sapply(data[,c(1:7)],function(x)which(is.na(x)))#没有可不选

#数据转换

data$frailty <- as.numeric(data$frailty)

data$A <- as.factor(data$A)

data$B <- as.factor(data$B)

data$C <- as.factor(data$C)

data$D <- as.factor(data$D)

data$E <- as.factor(data$E)

data$F <- as.numeric(data$F)

str(data)

#矩阵转换

xfactors <- model.matrix(data$frailty ~ data$A + data$B + data$C + data$D + data$D + data$E)[,-1]

x <- as.matrix(data.frame(data[,c(7)], xfactors))

y <- data[,1]

#开始构建模型

f1 = glmnet(x, y, family="binomial", nlambda=100, alpha=1) #这里alpha=1为LASSO回归,如果等于0就是岭回归

#可视化f1

plot(f1, xvar="lambda", label=TRUE)

print(f1)

#进行交叉验证

cvfit=cv.glmnet(x,y)

plot(cvfit)

#如果取最小值时

cvfit$lambda.min

Coefficients <- coef(f1, s = cvfit$lambda.min)

Active.Index <- which(Coefficients != 0)

Active.Coefficients <- Coefficients[Active.Index]

Active.Index

Active.Coefficients

row.names(Coefficients)[Active.Index]

#如果取1倍标准误

cvfit$lambda.1se

Coefficients <- coef(f1, s = cvfit$lambda.1se)

Active.Index <- which(Coefficients != 0)

Active.Coefficients <- Coefficients[Active.Index]

Active.Index

Active.Coefficients

row.names(Coefficients)[Active.Index]

更多资料可关注公主号:33文献精读打卡

  • 19
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值