Ich habe die Beschreibung der Kammregression in Applied Linear Statistical Models , 5. Ausgabe, Kapitel 11, gelesen . Die Kammregression wird anhand der hier verfügbaren Körperfettdaten durchgeführt .
Das Lehrbuch entspricht der Ausgabe in SAS, wobei die rücktransformierten Koeffizienten im angepassten Modell wie folgt angegeben werden:
Dies wird von SAS wie folgt angezeigt:
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
Aber R gibt sehr unterschiedliche Koeffizienten:
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
>
Kann mir jemand helfen zu verstehen warum?
r
sas
ridge-regression
B_Miner
quelle
quelle
Antworten:
Obwohl die Gratregression zunächst wie ein einfacher Algorithmus aussieht, steckt der Teufel im Detail. Anscheinend sind Originalvariablen skaliert und Parameterλ ist nicht der Parameter, von dem Sie denken, dass er die ursprüngliche Beschreibung enthält. Nach dem, was ich beim Lesen der Referenz auf der R-Hilfeseite zusammengetragen habe,
lm.ridge
gibt es keinen vereinbarten Weg, eine Gratregression durchzuführen. Der Unterschied in den Ergebnissen kann daher nur durch unterschiedliche Algorithmen erklärt werden, die von R und SAS verwendet werden. Hoffentlich kann jemand, der besser informiert ist, eine detailliertere Antwort geben.Sie können sehen, welche Art von Algorithmus in R angewendet wird, indem Sie sich die Quelle von ansehen
lm.ridge
. Geben Sie einfachlm.ridge
die Eingabeaufforderung R ein.quelle
Die Verwendung von lm.ridge erzeugt auch einen Skalierungsvektor (versuchen Sie head (Modell), um die gesamte Ausgabe zu sehen). Um die vorhergesagten Werte in R zu erhalten, die Sie in SAS sehen, nehmen Sie die Koeffizienten und dividieren Sie sie durch den Skalarvektor.
quelle