Diferencia entre la implementación de regresión de cresta en R y SAS

10

He estado leyendo la descripción de la regresión de crestas en los modelos estadísticos lineales aplicados , 5ª edición, capítulo 11. La regresión de crestas se realiza con los datos de grasa corporal disponibles aquí .

El libro de texto coincide con la salida en SAS, donde los coeficientes transformados hacia atrás se dan en el modelo ajustado como:

Y=7.3978+0.5553X1+0.3681X20.1917X3

Esto se muestra desde SAS como:

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

Pero R da coeficientes muy diferentes:

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 
> 

¿Alguien puede ayudarme a entender por qué?

B_Miner
fuente
He usado el mismo conjunto de datos y lo analicé en SPSS. Los resultados son similares a los de SAS. Sin embargo, si podemos estandarizar los datos como en el libro, el primer valor en c = 0 es similar en R y SPSS (ejecutando una regresión lineal múltiple). Sin embargo, los resultados son bastante diferentes cuando avanzamos más como se indicó anteriormente. Tampoco encontré ninguna pista de la diferencia entre salidas para los mismos datos.
asad

Respuestas:

6

Aunque la regresión de cresta se ve al principio como un algoritmo simple, el diablo está en los detalles. Aparentemente, las variables originales están escaladas, y el parámetro no es el parámetro que pensarías que se le da la descripción original. Por lo que reuní leyendo la referencia dada en la página de ayuda de R, no hay una forma acordada de hacer regresión de crestas. Entonces, la diferencia en los resultados solo puede explicarse por diferentes algoritmos utilizados por R y SAS. Esperemos que alguien más conocedor pueda dar una respuesta más detallada.λlm.ridge

Puede ver qué tipo de algoritmo se aplica en R mirando la fuente de lm.ridge. Simplemente escriba lm.ridgeel indicador R.

mpiktas
fuente
Encontré este enlace útil para descifrar cómo lm.ridge está calculando los coeficientes: mail-archive.com/[email protected]/msg81115.html Pero aún desconcertado cuán diferentes son los resultados del texto al que hice referencia y SAS , dado que supuestamente cada uno vuelve a la escala original.
B_Miner
@ user2040, verifique que SAS y R. utilicen los mismos datos. Si es el mismo, entonces la única conclusión es que los algoritmos son diferentes. ¿Qué dice la página de ayuda de SAS?
mpiktas
@ user2040, he replicado la regresión de cresta SAS en R con sus datos. Así que sabemos con certeza que los algoritmos son diferentes.
mpiktas
1
¡Me acabas de ganar! :) Estaba mirando la página de ayuda de SAS a la que hizo referencia. Comparé el RMSE (solo en los datos de la muestra, todavía no validé con un CV o bootstrap) y el resultado de R fue superior. Entonces, ¿cree que la regresión de cresta es más adecuada para la predicción y no para interpretar los coeficientes (ya que los resultados pueden ser tan diferente por algoritmo)? Ya sé que la teoría del modelo lineal regular (IC, contrastes, etc.) está fuera de la regresión de cresta (el arranque se acerca pero aún puede ser engañoso debido al sesgo).
B_Miner
0

El uso de lm.ridge también produce un vector de escala (pruebe head (modelo) para ver toda la salida). Para obtener los valores pronosticados en R que ve en SAS, tome los coeficientes y divídalos por el vector escalar.

Thomas
fuente
2
No obtengo ese resultado, ¿puedes ilustrar por favor?
B_Miner