R和SAS中的岭回归实现之间的区别


10

我已经阅读了《应用线性统计模型》第5版第11章中对岭回归的描述。岭回归是根据此处可用的身体脂肪数据完成的。

教科书与SAS中的输出匹配,在拟合模型中反变换系数为:

Y=7.3978+0.5553X1+0.3681X20.1917X3

从SAS显示为:

proc reg data = ch7tab1a outest = temp outstb noprint;
  model y = x1-x3 / ridge = 0.02;
run;
quit;
proc print data = temp;
  where _ridge_ = 0.02 and y = -1;
  var y intercept x1 x2 x3;
run;
Obs     Y    Intercept       X1         X2         X3

 2     -1     -7.40343    0.55535    0.36814    -0.19163
 3     -1      0.00000    0.54633    0.37740    -0.13687

但是R给出了非常不同的系数:

data <- read.table("http://www.cst.cmich.edu/users/lee1c/spss/V16_materials/DataSets_v16/BodyFat-TxtFormat.txt", 
                   sep=" ", header=FALSE)
data <- data[,c(1,3,5,7)]
colnames(data)<-c("x1","x2","x3","y")
ridge<-lm.ridge(y ~ ., data, lambda=0.02)   
ridge$coef
coef(ridge)

>   ridge$coef
       x1        x2        x3 
10.126984 -4.682273 -3.527010 
>   coef(ridge)
                   x1         x2         x3 
42.2181995  2.0683914 -0.9177207 -0.9921824 
> 

谁能帮我理解为什么?


我使用了相同的数据集,并在SPSS中对其进行了分析。结果类似于SAS。但是,如果我们可以像书中那样对数据进行标准化,则R和SPSS中的c = 0处的第一个值类似(运行多元线性回归)。但是,当我们如上所述进一步移动时,结果会大不相同。我也没有发现相同数据输出之间差异的任何线索。
asad 2014年

Answers:


6

尽管脊回归首先看起来像简单的算法,但细节是魔鬼。显然,原始变量已缩放,并且参数不是您认为原始说明具有的参数。从我收集的内容来看,R帮助页面中提供的参考文献中没有一种公认的进行岭回归的方法。因此,结果的差异只能由R和SAS使用的不同算法来解释。希望知识渊博的人能够给出更详细的答案。λlm.ridge

通过查看的来源,您可以了解在R中应用了哪种算法lm.ridge。只需lm.ridge在R提示符下输入。


我发现此链接有助于破译lm.ridge如何计算系数:mail-archive.com/r-help@r-project.org/msg81115.html 但仍然感到困惑的是,结果与我引用的文本和SAS有何不同,假设每个都恢复到原始比例。
B_Miner 2011年

@ user2040,检查SAS和R是否使用相同的数据。如果相同,则唯一的结论是算法不同。SAS帮助页面在说什么?
mpiktas,2011年

@ user2040,我已经用您的数据在R上复制了SAS岭回归。因此,我们可以确定算法是不同的。
mpiktas,2011年

1
你只是击败我!:)我在看您引用的SAS帮助页面。我比较了RMSE(仅样本数据,尚未通过CV或自举验证),R结果更好。在算法上如此不同)?我已经知道,常规的线性模型理论(CI,对比度等)已经可以用于岭回归(自举距离越来越近,但由于偏差仍然会产生误导)。
B_Miner 2011年

0

使用lm.ridge还会产生一个缩放矢量(尝试用head(model)查看所有输出)。要获得您在SAS中看到的R中的预测值,请采用系数并除以标量向量。


2
我没有得到那个结果,请您说明一下吗?
B_Miner
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.