R语言notes(2)——Lasso

毕业篇分享

艾瑞巴蒂我回来啦!毕业真是个琐碎又漫长的过程,虽然已经在家休息了十多天了,天气炎热到不想写,但还是要坚持写下去。本期的主题主要是跟我的毕业论文有关。大致分为Lasso以及Adaptive Lasso的建模与预测中的R语言实现的问题~

  1. 背景介绍
    Lasso是机器学习中的一类稀疏学习模型,其包括在广义线性回归模型的范畴中。其主要的优势在于可以在大量的自变量中选取对因变量有影响的因子,同时进行参数估计与模型选择。

  2. 相关包的选择
    对于Lasso相关包的选择还挺多的。我之前选择的包有glmnet以及msgps,但是对于Adaptive Lasso的相关包的选择比较少,当时采用的是msgps。在找包的过程中,我发现我这种菜鸟之前都是直接找代码,所有如果网上没有代码,我就陷入僵局,无法动弹。万事皆可寻其源,后来发现R有一个网站可以查各种包,大家可以试试,R site Search:link

  3. 预测问题
    其实找完包不是最关键的一步,因为这部分比较简单,看着help大家也都会操作。最主要的是应用到实际中的预测问题。一般的预测,比如最简单的线性回归,因变量与自变量之间的存在长期关系,那么可以直接静态预测。但对于经济学甚至现实生活中的其他领域的问题,会发现变量之间存在的关系是短期的或者一直在发生变化的。因此,利用滚动窗口的动态预测是十分必要的。R语言中滚动预测的包可采用zoo中的rollapply,但是在应用之前,需要把数据集转化为zoo的类型,转化的方式也很简单,以一个时间序列的数据集为例:

Test=zoo(Data[,-1],order.by =Data$trade_time)

为什么要删掉第一列呢(第一列为日期),因为不删的话rollapply后出不了结果!!!当时在这个坑里思考人生,幸亏好心人拉一把,不然真的死在这里了T^T。对于一些成熟的模型,其自带的包里就可以进行滚动预测,但是有些独自美丽的模型就不行了,需要将公式嵌入rollapply中。以Lasso的滚动预测进行说明:

result_la=rollapplyr(zoo(Test),
                     width=450,###滚动窗口大小###
                     FUN = function(Z) ###定义公式###
                     { Z = as.data.frame(Z)
                     X=cbind.data.frame(Z$x1,Z$x2,Z$x3,Z$x4,Z$x5,Z$x6,Z$x7,Z$x8,Z$x9,Z$x10)
                     X1=as.matrix(X)
                     t2=cv.glmnet(X1,Z$`RVt+1`,family="gaussian",nlambda=50,alpha=1,type.measure="mae",gamma=0);
                     K=as.matrix(t(coef(t2,s=c(t2$lambda.min))))###Lasso的拟合###
                     print(K)
                     return(K)
                     },
                     by.column=FALSE, align="right") 
write.csv(result_la, file ="C:/Users/xxx/Desktop/coef-lasso.csv")###保存到csv###

你可能感兴趣的:(R语言notes(2)——Lasso)