大家好,2年前,我们写了一篇关于LASSO回归的推文:“什么是LASSO回归,怎么看懂LASSO回归的结果”。当时我们说,如果阅读量超过3000,我们就就再开一期教程,手把手带大家做出LASSO回归,可是后来拖延症发作,没有及时兑现大家的承诺,在这里先和大家说声对不起。
不过,鸽了2年之后,我们今天终于要兑现这个承诺啦!今天我们将会给大家带来完整的用R语言实现LASSO回归的教程。
另外,针对不想使用R语言的小伙伴,我们还准备一个非常好用的工具,无需代码,可以一键完成LASSO回归分析!
使用R语言实现LASSO回归
1.首先安装LASSO必要的包:glmnet和Matrix,如果已经安装了,直接加载即可。
# 安装并加载必要的包
install.packages("glmnet")
install.packages("Matrix")
library(glmnet)
library(Matrix)
2.导入数据。大家需要把自己手上的excel数据导入到R中,这时候我们需要拿到这个excel的路径,比如:C:\Users\张三\Desktop\data.csv 读入之后,我们可以用summary(data)来检查是否导入成功。
3.删除缺失值,生成新数据集。在运行glmnet包的时候,如果数据里面包含缺失,会导致报错,所以我们需要对缺失数据进行删除,然后保存一份没有缺失的数据集c_data。(如果你的样本量不大,或者缺失过多,可以考虑进行数据插补,这里的代码就不详细讲解了)
# 导入数据
data = read.csv("/Users/zhao/Desktop/lasso回归代码/data.csv", header=T)
summary(data)
# 删除缺失值
c_data <- na.omit(data)
summary(c_data)
4.指定纳入LASSO方程的多个X和Y。y = as.factor(c_data[,7]) 中的数字“7”表示了数据集的第7列是Y,c(1,3,5,6,8,9),表示了 135689列是纳入方程的协变量X。(这里需要替换成自己想要分析的变量哦)
# 指定多个X和Y
# 这里的数字代表的是变量在数据集中的列数,比如age是第3列,那么就是c(3)
x <- as.matrix(c_data[, c(1,3,5,6,8,9)])
# 这里相当于选择了 135689列作为X,这里的数字要根据自己的数据进行修改调整
y = as.factor(c_data[,7])
# 这里指定了第7列作为方程的Y
5.使用glmnet函数来拟合Lasso回归模型,并生成系数路径图:
# Lasso筛选变量动态过程图
la.eq <- glmnet(x, y, family="binomial", alpha=1)
plot(la.eq, xvar = "lambda", label = F)
运行这个代码就会生成大家熟悉的路径图:
横坐标为lambda的值,纵坐标为变量系数,可以看出,随着的增加,部分变量的系数逐渐被压缩为0,变量个数随之减少。
6.交叉验证,寻找最优λ。下面我们我们使用使用10折交叉验证的方法,选择合适的正则化参数λ:
# 交叉验证法挑选lambda
mod_cv <- cv.glmnet(x=x, y=y, family="binomial", alpha=1)
plot(mod_cv)
7.使用最优λ训练模型,并显示最优的lasso模型。一般来说我们会选择2个参数,分别是lambda.min和lambda.1se,输出方程就可以看到结果了。
# 选择lambda=lambda.min的模型系数估计
best_lambda <- mod_cv$lambda.min
best_model <- glmnet(x, y, family="binomial", alpha = 1, lambda = best_lambda)
coef(best_model)
# 选择lambda=lambda.1se的模型系数估计
best_lambda1se <- mod_cv$lambda.1se
best_model1se <- glmnet(x, y, family="binomial", alpha = 1, lambda = best_lambda1se)
coef(best_model1se)
以上就是使用R代码自己实现LASSO回归的过程,终于填上2年前的坑了。不过大家也发现了,自己使用R代码实现LASSO回归还是比较麻烦的。
为了解决这个难题,我们开发了一个不用写代码,可以一键完成LASSO回归的工具EasyR,下面,我们就进入EasyR的教程环节:
使用EasyR实现LASSO回归
1.注册并登录EasyR网站,网站的域名是www.easyr.cc ,整个工具是在网页端的,不需要下载软件~
2.上传自己的excel数据:
3.进入LASSO模块,选择Y和X,点击分析。
4.查看结果:在下面就可以看到最终的结果,参数不是0的变量,就是LASSO最后筛选出来的变量。点击图片,可以查看路径图和交叉验证图:
到这就全部搞完了,整个过程不超过3分钟,是不是非常简单。
其实,EasyR是我们开发的一套非常完善的在线数据分析工具,这个工具摒弃了传统分析软件对使用者的高要求,一切操作都非常清晰、简单、易懂。软件还会根据数据分布类型选择分析方法。
除了LASSO之外,EasyR还涵盖了很多统计模块,包括机器学习、多重插补、倾向性评分匹配,之后我们会逐步向大家分享,感兴趣的可以关注我们的微信号哦,我们下期再见