J'ai lu la description de la régression des crêtes dans Applied Linear Statistical Models , 5e Ed chapitre 11. La régression des crêtes est effectuée sur les données de graisse corporelle disponibles ici .
Le manuel correspond à la sortie dans SAS, où les coefficients transformés en arrière sont donnés dans le modèle ajusté comme:
Ceci est montré par SAS comme:
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
Mais R donne des coefficients très différents:
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
>
Quelqu'un peut-il m'aider à comprendre pourquoi?
r
sas
ridge-regression
B_Miner
la source
la source
Réponses:
Bien que la régression de crête ressemble d'abord à un algorithme simple, le diable est dans les détails. Les variables apparemment originales sont mises à l'échelle et les paramètresλ n'est pas le paramètre auquel on pourrait penser qu'il est donné la description d'origine. D'après ce que j'ai recueilli en lisant la référence donnée dans la page d'aide de R,
lm.ridge
il n'y a pas une seule façon convenue de faire une régression de crête. Ainsi, la différence de résultats ne peut être expliquée que par différents algorithmes utilisés par R et SAS. J'espère que quelqu'un de plus compétent pourra donner une réponse plus détaillée.Vous pouvez voir quel type d'algorithme est appliqué dans R en regardant la source de
lm.ridge
. Tapez simplementlm.ridge
l'invite R.la source
L'utilisation de lm.ridge produit également un vecteur de mise à l'échelle (essayez head (modèle) pour voir toutes les sorties). Pour obtenir les valeurs prédites dans R que vous voyez dans SAS, prenez les coefficients et divisez-les par le vecteur scalaire.
la source