有现成函数就先用,解释啊研究啊之类的东东要在保证能先做出来的基础上才有心情去搞
岭回归是线性回归的一种衍生算法,函数,属于MASS包,上数据:
由于里头有个不太和谐的NA值,为了避免后头每一步都要添na参数那么麻烦,先用前些天试过的自动arima补个缺好了
填补出来的效果看图
还行,就它吧
完成补缺工作后,可以开始上主菜了,比如咱拟合的目标列是最后一列ValueSold,其余几列不做任何排除分析全当成自变量放进去做线性回归,这当然可以做出一个拟合结果来,但拟合的效果好不好那就不一定了
正常的线性回归结果:
coef(lm(ValueSold~.,Data))
qqnorm(resid(lm(ValueSold~.,Data)))
残差qq图也放一份:
具体为啥做出来效果不好的原因我也大概知道,看看4个自变量的相关系数矩阵心里也就有点数了(少数感觉r值在0.9以上不好的时候)
然后试下岭回归,,这里头有个重要的参数,lambda,默认值是0
(ValueSold~.,Data,lambda=0)
可以看到,当lambda取默认值时,做出来的结果和正常的线性回归是没有区别的
但是,既然有这参数就意味着是可以改的,而且更更重要的是,如果不确定这个lambda到底取多大比较合适,可以直接放个向量进去,然后把各个不同lambda的结果放在一起画成图,这部分可以参考帮助文档的示例
plot((ValueSold~.,Data,lambda=seq(0,0.1,0.001)))
当图上的曲线变化开始逐渐平稳的时候,就是比较合适的lambda值
当然,觉得看图这么专业的工作干不来想直接copy答案的,可以用select把数据弄出来
个人觉着它的意思是取0.065,代回去试试有没有变化
嗯,系数都变了,由于求残差那个resid对用不了,残差列自给自足一下
Coef1-coef((ValueSold~.,Data,lambda=0.065))
(cbind(c(1),Data[,1:4]))
CanCha1-Data$%*%Coef1
qqnorm(CanCha1,main="")
为了确保不是由于我眼瞎造成的视觉差异,把两个qq图放在一起看
呃~~看图真是个纠结的过程,每次都越看越觉得自己瞎,得了,这就当是做完了吧
版权声明:本站所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流,不声明或保证其内容的正确性,如发现本站有涉嫌抄袭侵权/违法违规的内容。请举报,一经查实,本站将立刻删除。