Як ви правильно зазначаєте, первісна різниця полягає в тому, що в першому випадку ви використовуєте «сирі» многочлени, а в другому - ортогональні многочлени. Тому, якщо пізній lmвиклик було змінено: fit3<-lm(y~ poly(x,degree=2, raw = TRUE) -1)ми отримаємо однакові результати між fitі fit3. Причина, чому ми отримуємо однакові результати в даному випадку, - «тривіальна»; ми підходимо до тієї самої моделі, що і ми fit<-lm(y~.-1,data=x_exp), і сюрпризів немає.
Можна легко перевірити, що матриці моделей у двох моделей однакові all.equal( model.matrix(fit), model.matrix(fit3) , check.attributes= FALSE) # TRUE).
Що цікавіше - це те, що ви отримаєте однакові сюжети, використовуючи перехоплення. Перше, що слід помітити, це те, що при встановленні моделі з перехопленням
У випадку, коли fit2ми просто рухаємо прогнози моделі вертикально; фактична форма кривої однакова.
З іншого боку, включаючи перехоплення у разі fitрезультатів, виходить не тільки інша лінія з точки зору вертикального розміщення, але і цілком інша форма в цілому.
Ми легко можемо побачити, що просто додавши наступні сюжети до існуючого сюжету.
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')

Гаразд ... Чому приступи без перехоплення відрізнялися, тоді як підходи для перехоплення - однакові? Улов знову на умові ортогональності.
У випадку, fit_bколи використовувана матриця моделі містить неортогональні елементи, матриця Грама crossprod( model.matrix(fit_b) )далеко не діагональна; у випадку fit2_bелементів є ортогональними ( crossprod( model.matrix(fit2_b) )фактично діагональними).
fitfit_b XTXfitfit2fit2_b
Цікаве побічне запитання , чому fit_bта fit2_bі те саме; зрештою, матриці моделі з fit_bі fit2_bне однакові за номіналом . Тут нам просто потрібно пам’ятати про це в кінцевому підсумку fit_bі fit2_bмати ту саму інформацію. fit2_bє лише лінійною комбінацією, fit_bтому по суті їхні пристосування будуть однакові. Відмінність, що спостерігається в примірному коефіцієнті, відображає лінійну рекомбінацію значень для fit_bтого, щоб отримати їх ортогональними. (див. відповідь Г. Гротендіка тут також для іншого прикладу.)
=та<-для виконання завдань непослідовно. Я справді цього не робив би, це не зовсім заплутано, але це додає багато візуального шуму у ваш код без користі. Ви повинні влаштуватися на той чи інший, щоб використовувати його в особистому коді, і просто дотримуватися його.