LASSO回归又称套索回归,通过生成并压缩回归模型的变系数罚函数,防止过度拟合,解决严重的共线性问题。 LASSO回归最早由英国人Robert Tibshirani提出,目前在预测模型中应用非常广泛。 在新格兰文献中,lydxhd提出了在变数太多、变数少的模型拟合中,首先考虑使用LASSO罚函数。 今天介绍如何使用r语言在LASSO回归结构中预测模型。
首先下载r的glmnet软件包。 由LASSO回归的发明者、斯坦福统计学家Trevor Hastie领导开发。
加载所需的包,导入数据(或我们以前的SPSS乳腺癌数据),然后删除缺失值
库(glm net )库(Foreign ) BC-read.SPSS (‘ e :/r/breastcancersurvivalagec.sav ‘,use.value.laber )
目前,glmnet数据包只接受矩阵形式的数据,而数据框中的数据会报告错误,所以首先将数据转换为矩阵形式很重要。
y-as.matrix(BC[,8] ) y-as.matrix(BC[,c ) 2:7,9:11 ) ]
转换后,得到了两个数据矩阵。 y是结果,x是数据的变量
开始构建模型
f1=glmnet(x,y,family=’binomial ‘,nlambda=100,alpha=1) #其中alpha=1是LASSO回归,如果为0,则岭回归#参数family是回归方程family=’gaussian ‘应用于一维连续因子变量(univariate );family=’mgaussian )应用于多维连续因子变量(multivariate );family=’poisson ) 由于这里的最终指标是2分类变量,所以使用binomial print (f1 )输出f1结果
可知随着lambdas的增加,自由度和残差减少,最小lambda为0.000233
输出图形
打印(f1,xvar=’lambda ‘,label=TRUE ) ) ) ) ) ) )。
可见,横轴是lambdas的对数,纵轴是变量系数,随着lambdas的增加变量系数减少,一部分变量系数变为0 ()
进行交叉检查
可以取数据集的一部分进行验证。 (这一步可以不做) )。
predict(F1,newx=x[2:5,],type=’response ‘ )
然后,用附属于glmnet的函数进行交叉检查,输出图表
CVFit=cv.glmnet(x,y ) plot (CVF it ) )。
这张图上有两条虚线。 一个是均方误差最小时的值,另一个是均方误差最小时的标准误差的值。 有点别扭也没关系。 我们要是知道那个是多少就好了
求出cvfit$lambda.min#最小值求出cvfit$lambda.1se#最小值的标准错误值
OK,我们得到这两个值,各自拿去模型看看吧
L.coef2-coef(CVFit$glmnet.fit,s=0.004174369,exact=F ) L.coef2-coef(CVFit$glmnet.fit,s=0.04272596 )
第一个模型变量消失了,第二个模型还有五个变量,因此只能选择第二个。
我们提取这几个系数组成广义线性方程。 我不擅长取时间变量time。 (只要做示范,就可以拿走。 )
(模式- glm (状态~聚合) ) ) ) ) ) ) )
3个指标入选,也可求出OR和95%CI
ok,做到这里,模型已经全部做好了。 你已经记住了吗?
快三大小单双位技巧准确率99交叉检查
可以取数据集的一部分进行验证。 (这一步可以不做) )。
predict(F1,newx=x[2:5,],type=’response ‘ )
然后,用附属于glmnet的函数进行交叉检查,输出图表
CVFit=cv.glmnet(x,y ) plot (CVF it ) )。
这张图上有两条虚线。 一个是均方误差最小时的值,另一个是均方误差最小时的标准误差的值。 有点别扭也没关系。 我们要是知道那个是多少就好了
求出cvfit$lambda.min#最小值求出cvfit$lambda.1se#最小值的标准错误值
OK,我们得到这两个值,各自拿去模型看看吧
L.coef2-coef(CVFit$glmnet.fit,s=0.004174369,exact=F ) L.coef2-coef(CVFit$glmnet.fit,s=0.04272596 )
第一个模型变量消失了,第二个模型还有五个变量,因此只能选择第二个。
我们提取这几个系数组成广义线性方程。 我不擅长取时间变量time。 (只要做示范,就可以拿走。 )
(模式- glm (状态~聚合) ) ) ) ) ) ) )
3个指标入选,也可求出OR和95%CI
ok,做到这里,模型已经全部做好了。 你已经记住了吗?