# Difference between ridge regression implementation in R and SAS

I have been reading the description of ridge regression in Applied Linear Statistical Models 5th Ed chapter 11. The ridge regression is done on a data set available at body fat data

The textbook matches the output in SAS, where the back transformed coefficients are given in the fitted model as Y=-7.3978+0.5553*X1+0.3681*X2-0.1917*X3.

This is shown from SAS as:

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


But R gives very different coefficients:

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
>


Anyone help me with understanding why?

Thanks! Brian

-

Though ridge regression looks at first like simple algorithm the devil is in the details. Apparently original variables are scaled, and parameter $\lambda$ is not the parameter you would think it is given the original description. From what I gathered reading the reference given in R help page of lm.ridge there is no one agreed way of doing ridge regression. So the difference in results can only be explained by different algorithms used by R and SAS. Hopefully someone more knowledgeable can give more detailed answer.
You can see what kind of algorithm is applied in R by looking at the source of lm.ridge. Just type lm.ridge in the R prompt.