Різниця між реалізацією регресії хребта в 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. Однак якщо ми можемо стандартизувати дані, як у книзі, перше значення при c = 0 є аналогічним R та SPSS (працює з множинною лінійною регресією). Однак результати зовсім інші, коли ми рухаємось далі, як зазначено вище. Я теж не знайшов підказки різниці між результатами для одних і тих же даних.
асад

Відповіді:


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

@ user2040, перевірте, чи використовуються однакові дані SAS та R. Якщо вони однакові, то єдиний висновок полягає в тому, що алгоритми різні. Про що йдеться у довідковій сторінці SAS?
mpiktas

@ user2040, я реплікував регресію хребта SAS на R із вашими даними. Тож ми точно знаємо, що алгоритми різні.
mpiktas

1
Ви просто побили мене до цього! :) Я переглядав сторінку допомоги SAS, на яку ви посилалися. Я порівнював RMSE (лише у зразках даних, ще не підтверджував резюме або завантажувальним записом), і результат R був найкращим. Отже, чи вважаєте ви, що регресія хребта найкраще підходить для прогнозування та не інтерпретації коефіцієнтів (оскільки результати можуть бути таким різним за алгоритмом)? Я вже знаю, що регулярна теорія лінійної моделі (КІ, контрасти тощо) є для регресії хребта (завантаження стає ближчим, але все-таки може бути оманом через упередженість).
B_Miner

0

Використання lm.ridge також створює вектор масштабування (спробуйте голову (модель), щоб побачити весь вихід). Для отримання прогнозованих значень в R, які ви бачите в SAS, візьміть коефіцієнти і розділіть на скалярний вектор.


2
Я не отримую цього результату, чи можете ви проілюструвати, будь ласка?
B_Miner
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.