Różnica między implementacją regresji grzbietu w R i SAS

10

Czytałem opis regresji grzbietu w Applied Linear Statistics Models , 5th Ed, rozdział 11. Regresję grzbietu wykonuje się na podstawie danych tkanki tłuszczowej dostępnych tutaj .

Podręcznik pasuje do danych wyjściowych w SAS, gdzie współczynniki przekształcone wstecz są podane w dopasowanym modelu jako:

Y=-7,3978+0,5553X1+0,3668X2)-0,1917X3)

Pokazuje to 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

Ale R daje bardzo różne współczynniki:

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 
> 

Czy ktoś może mi pomóc zrozumieć, dlaczego?

B_Miner
źródło
Użyłem tego samego zestawu danych i przeanalizowałem go w SPSS. Wyniki są podobne do SAS. Jeśli jednak możemy znormalizować dane jak w książce, pierwsza wartość przy c = 0 jest podobna w R i SPSS (uruchamiając wielokrotną regresję liniową). Jednak wyniki są zupełnie inne, gdy idziemy dalej, jak wskazano powyżej. Ja również nie znalazłem pojęcia różnicy między wyjściami dla tych samych danych.
asad

Odpowiedzi:

6

Choć regresja kalenicy na początku wygląda jak prosty algorytm, diabeł tkwi w szczegółach. Najwyraźniej oryginalne zmienne są skalowane, a parametr nie jest parametrem, o którym można by sądzić, że ma oryginalny opis. Z tego, co zebrałem, czytając odniesienie podane na stronie pomocy R, nie ma jednego uzgodnionego sposobu przeprowadzenia regresji grzbietu. Tak więc różnicę w wynikach można wyjaśnić jedynie różnymi algorytmami stosowanymi przez R i SAS. Mam nadzieję, że ktoś bardziej kompetentny może udzielić bardziej szczegółowej odpowiedzi.λlm.ridge

Możesz zobaczyć, jakiego rodzaju algorytm stosuje się w R, patrząc na źródło lm.ridge. Po prostu wpisz lm.ridgeznak zachęty R.

mpiktas
źródło
Uważam, że ten link jest pomocny w odszyfrowaniu, w jaki sposób lm.ridge oblicza współczynniki: mail-archive.com/[email protected]/msg81115.html Ale nadal zastanawiam się, jak różne są wyniki od tekstu, do którego się odwoływałem i SAS , biorąc pod uwagę, że każdy z nich prawdopodobnie powraca do oryginalnej skali.
B_Miner
@ user2040, sprawdź, czy te same dane są używane przez SAS i R. Jeśli są takie same, to jedynym wnioskiem jest to, że algorytmy są różne. Co mówi strona pomocy SAS?
mpiktas
@ user2040, zreplikowałem regresję grzbietu SAS na R z twoimi danymi. Wiemy więc na pewno, że algorytmy są różne.
mpiktas
1
Po prostu mnie do tego pobiłeś! :) Patrzyłem na stronę pomocy SAS, do której się odwoływałeś. Porównałem RMSE (tylko dane w próbie, jeszcze nie sprawdziłem przy użyciu CV lub bootstrapu), a wynik R był lepszy, więc uważasz, że regresja grzbietu najlepiej nadaje się do przewidywania i nie interpretowania współczynników (ponieważ wyniki mogą być tak różnym według algorytmu)? Wiem już, że regularna teoria modeli liniowych (CI, kontrasty itp.) Jest objęta regresją grzbietu (ładowanie się zbliża, ale nadal może być mylące z powodu stronniczości).
B_Miner
0

Użycie lm.ridge tworzy również wektor skalowania (wypróbuj głowicę (model), aby zobaczyć wszystkie dane wyjściowe). Aby uzyskać przewidywane wartości w R, które widzisz w SAS, weź współczynniki i podziel przez wektor skalarny.

Tomasz
źródło
2
Nie otrzymuję tego wyniku, czy możesz to zilustrować?
B_Miner