Чому я отримую різні передбачення щодо ручного розширення поліномів та використання функції R `poly`?


10

Чому я отримую різні прогнози щодо ручного розширення поліномів та використання функції R poly?

set.seed(0)
x <- rnorm(10)
y <- runif(10)
plot(x,y,ylim=c(-0.5,1.5))
grid()

# xp is a grid variable for ploting
xp <- seq(-3,3,by=0.01)
x_exp <- data.frame(f1=x,f2=x^2)
fit <- lm(y~.-1,data=x_exp)
xp_exp <- data.frame(f1=xp,f2=xp^2)
yp <- predict(fit,xp_exp)
lines(xp,yp)

# using poly function
fit2 <- lm(y~ poly(x,degree=2) -1)
yp <- predict(fit2,data.frame(x=xp))
lines(xp,yp,col=2)

введіть тут опис зображення

Моя спроба:

  • Мабуть, це проблема з перехопленням, коли я вписую модель з перехопленням, тобто ні, -1в моделі немає formula, дві лінії однакові. Але чому без перехоплення дві лінії різні?

  • Інша «фіксація» - це використання rawполіномального розширення замість ортогонального многочлена. Якщо ми змінимо код fit2 = lm(y~ poly(x,degree=2, raw=T) -1), зробимо 2 рядки однаковими. Але чому?


4
Це поза темою вашого питання, але ви часто дуже відкриті для коментарів. Читаючи свій код, перше, що я помічаю, це те, що ви використовуєте =та <-для виконання завдань непослідовно. Я справді цього не робив би, це не зовсім заплутано, але це додає багато візуального шуму у ваш код без користі. Ви повинні влаштуватися на той чи інший, щоб використовувати його в особистому коді, і просто дотримуватися його.
Метью Друрі

дякую, що допомогли мені в кодуванні! питання виправлено. @MatthewDrury
Хайтао Ду

3
Випадкове спостереження наконечник для виготовлення <-менше клопоту набрати: alt+-.
JAD

@JarkoDubbeldam дякую за кодування підказки. Я люблю клавіатурні скорочення
Хайтао Ду

Відповіді:


12

Як ви правильно зазначаєте, первісна різниця полягає в тому, що в першому випадку ви використовуєте «сирі» многочлени, а в другому - ортогональні многочлени. Тому, якщо пізній 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того, щоб отримати їх ортогональними. (див. відповідь Г. Гротендіка тут також для іншого прикладу.)


+2,5 спасибі за чудову відповідь. Підсумковий графік я дізнався з @kjetilb halvorsen: Ще один абстрактний спосіб опису цього полягає в тому, що сама модель залежить лише від певного лінійного підпростору, а саме простору стовпців, визначеного матрицею проектування. Але параметри залежать не тільки від цього підпростору, але і від основи для цього підпростору, заданої конкретними використовуваними змінними, тобто самими стовпцями. Наприклад, передбачення моделі, залежатимуть лише від лінійного підпростору, а не від обраної основи.
Хайтао Ду

сподіваюся, ви не заперечуєте, я трохи переформатував ..
Хайтао Ду

@ hxd1011: Зовсім ніяких проблем, дякую, що знайшли час, щоб трохи "розчесати".
usεr11852
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.