Warum erhalte ich unterschiedliche Vorhersagen für die manuelle Polynomerweiterung und die Verwendung der R- poly
Funktion?
set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()
# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)
# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)
Mein Versuch:
Es scheint ein Problem mit dem Abfangen zu sein, wenn ich das Modell mit dem Abfangen anpasse, dh nein
-1
im Modellformula
, die beiden Linien sind gleich. Aber warum sind die beiden Linien ohne den Achsenabschnitt unterschiedlich?Eine andere "Lösung" ist die Verwendung einer
raw
Polynomexpansion anstelle eines orthogonalen Polynoms. Wenn wir den Code in ändernfit2 = lm(y~ poly(x,degree=2, raw=T) -1)
, werden 2 Zeilen gleich. Aber wieso?
r
regression
polynomial
Haitao Du
quelle
quelle
=
und<-
für die Zuordnung inkonsistent verwenden. Ich würde das wirklich nicht tun, es ist nicht gerade verwirrend, aber es fügt Ihrem Code viel visuelles Rauschen hinzu, ohne dass dies von Vorteil ist. Sie sollten sich für das eine oder andere entscheiden, um es in Ihrem persönlichen Code zu verwenden, und sich einfach daran halten.<-
Eingabe zu vereinfachen :alt+-
.Antworten:
Wie Sie richtig bemerken, besteht der ursprüngliche Unterschied darin, dass Sie im ersten Fall die "rohen" Polynome verwenden, während Sie im zweiten Fall die orthogonalen Polynome verwenden. Wenn also der spätere
lm
Aufruf in geändertfit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
würde : würden wir die gleichen Ergebnisse zwischenfit
und erhaltenfit3
. Der Grund, warum wir in diesem Fall die gleichen Ergebnisse erzielen, ist "trivial"; Wir passen genau das gleiche Modell wie wirfit<-lm(y~.-1,data=x_exp)
, keine Überraschungen.Man kann leicht überprüfen, ob die Modellmatrizen der beiden Modelle gleich sind
all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE
.Interessanter ist, warum Sie bei Verwendung eines Abschnitts dieselben Diagramme erhalten. Das Erste, was Sie bemerken müssen, ist, dass Sie ein Modell mit einem Achsenabschnitt versehen
Im Fall von verschieben
fit2
wir einfach die Modellvorhersagen vertikal; Die tatsächliche Form der Kurve ist dieselbe.Auf der anderen Seite führt das Einschließen eines Abschnitts bei
fit
Ergebnissen nicht nur zu einer anderen Linie in Bezug auf die vertikale Platzierung, sondern insgesamt zu einer ganz anderen Form.Wir können dies leicht erkennen, indem wir einfach die folgenden Anpassungen an das vorhandene Diagramm anhängen.
OK ... Warum waren die No-Intercept-Anpassungen unterschiedlich, während die Intercept-Inclusive-Anpassungen gleich sind? Der Haken ist wieder unter der Orthogonalitätsbedingung.
Wenn
fit_b
die verwendete Modellmatrix nicht orthogonale Elemente enthält, ist die Gram-Matrixcrossprod( model.matrix(fit_b) )
weit von der Diagonale entfernt. im Fallfit2_b
der Elemente sind orthogonal (crossprod( model.matrix(fit2_b) )
ist effektiv diagonal).Als solches habenXTX
fit
wir im Fall, wenn wir es erweitern, um einen Achsenabschnittfit_b
einzuschließen, die nicht diagonalen Einträge der Gram-Matrix geändert, und daher ist die resultierende Anpassung im Vergleich insgesamt unterschiedlich (unterschiedliche Krümmung, Achsenabschnitt usw.) mit der Passform von . Im Falle von obwohl , wenn wir es erweitern einen Schnittpunkt zu schließen , wie in wir nur eine Spalte anhängen, die den Spalten bereits orthogonal wir hatten, ist die Rechtwinkligkeit gegen das konstante Polynom vom Grad 0 . Dies führt einfach dazu, dass unsere angepasste Linie durch den Achsenabschnitt vertikal verschoben wird. Aus diesem Grund sind die Darstellungen unterschiedlich.fit
fit2
fit2_b
Die interessante Nebenfrage ist, warum die
fit_b
undfit2_b
die gleichen sind; Immerhin sind die Modellmatrizen vonfit_b
und im Nennwertfit2_b
nicht gleich . Hier müssen wir uns letztendlich nur daran erinnern und die gleichen Informationen haben. ist nur eine lineare Kombination der so im Wesentlichen ihre resultierenden Anpassungen werden gleich sein. Die im angepassten Koeffizienten beobachteten Unterschiede spiegeln die lineare Rekombination der Werte von wider , um sie orthogonal zu erhalten. (Siehe auch G. Grothendieck Antwort hier für ein anderes Beispiel.)fit_b
fit2_b
fit2_b
fit_b
fit_b
quelle