Come notate correttamente, la differenza originale è perché nel primo caso usate i polinomi "grezzi" mentre nel secondo caso usate i polinomi ortogonali. Pertanto se la lm
chiamata successiva fosse modificata in: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)
otterremmo gli stessi risultati tra fit
e fit3
. Il motivo per cui otteniamo gli stessi risultati in questo caso è "banale"; montiamo esattamente lo stesso modello che abbiamo montato fit<-lm(y~.-1,data=x_exp)
, senza sorprese lì.
Si può facilmente verificare che le matrici dei modelli dei due modelli siano uguali all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE
).
Ciò che è più interessante è il motivo per cui otterrai gli stessi grafici quando usi un'intercettazione. La prima cosa da notare è che, quando si monta un modello con un'intercettazione
Nel caso di fit2
spostare semplicemente le previsioni del modello in verticale; la forma effettiva della curva è la stessa.
D'altra parte, includendo un'intercettazione nel caso dei fit
risultati, non solo una linea diversa in termini di posizionamento verticale, ma con una forma completamente diversa nel complesso.
Possiamo facilmente vederlo aggiungendo semplicemente i seguenti adattamenti alla trama esistente.
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 ... Perché gli adattamenti senza intercettazione erano diversi mentre gli adattamenti con intercettazione erano uguali? La cattura è di nuovo sulla condizione di ortogonalità.
Nel caso della fit_b
matrice modello utilizzata contiene elementi non ortogonali, la matrice Gram crossprod( model.matrix(fit_b) )
è tutt'altro che diagonale; nel caso degli fit2_b
elementi sono ortogonali ( crossprod( model.matrix(fit2_b) )
è effettivamente diagonale).
Pertanto, nel caso in fit
cui lo espandiamo per includere un'intercettazione, fit_b
abbiamo modificato le voci off-diagonali della matrice Gram e quindi l'adattamento risultante è diverso nel suo complesso (diversa curvatura, intercetta, ecc.) A confronto con la vestibilità fornita da . Nel caso in cui, quando lo espandiamo per includere un'intercettazione come in appendichiamo solo una colonna che è già ortogonale alle colonne che avevamo, l'ortogonalità è contro il polinomio costante di grado 0 . Ciò si traduce semplicemente nello spostare verticalmente la nostra linea adattata dall'intercettazione. Questo è il motivo per cui le trame sono diverse.XTXfit
fit2
fit2_b
L'interessante domanda è perché fit_b
e fit2_b
sono gli stessi; dopo tutto le matrici del modello da fit_b
e fit2_b
non sono le stesse in valore nominale . Qui dobbiamo solo ricordare che alla fine fit_b
e fit2_b
avere le stesse informazioni. fit2_b
è solo una combinazione lineare di fit_b
così essenzialmente i loro adattamenti risultanti saranno gli stessi. Le differenze osservate nel coefficiente adattato riflettono la ricombinazione lineare dei valori fit_b
al fine di ottenerli ortogonali. (vedi la risposta di G. Grothendieck anche qui per un altro esempio.)
=
e<-
per l'assegnazione in modo incoerente. Non lo farei davvero, non è esattamente confuso, ma aggiunge un sacco di rumore visivo al tuo codice senza alcun vantaggio. Dovresti accontentarti dell'uno o dell'altro da utilizzare nel tuo codice personale e attenersi ad esso.