Я читал описание регрессии гребня в Прикладных линейных статистических моделях , 5-е издание, глава 11. Регрессия гребня выполняется на основе данных о жировых отложениях, доступных здесь .
Учебник соответствует выходным данным в SAS, где обратные преобразованные коэффициенты заданы в модели как:
Это видно из 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
>
Может кто-нибудь помочь мне понять, почему?
r
sas
ridge-regression
B_Miner
источник
источник
Ответы:
Хотя регрессия гребня выглядит сначала как простой алгоритм, дьявол кроется в деталях. По-видимому, исходные переменные масштабируются, и параметр не является параметром, который, как вы думаете, приведен в исходном описании. Из того, что я собрал, прочитав ссылку, приведенную на странице справки R, нет единого согласованного способа регрессии гребня. Таким образом, разница в результатах может быть объяснена только различными алгоритмами, используемыми R и SAS. Надеюсь, кто-то более знающий может дать более подробный ответ.λ
lm.ridge
Вы можете увидеть, какой алгоритм применяется в R, посмотрев на источник
lm.ridge
. Просто введитеlm.ridge
приглашение Rисточник
Использование lm.ridge также создает масштабирующий вектор (попробуйте head (модель), чтобы увидеть весь вывод). Чтобы получить прогнозируемые значения в R, которые вы видите в SAS, возьмите коэффициенты и разделите на скалярный вектор.
источник