R과 SAS의 릿지 회귀 구현의 차이점


10

능선 회귀에 대한 설명을 Applied Linear Statistical Models , 5th Ed 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에서 비슷합니다 (다중 선형 회귀 실행). 그러나 위에서 언급 한대로 더 나아가면 결과는 상당히 다릅니다. 나는 또한 동일한 데이터에 대한 출력 간의 차이에 대한 단서를 찾지 못했습니다.
asad

답변:


6

λlm.ridge

의 소스를 보면 R에 어떤 종류의 알고리즘이 적용되는지 확인할 수 있습니다 lm.ridge. lm.ridgeR 프롬프트를 입력 하십시오.


이 링크는 lm.ridge가 계수를 계산하는 방법을 해독하는 데 도움이된다는 것을 발견했습니다. mail-archive.com/r-help@r-project.org/msg81115.html 그러나 내가 참조한 텍스트와 SAS와 결과가 어떻게 다른지 의아해합니다 , 각각이 원래 규모로 돌아간 것으로 가정합니다.
B_Miner

@ user2040에서 SAS와 R이 동일한 데이터를 사용하는지 확인하십시오. 동일한 경우 알고리즘이 다르다는 것이 유일한 결론입니다. 무슨 SAS 도움말 페이지가 말하고 있습니까?
mpiktas

@ user2040, 나는 데이터와 함께 R에서 SAS 릿지 회귀 를 복제했습니다 . 알고리즘이 다르다는 것을 확실히 알고 있습니다.
mpiktas

1
당신은 저를 이길 수 있습니다! :) 참조한 SAS 도움말 페이지를보고있었습니다. RMSE (샘플 데이터 만, 아직 CV 또는 부트 스트랩으로 검증하지 않음)를 비교 한 결과 R 결과가 우수 했으므로 능선 회귀가 예측에 가장 적합하고 계수를 해석하지 않는 것으로 생각하십니까 (결과가 알고리즘에 따라 너무 다름)? 나는 이미 선형 모델 이론 (CI, 대비 등)이 능선 회귀에 빠져 있음을 알고 있습니다 (부트 스트래핑은 가까워 지지만 여전히 바이어스로 인해 오도 될 수 있음).
B_Miner

0

lm.ridge를 사용하면 스케일링 벡터도 생성됩니다 (모든 출력을 보려면 헤드 (모델) 사용). SAS에서 볼 수있는 R의 예측 된 값을 얻으려면 계수를 가져와 스칼라 벡터로 나눕니다.


2
나는 그 결과를 얻지 못합니다. 설명해 주시겠습니까?
B_Miner
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.