Разница между реализацией регрессионного гребня в 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 
> 

Может кто-нибудь помочь мне понять, почему?

B_Miner
источник
Я использовал тот же набор данных и проанализировал его в SPSS. Результаты аналогичны SAS. Однако, если мы можем стандартизировать данные, как в книге, первое значение при c = 0 аналогично в R и SPSS (выполняется множественная линейная регрессия). Однако результаты сильно отличаются, когда мы продвигаемся дальше, как указано выше. Я также не нашел никакой разницы между выводами для одних и тех же данных.
asad

Ответы:

6

Хотя регрессия гребня выглядит сначала как простой алгоритм, дьявол кроется в деталях. По-видимому, исходные переменные масштабируются, и параметр не является параметром, который, как вы думаете, приведен в исходном описании. Из того, что я собрал, прочитав ссылку, приведенную на странице справки R, нет единого согласованного способа регрессии гребня. Таким образом, разница в результатах может быть объяснена только различными алгоритмами, используемыми R и SAS. Надеюсь, кто-то более знающий может дать более подробный ответ.λlm.ridge

Вы можете увидеть, какой алгоритм применяется в R, посмотрев на источник lm.ridge. Просто введите lm.ridgeприглашение R

mpiktas
источник
Я нашел эту ссылку полезной для расшифровки того, как lm.ridge вычисляет коэффициенты: mail-archive.com/r-help@r-project.org/msg81115.html Но все же озадачил, насколько результаты отличаются от текста, на который я ссылался, и SAS с учетом того, что каждый предположительно возвращается к исходному масштабу.
B_Miner
@ user2040, убедитесь, что SAS и R. используют одни и те же данные. Если они совпадают, то можно сделать вывод, что алгоритмы разные. О чем говорит страница помощи SAS?
mpiktas
@ user2040, я скопировал регрессию SAS-гребня на R с вашими данными. Так что мы точно знаем, что алгоритмы разные.
mpiktas
1
Вы просто победили меня в этом! :) Я просматривал справочную страницу SAS, на которую вы ссылались. Я сравнил RMSE (только данные в выборке, еще не проверял с помощью CV или начальной загрузки) и результат R был превосходным. Итак, вы думаете, что регрессия гребня лучше всего подходит для прогнозирования и не интерпретирует коэффициенты (так как результаты могут быть таким разным по алгоритму)? Я уже знаю, что теория регулярных линейных моделей (КИ, контрасты и т. Д.) Не подходит для регрессии гребня (самозагрузка становится ближе, но все же может вводить в заблуждение из-за смещения).
B_Miner
0

Использование lm.ridge также создает масштабирующий вектор (попробуйте head (модель), чтобы увидеть весь вывод). Чтобы получить прогнозируемые значения в R, которые вы видите в SAS, возьмите коэффициенты и разделите на скалярный вектор.

Томас
источник
2
Я не получаю этот результат, не могли бы вы проиллюстрировать, пожалуйста?
B_Miner