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

啥啥49 2024-07-19 10:35:01 阅读 63

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语言实战

<code>#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)

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

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

<code>#数据转换

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就是岭回归code>

#可视化f1

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

print(f1)

<code>#进行交叉验证

cvfit=cv.glmnet(x,y)

plot(cvfit)

<code>#如果取最小值时

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]

<code>#如果取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文献精读打卡



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。