我过去经常使用名为“' ridge'来自埃里卡库莱(Erica Cule)进行岭回归,但似乎已经从CRAN网站上撤下了。通过各种帮助,似乎至少有2个其他包可以运行它(genridge和MASS)。然而,当我运行分析时,我得到的结果我知道是错误的(我将结果与SPSS Ridge例程进行比较,这是很久以来建立的,我使用的数据与我用来比较与SPSS具有相同结果的脊包相同)。
我使用的是最新版本的R(3.2.3)。数据是标准回归类型数据,因此所有数据都是7点语义量表,没有丢失数据(缺失数据被均值替换),变量之间存在很强的相关性(通常为0.5及以上),所以你希望看到脊回归中的大刑罚效应。
当我在两种方法中运行分析时,系数基本上不会随着λ增加而改变(仅改变到小数点后4位)。
关于出了什么问题的任何想法?
###################################
#genridge
###################################
library(genridge)
regdata <- read.csv(file = "Finaldata.csv", na.strings = "#NULL!")
lridge <- ridge(Q13 ~ Q12_1 + Q12_2 + Q12_3 + Q12_4 + Q12_5 + Q12_6 + Q12_7 + Q12_8, data = regdata, lambda = seq(0,5,0.2))
coef(lridge)
###################################
#lm.ridge
###################################
library(MASS)
lridge <- lm.ridge(Q13 ~ Q12_1 + Q12_2 + Q12_3 + Q12_4 + Q12_5 + Q12_6 + Q12_7 + Q12_8, regdata, lambda = seq(0,5,0.2))
lridge$coef
数据看起来像这样
serial Q13 Q12_1 Q12_2 Q12_3 Q12_4 Q12_5 Q12_6 Q12_7 Q12_8
12 6 6 5 5 6 6 6 6 6
13 5 5 6 5 5 3 4 5 4
16 5 6 6 6 5 7 7 4 5
20 7 7 6 6 6 6 6 6 7
22 2 1 4 4 3 4 4 4 4
25 6 6 7 6 6 6 6 6 6
来自genridge的输出
Q12_1 Q12_2 Q12_3 Q12_4 Q12_5 Q12_6 Q12_7 Q12_8
0.0 0.2915857 -0.06272736 0.1030976 0.2877907 -0.02847326 0.1817142 0.08490121 0.1303255
0.2 0.2914957 -0.06265994 0.1031015 0.2877065 -0.02837763 0.1816626 0.08487546 0.1303682
0.4 0.2914057 -0.06259260 0.1031054 0.2876224 -0.02828214 0.1816110 0.08484980 0.1304108
0.6 0.2913159 -0.06252533 0.1031093 0.2875384 -0.02818680 0.1815595 0.08482421 0.1304532
0.8 0.2912262 -0.06245813 0.1031132 0.2874544 -0.02809159 0.1815082 0.08479870 0.1304956
1.0 0.2911365 -0.06239101 0.1031171 0.2873705 -0.02799653 0.1814569 0.08477326 0.1305378
答案 0 :(得分:0)
您可以尝试使用glmnet R包。
此外,如果您的数据量不是很大,您可以考虑使用岭回归 作为增广的普通最小二乘问题
以下链接可以很好地解释这个想法 http://statweb.stanford.edu/~tibs/sta305files/Rudyregularization.pdf