Як ви правильно зазначаєте, первісна різниця полягає в тому, що в першому випадку ви використовуєте «сирі» многочлени, а в другому - ортогональні многочлени. Тому, якщо пізній 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) )
фактично діагональними).
fit
fit_b
XTXfit
fit2
fit2_b
Цікаве побічне запитання , чому fit_b
та fit2_b
і те саме; зрештою, матриці моделі з fit_b
і fit2_b
не однакові за номіналом . Тут нам просто потрібно пам’ятати про це в кінцевому підсумку fit_b
і fit2_b
мати ту саму інформацію. fit2_b
є лише лінійною комбінацією, fit_b
тому по суті їхні пристосування будуть однакові. Відмінність, що спостерігається в примірному коефіцієнті, відображає лінійну рекомбінацію значень для fit_b
того, щоб отримати їх ортогональними. (див. відповідь Г. Гротендіка тут також для іншого прикладу.)
=
та<-
для виконання завдань непослідовно. Я справді цього не робив би, це не зовсім заплутано, але це додає багато візуального шуму у ваш код без користі. Ви повинні влаштуватися на той чи інший, щоб використовувати його в особистому коді, і просто дотримуватися його.