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ändert fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
würde : würden wir die gleichen Ergebnisse zwischen fit
und erhalten fit3
. Der Grund, warum wir in diesem Fall die gleichen Ergebnisse erzielen, ist "trivial"; Wir passen genau das gleiche Modell wie wir fit<-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.
fit_b<-lm(y~. ,data=x_exp)
yp=predict(fit_b,xp_exp)
lines(xp,yp, col='green', lwd = 2)
fit2_b<-lm(y~ poly(x,degree=2, raw = FALSE) )
yp=predict(fit2_b,data.frame(x=xp))
lines(xp,yp,col='blue')
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-Matrix crossprod( model.matrix(fit_b) )
weit von der Diagonale entfernt. im Fall fit2_b
der Elemente sind orthogonal ( crossprod( model.matrix(fit2_b) )
ist effektiv diagonal).
Als solches haben fit
wir im Fall, wenn wir es erweitern, um einen Achsenabschnitt fit_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.XTXfit
fit2
fit2_b
Die interessante Nebenfrage ist, warum die fit_b
und fit2_b
die gleichen sind; Immerhin sind die Modellmatrizen von fit_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
=
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.