Jak słusznie zauważasz, oryginalna różnica polega na tym, że w pierwszym przypadku używasz „surowych” wielomianów, podczas gdy w drugim przypadku używasz wielomianów ortogonalnych. Dlatego jeśli późniejsze lmwywołanie zostanie zmienione na: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)uzyskalibyśmy te same wyniki między fiti fit3. Powodem, dla którego uzyskujemy te same wyniki w tym przypadku jest „trywialny”; dopasowujemy dokładnie ten sam model, w który go wyposażyliśmy fit<-lm(y~.-1,data=x_exp), bez niespodzianek.
Można łatwo sprawdzić, czy macierze modeli dwóch modeli są takie same all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE).
Bardziej interesujące jest to, dlaczego otrzymujesz te same wykresy podczas korzystania z przechwytywania. Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że podczas dopasowywania modelu do punktu przecięcia
W przypadku fit2po prostu przesuwamy prognozy modelu w pionie; rzeczywisty kształt krzywej jest taki sam.
Z drugiej strony, w tym przechwytywanie w przypadku fit wyników w nie tylko inną linię pod względem położenia pionowego, ale ogólnie o zupełnie innym kształcie.
Możemy to łatwo zauważyć, po prostu dodając następujące pasowania do istniejącej działki.
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 ... Dlaczego pasowania bez przechwytywania były różne, a pasowania z włączeniem przechwytywania są takie same? Połów jest ponownie w stanie ortogonalności.
W przypadku fit_bzastosowanej matrycy modelowej zawierającej elementy nieortogonalne matryca Gram crossprod( model.matrix(fit_b) )jest daleka od przekątnej; w przypadkufit2_b elementów są ortogonalne ( crossprod( model.matrix(fit2_b) )efektywnie przekątna).
fitfit_b XT.Xfitfit2fit2_b
Ciekawym pytaniem jest, dlaczego fit_bi fit2_bsą takie same; po wszystkich matrycach modelu z wartości nominalnychfit_b i fit2_bnie są one takie same . Tutaj musimy tylko pamiętać o tym i mieć te same informacje. jest po prostu liniową kombinacją, więc zasadniczo ich dopasowania będą takie same. Różnice obserwowane w dopasowanym współczynniku odzwierciedlają liniową rekombinację wartości w celu uzyskania ich prostopadłości. (patrz G. Grothendieck odpowiedź tutaj też na innym przykładzie.)fit_bfit2_bfit2_bfit_bfit_b
=i<-do przypisywania niekonsekwentnie. Naprawdę nie zrobiłbym tego, nie jest to do końca mylące, ale dodaje dużo wizualnego szumu do twojego kodu bez żadnej korzyści. Powinieneś zdecydować się na jeden lub drugi, aby użyć w swoim osobistym kodzie, i po prostu trzymaj się go.