Сира чи ортогональна поліноміальна регресія?


22

Я хочу повернути змінну на x , x 2 , , x 5 . Чи слід це робити за допомогою сирих або ортогональних многочленів? Я переглянув питання на сайті, яке займається цим, але я не розумію, в чому різниця між їх використанням. yx,x2,,x5

Чому я не можу просто зробити «нормальний» регресії , щоб отримати коефіцієнти в у = Е 5 я = 0 β я х яβiy=i=05βixi (разом з р-значення і всі інші хороший матеріал) , а замість цього доведеться турбуватися чи використання сирі чи ортогональні многочлени? Мені здається, цей вибір виходить за рамки того, що я хочу зробити.

У статистичній книзі, яку я зараз читаю (ISLR Tibshirani et al), ці речі не згадувалися. Насправді вони були знецінені певним чином.
Причина полягає в тому, що AFAIK у lm()функції в R використовує y ~ poly(x, 2)суми до використання ортогональних многочленів і використовує y ~ x + I(x^2)суми до використання сирих. Але на стор. 116 автори кажуть, що ми використовуємо перший варіант, оскільки останній є "громіздким", що не дає жодних ознак того, що ці команди насправді є абсолютно різними речами (і як результат мають різні результати).
(третє запитання) Чому автори ISLR плутають своїх читачів так?


1
@Sycorax Я знаю, що polyмає відношення до ортогональних многочленів, і я (x ^ 2) не знає (хоча я не знаю деталей) - але все ж, чому б тоді автори ISLR рекомендували метод, який не працює ? Це здається дуже оманливим, якщо обидві команди, здається, роблять те саме, але лише одна насправді в порядку.
l7ll7

1
@gung Я переглянув документацію polyі провів уже деякий час з цією проблемою, але не можу зрозуміти, чому полі (x, 2) і x + I (x ^ 2) мають значення? Чи можете ви, будь ласка, просвітити мене тут у коментарях, якщо питання є офтопічним?
l7ll7

1
@gung Я повністю змінив своє запитання. Цей сирий / ортогональний вибір мене бентежить ще більше - раніше я думав, що це лише незначна Rтехнічність, яку я не розумію, але зараз це здається повноцінною проблемою стат, яка заважає мені робити кодування регресії, яка не повинна бути що важко кодувати.
l7ll7

2
@gung Це насправді збентежило мене більше, ніж допомогло. Раніше я думав, що я повинен просто йти з ортогональними многочленами, тому що це здавалося правильним шляхом, але в цій відповіді використовуються необроблені многочлени. Як не дивно, всі в мережі кричать "RTFM", але насправді немає чіткої відповіді, коли використовувати що. (Ваше посилання також не дає відповіді на це, лише приклад, коли orth. Pol.
Йде

2
Якщо ви не працюєте в якійсь фізичній або інженерній галузі, яка заявляє, що відповідь буде химерним многочленом, майже напевно правильним підходом є не робити поліноміальної регресії в першу чергу. Вкладіть свої рівні свободи в шліц або щось таке, що було б набагато гнучкішим і стабільнішим, ніж полінома.
качан

Відповіді:


10

Я вважаю, що відповідь менше стосується чисельної стабільності (хоча це відіграє певну роль), а більше - зниження кореляції.

По суті - питання зводиться до того, що коли ми регресуємо над купою поліномів високого порядку, коваріати, проти яких ми регресуємо, стають сильно корельованими. Приклад нижче:

x = rnorm(1000)
raw.poly = poly(x,6,raw=T)
orthogonal.poly = poly(x,6)
cor(raw.poly)
cor(orthogonal.poly)

Це надзвичайно важливо. У міру того, як коваріати стають більш співвіднесеними, наша здатність визначати, які важливі (і який розмір їх наслідків) швидко руйнується. Зазвичай це називається проблемою мультиколінеарності. На межі, якщо у нас були дві змінні, які були повністю співвіднесені, коли ми регресуємо їх проти чогось, неможливо розрізнити між ними - ви можете вважати це як крайній варіант проблеми, але ця проблема впливає на наші оцінки менший ступінь кореляції. Таким чином, у реальному розумінні - навіть якщо числова нестабільність не була проблемою - співвідношення поліномів вищого порядку завдає величезної шкоди нашим підпрограм. Це виявиться як більші стандартні помилки (і, таким чином, менші t-статистики), які ви в іншому випадку бачите (див. Приклад регресії нижче).

y = x*2 + 5*x**3 - 3*x**2 + rnorm(1000)
raw.mod = lm(y~poly(x,6,raw=T))
orthogonal.mod = lm(y~poly(x,6))
summary(raw.mod)
summary(orthogonal.mod)

Якщо ви користуєтесь цим кодом, інтерпретація є важкою на дотик, тому що коефіцієнти змінюються, і тому речі важко порівняти. Однак, дивлячись на T-статистику, ми можемо побачити, що здатність визначати коефіцієнти була значно більша за ортогональні многочлени. Для трьох відповідних коефіцієнтів я отримав t-статистику (560,21,449) для ортогональної моделі, і лише (28, -38,121) для необробленої поліноміальної моделі. Це величезна різниця для простої моделі з лише кількома відносно низькими поліноміальними членами, які мали значення.

Це не означає, що це відбувається без витрат. Майте на увазі дві основні витрати. 1) ми втрачаємо деяку інтерпретацію за допомогою ортогональних многочленів. Ми можемо зрозуміти, що x**3означає коефіцієнт , але інтерпретувати коефіцієнт на x**3-3x(третій герміт полі - не обов'язково, що ви будете використовувати) може бути набагато складніше. По-друге - коли ми говоримо, що це многочлени ортогональні - ми маємо на увазі, що вони є ортогональними щодо деякої міри відстані. Вибрати відстань, яка відповідає вашій ситуації, може бути складно. Однак, сказавши це, я вважаю, що polyфункція призначена для вибору такої, щоб вона була ортогональною щодо коваріації - що корисно для лінійних регресій.


3
-1. Більші стандартні помилки, які ви бачите на коефіцієнтах нижчого порядку, - це червона оселедець. Коефіцієнти нижчого порядку у ваших двох моделях оцінюють абсолютно різні речі, тому порівнювати їх стандартні помилки немає сенсу. Коефіцієнт вищого порядку - єдиний, що оцінює одне й те саме в обох моделях, і ви побачите, що t-статистика однакова, чи є многочлени ортогональними чи ні. Ваші дві моделі є статистично еквівалентними з точки зору встановлених значень, R ^ 2 і т. Д., Вони відрізняються в основному лише інтерпретацією коефіцієнтів
Джейк

@JakeWestfall, я не думаю, що я з вами згоден. Перш за все, запуск коду створює значення, які є різними для всіх порядків поліномів, а не для всіх, крім одного - по суті, він приймає поліном і робить PCA на ньому. По-друге, і що ще важливіше, t-статистика суттєво відрізняється - запуск коду у моїй відповіді підтвердить це - ми функціонально вирішуємо проблему мультиколінеарності. Ви маєте рацію, що встановлені значення, R ^ 2, F-тести тощо не змінюються. Це насправді є причиною ортогоналізації - це нічого не змінює, окрім нашої здатності виявляти поліноміальні терміни .
користувач5957401

1
Re: перший пункт, вибачте, я мав на увазі посилання t-stat терміну найвищого порядку, а не його коефіцієнт. Цей прогноктор масштабується + зміщується між моделями, так, так, кофе змінюється, але він випробовує той же змістовний ефект, як показав t
Джейк

Щодо другого моменту, причина "t-статистика суттєво відрізняється" для термінів нижчого порядку - це знову ж таки тому, що вони оцінюють абсолютно різні речі в двох моделях. Розглянемо лінійний ефект: вraw.mod ньому оцінюється нахил кривої на x = 0, в orthogonal.modній оцінюється граничний нахил (тобто ідентичний тому, lm(y ~ poly(x,1))де опущені умови вищого порядку). Немає причин, що оцінки цих абсолютно різних оцінок повинні мати порівнянні стандартні помилки. Можна легко сконструювати зустрічний приклад, де raw.modє набагато більші статистичні дані
Джейк

@JakeWestfall. Я все ще думаю, що вам не вистачає багатоколірності. Однак ми, здається, розмовляємо один з одним, і можливо, є рішення. Ви кажете, що можете легко побудувати зустрічний приклад, будь ласка. Я думаю, що бачення dgp, яке ви маєте на увазі, для мене багато що прояснить. На даний момент єдині речі, які мені вдалося придумати, які можуть поводитись, як ви описуєте, стосуються суворої помилки моделі.
користувач5957401

8

Чому я не можу просто зробити "нормальну" регресію, щоб отримати коефіцієнти?

0.40.4000000059604644775390625

Використання неочищеного многочлену спричинить проблеми, оскільки у нас їх буде величезна кількість. Ось невеликий доказ: ми порівнюємо число умови матриці з сирим та ортогональним многочленом.

> kappa(model.matrix(mpg~poly(wt,10),mtcars))
[1] 5.575962
> kappa(model.matrix(mpg~poly(wt,10, raw = T),mtcars))
[1] 2.119183e+13

Ви також можете перевірити мою відповідь тут для прикладу.

Чому існують великі коефіцієнти для поліномів вищого порядку


6
Ви, здається, використовуєте одиночні точні поплавці і цитуєте їх, щоб вчетверо влучити! Як це сталося? За винятком GPU, майже всі статистичні обчислення використовують щонайменше подвійну точність. Наприклад, у Rвиході print(0.4, digits=20)є 0.40000000000000002.
whuber

6

Я відчуваю, що кілька з цих відповідей повністю пропускають суть. Відповідь Хайтао стосується обчислювальних проблем із встановленням сирих поліномів, але зрозуміло, що ОП запитує про статистичні відмінності між двома підходами. Тобто, якщо ми мали ідеальний комп’ютер, який міг би точно представляти всі значення, то чому б ми віддавали перевагу одному підходу над іншим?

R2XYX=0X=0X

data("iris")

#Raw:
fit.raw <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
summary(fit.raw)

#> Coefficients:
#>                  Estimate Std. Error t value Pr(>|t|)    
#> (Intercept)        1.1034     0.1304   8.464 2.50e-14 ***
#> Petal.Width        1.1527     0.5836   1.975  0.05013 .  
#> I(Petal.Width^2)   1.7100     0.5487   3.116  0.00221 ** 
#> I(Petal.Width^3)  -0.5788     0.1408  -4.110 6.57e-05 ***
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> Residual standard error: 0.3898 on 146 degrees of freedom
#> Multiple R-squared:  0.9522, Adjusted R-squared:  0.9512 
#> F-statistic: 969.9 on 3 and 146 DF,  p-value: < 2.2e-16

#Orthogonal
fit.orth <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), data = iris)

#Marginal effect of X at X=0 from orthogonal model
library(margins)
summary(margins(fit.orth, variables = "Petal.Width", 
                at = data.frame(Petal.Width = 0)))
#> Warning in check_values(data, at): A 'at' value for 'Petal.Width' is
#> outside observed data range (0.1,2.5)!
#>       factor Petal.Width    AME     SE      z      p  lower  upper
#>  Petal.Width      0.0000 1.1527 0.5836 1.9752 0.0482 0.0089 2.2965

Створено 2019-10-25 пакетом reprex (v0.3.0)

Граничний ефект Petal.Width0 при ортогональному приляганні та його стандартна похибка точно рівні ефекту від необробленого полінома. Використання ортогональних многочленів не покращує точність оцінок однакової кількості між двома моделями.

YXYX

library(jtools)
data("iris")

fit.raw3 <- lm(Petal.Length ~ Petal.Width + I(Petal.Width^2) +
                  I(Petal.Width^3), data = iris)
fit.raw1 <- lm(Petal.Length ~ Petal.Width, data = iris)

round(summ(fit.raw3, part.corr = T)$coef, 3)
#>                    Est.  S.E. t val.     p partial.r part.r
#> (Intercept)       1.103 0.130  8.464 0.000        NA     NA
#> Petal.Width       1.153 0.584  1.975 0.050     0.161  0.036
#> I(Petal.Width^2)  1.710 0.549  3.116 0.002     0.250  0.056
#> I(Petal.Width^3) -0.579 0.141 -4.110 0.000    -0.322 -0.074

round(summ(fit.raw1, part.corr = T)$coef, 3)
#>              Est.  S.E. t val. p partial.r part.r
#> (Intercept) 1.084 0.073 14.850 0        NA     NA
#> Petal.Width 2.230 0.051 43.387 0     0.963  0.963

fit.orth3 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3), 
               data = iris)
fit.orth1 <- lm(Petal.Length ~ stats::poly(Petal.Width, 3)[,1], 
               data = iris)

round(summ(fit.orth3, part.corr = T)$coef, 3)
#>                                Est.  S.E.  t val. p partial.r part.r
#> (Intercept)                   3.758 0.032 118.071 0        NA     NA
#> stats::poly(Petal.Width, 3)1 20.748 0.390  53.225 0     0.975  0.963
#> stats::poly(Petal.Width, 3)2 -3.015 0.390  -7.735 0    -0.539 -0.140
#> stats::poly(Petal.Width, 3)3 -1.602 0.390  -4.110 0    -0.322 -0.074

round(summ(fit.orth1, part.corr = T)$coef, 3)
#>                                    Est.  S.E. t val. p partial.r part.r
#> (Intercept)                       3.758 0.039 96.247 0        NA     NA
#> stats::poly(Petal.Width, 3)[, 1] 20.748 0.478 43.387 0     0.963  0.963

Створено 2019-10-25 пакетом reprex (v0.3.0)

0,0010.0030.0050.9270.9270.0200.0050,927. З ортогональної поліноміальної моделі, але не з необробленої поліноміальної моделі, ми знаємо, що більшість дисперсій, пояснених у результаті, обумовлені лінійним членом, причому дуже мало йде від квадратного члена, а ще менше - від кубічного. Сирі значення полінома не розповідають про цю історію.

Тепер, якщо ви хочете, щоб ця інтерпретаційна вигода над міжособистісною користю насправді була здатна зрозуміти коефіцієнти моделі, тоді вам слід використовувати ортогональні многочлени. Якщо ви хочете подивитися на коефіцієнти і точно знати, що вони означають (хоча, я сумніваюсь, це так і є), тоді ви повинні використовувати неочищені многочлени. Якщо вам все одно (тобто ви хочете контролювати лише плутанину або генерувати передбачувані значення), то це справді не має значення; обидві форми несуть однакову інформацію стосовно цих цілей. Я також заперечую, що ортогональним поліномам слід віддати перевагу при регуляризації (наприклад, ласо), оскільки видалення термінів вищого порядку не впливає на коефіцієнти термінів нижчого порядку, що не відповідає правилам поліномів,


1
Відмінний внесок. Я не можу повторити ваші граничні результати (функція маржингу з'являється помилка щодо полі, коли я намагаюся запустити ваш перший блок коду - я не знайомий з пакетом маржі) - але вони є саме такими, на які я очікую. Як невелика пропозиція - ви повинні включити висновок аналізу маржі на сировинну модель. Ваш аргумент підривається (злегка) зміною р-значень від підсумкових до маржинальних функцій (змінюючи наші висновки не менше!) - що, мабуть, викликано використанням нормальної замість при розподілі. Ваша точка регуляризації відмінна.
користувач5957401

1
Дякую за добрі слова. Я думаю , ви повинні включати stats::у виклику poly()в lm()протягом marginsвизнати його (що нерозумно). Я хотів зосередити свою аргументацію на точкових оцінках та стандартних помилках, і я знаю, що представлено багато сторонньої та відволікаючої інформації, але, сподіваюся, текст ілюструє мої моменти.
Ной

Це не все. Я точно скопіював ваш код, і ви використовуєте stats::poly(). Помилка говорить 'degree' must be less than number of unique points- що мені не дуже допомагає. Проте, margin()є резервним копіюванням доказових заяв , так що це не важливо.
користувач5957401

4

Я підтверджую відмінну відповідь від @ user5957401 та додаю коментарі щодо інтерполяції, екстраполяції та звітності.

Навіть у області стабільних значень параметрів коефіцієнти / параметри, змодельовані ортогональними поліномами, матимуть значно менші стандартні помилки, ніж коефіцієнти / параметри, змодельовані необробленими параметрами. По суті, ортогональні многочлени - це вільний набір дескрипторів нульової коваріації. Це PCA безкоштовно!

Єдиним потенційним недоліком є ​​пояснення цього тому, хто не розуміє чесноти дескрипторів нульової коваріації. Коефіцієнти не можна відразу інтерпретувати в контексті ефектів першого порядку (подібних швидкості) або другого порядку (подібних до прискорення). Це може бути досить жалюгідним у бізнес-умовах.

У швидкому моделюванні з поліномом градуса 5, N = 1000 балів, випадкові значення параметрів (зменшені на 10-г щоб зберегти змінну відповіді в межах 2 порядків) і некорельований шум половина загальної варіації змінної відповіді, R2Дві моделі були однаковими. Так само булоагj R2's. Прогностична сила однакова. Але стандартні похибки значень параметрів для ортогональної моделі були рівними або порядками величини нижче необробленої моделі.

Тож я б "на порядок" впевненіше повідомляв ортогональну модель, ніж сирий. На практиці я б інтерполював будь-яку модель, але екстраполював би лише ортогональну.


1

Я б просто прокоментував це, щоб згадати це, але мені не вистачає респ, тому я спробую розгорнутись у відповідь. Можливо, вам буде цікаво побачити, що в розділі 7.8.1 лабораторії "Введення в статистичне навчання" (James et al., 2017, виправлений 8-й друк) вони обговорюють деякі відмінності між використанням ортогональних поліномів чи ні, для чого використовується raw=TRUEабо raw=FALSEу poly()функції. Наприклад, оцінка коефіцієнта зміниться, але встановлені значення не:

# using the Wage dataset in the ISLR library
fit1 <- lm(wage ~ poly(age, 4, raw=FALSE), data=Wage)
fit2 <- lm(wage ~ poly(age, 4, raw=TRUE), data=Wage)
print(coef(fit1)) # coefficient estimates differ
print(coef(fit2))
all.equal(predict(fit1), predict(fit2)) #returns TRUE    

У книзі також розповідається про те, як при використанні ортогональних поліномів р-значення, отримані за допомогою anova()вкладеного F-тесту (для дослідження того, який ступінь полінома може бути гарантованим), такі ж, як і отримані при використанні стандартного t-тесту, виведеного методом summary(fit). Це ілюструє, що F-статистика дорівнює квадрату t-статистики в певних ситуаціях.


Коментарі ніколи не повинні використовуватися як відповіді незалежно від вашої репутації.
Майкл Р. Черник

Що стосується вашої останньої точки, то це стосується і неортогональних многочленів. Коефіцієнт t-тесту дорівнює F-тесту, порівнюючи модель з коефіцієнтом в ній і модель без усіх коефіцієнтів регресії (взятих по одному).
Ной
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.