Поліноміальні контрасти для регресії


17

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

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

write=52.7870+14.2587X0.9680X20.1554X3,

де X має приймати значення 1 , , або відповідно до різного рівня змінної інтервалу.3 4234

Це правильно? І якщо так, то яка мета поліномічних контрастів?


7
Ні, ці коефіцієнти призначені для ортогональних многочленних термінів: ви написали модель для необроблених многочленних термінів. Замініть Х , Х2 і Х3 значеннями L , Q і С відповідно (з таблиці огляду).
Scortchi

1
Шановний @Scortchi, дякую за відповідь. Я здогадуюсь, щоб зрозуміти, що ти маєш на увазі, але тоді я чесно не зрозумів, як працюють ці ортогональні многочленні терміни. : P
Піппо

1
Як відомо, те, що у вас є, не зовсім підходить модель. Вам або потрібна гігантська «шапка» над записом (або E [write]), що означає передбачуване значення запису або очікуване значення запису; або вам знадобиться "+ e" в кінці, щоб вказати залишки.
gung - Відновіть Моніку

@Scortchi Що таке, або як ви можете знайти "таблицю пошуку"?
Антоні Пареллада

2
@AntoniParellada: Це таблиця на сторінці, на яку посилається ОП: ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL . І потрапив contr.polyу R.
Scortchi

Відповіді:


29

Просто для підбиття підсумків (і якщо гіперпосилання OP в майбутньому не вдасться), ми розглядаємо набір даних hsb2як такий:

   id     female race ses schtyp prog read write math science socst
1  70        0    4   1      1    1   57    52   41      47    57
2 121        1    4   2      1    3   68    59   53      63    61
...
199 118      1    4   2      1    1   55    62   58      58    61
200 137      1    4   3      1    2   63    65   65      53    61

які можна імпортувати сюди .

Перетворюємо змінну readв та впорядковану / порядкову змінну:

hsb2$readcat<-cut(hsb2$read, 4, ordered = TRUE)
(means = tapply(hsb2$write, hsb2$readcat, mean))
 (28,40]  (40,52]  (52,64]  (64,76] 
42.77273 49.97849 56.56364 61.83333 

Тепер все готово , щоб просто запустити регулярний ANOVA - так, це R, і ми в основному мають безперервну залежну змінну, writeі пояснювальну змінну з декількома рівнями, readcat. В R ми можемо використовуватиlm(write ~ readcat, hsb2)


1. Генерування контрастної матриці:

Для упорядкованої змінної є чотири різних рівня readcat, тому у нас буде контрасти.n1=3

table(hsb2$readcat)

(28,40] (40,52] (52,64] (64,76] 
     22      93      55      30 

Спершу давайте підемо за гроші і подивимось на вбудовану функцію R:

contr.poly(4)
             .L   .Q         .C
[1,] -0.6708204  0.5 -0.2236068
[2,] -0.2236068 -0.5  0.6708204
[3,]  0.2236068 -0.5 -0.6708204
[4,]  0.6708204  0.5  0.2236068

Тепер давайте розберемо, що сталося під кришкою:

scores = 1:4  # 1 2 3 4 These are the four levels of the explanatory variable.
y = scores - mean(scores) # scores - 2.5

y=[1.5,0.5,0.5,1.5]

seq_len(n) - 1=[0,1,2,3]

n = 4; X <- outer(y, seq_len(n) - 1, "^") # n = 4 in this case

[11.52.253.37510.50.250.12510.50.250.12511.52.253.375]

Що там сталося? outer(a, b, "^")піднімає елементи aдо елементам b, таким чином , що перші результати стовпців з операцій, , ( - 0,5 ) 0 , 0,5 0 і 1,5 0 ; другий стовпчик з ( - 1,5 ) 1 , ( - 0,5 ) 1 , 0,5 1 і 1,5 1 ; третій з ( - 1,5 ) 2 = 2,25(1.5)0(0.5)00.501.50(1.5)1(0.5)10.511.51(1.5)2=2.25, , 0,5 2 = 0,25 і 1,5 2 = 2,25 ; і четвертий, ( - 1,5 ) 3 = - 3,375 , ( - 0,5 ) 3 = - 0,125 , 0,5 3 = 0,125 і 1,5 3 = 3,375 .(0.5)2=0.250.52=0.251.52=2.25(1.5)3=3.375(0.5)3=0.1250.53=0.1251.53=3.375

Далі робимо ортонормальне розкладання цієї матриці і беремо компактне подання Q ( ). Деякі внутрішні функції функцій, що використовуються в QR-факторизації в R, використані в цій публікації, далі пояснюються тут .QRc_Q = qr(X)$qr

[202.500.52.23604.5840.50.447200.50.8940.92961.342]

... з яких ми зберігаємо тільки діагональ ( z = c_Q * (row(c_Q) == col(c_Q))). Що лежить в діагоналі: Просто "нижній" запис частини розкладу Q R. Просто? ну ні ... Виходить, що діагональ верхньої трикутної матриці містить власні значення матриці!RQR

Далі ми називаємо таку функцію:, raw = qr.qy(qr(X), z)результат якої можна повторити "вручну" двома операціями: 1. Перетворення компактної форми , тобто в Q , перетворення, яке можна досягти за допомогою , і 2. Проведення множення матриці Q z , як і в .Qqr(X)$qrQQ = qr.Q(qr(X))QzQ %*% z

Принципово, що множення на власні значення R не змінює ортогональність складових векторів стовпців, але, враховуючи, що абсолютне значення власних значень з'являється у порядку зменшення вгорі зліва вниз праворуч, множення Q z буде тенденцію до зменшення значення в поліноміальних стовпцях вищого порядку:QRQz

Matrix of Eigenvalues of R
     [,1]      [,2] [,3]      [,4]
[1,]   -2  0.000000    0  0.000000
[2,]    0 -2.236068    0  0.000000
[3,]    0  0.000000    2  0.000000
[4,]    0  0.000000    0 -1.341641

Порівняйте значення в більш пізніх векторів - стовпців (квадратичної і кубічної) до і після операцій факторізаціонних і незачеплених перших двох колонках.QR

Before QR factorization operations (orthogonal col. vec.)
     [,1] [,2] [,3]   [,4]
[1,]    1 -1.5 2.25 -3.375
[2,]    1 -0.5 0.25 -0.125
[3,]    1  0.5 0.25  0.125
[4,]    1  1.5 2.25  3.375


After QR operations (equally orthogonal col. vec.)
     [,1] [,2] [,3]   [,4]
[1,]    1 -1.5    1 -0.295
[2,]    1 -0.5   -1  0.885
[3,]    1  0.5   -1 -0.885
[4,]    1  1.5    1  0.295

Нарешті ми називаємо (Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))перетворення матриці rawна ортонормальні вектори:

Orthonormal vectors (orthonormal basis of R^4)
     [,1]       [,2] [,3]       [,4]
[1,]  0.5 -0.6708204  0.5 -0.2236068
[2,]  0.5 -0.2236068 -0.5  0.6708204
[3,]  0.5  0.2236068 -0.5 -0.6708204
[4,]  0.5  0.6708204  0.5  0.2236068

Ця функція просто "нормалізує" матрицю шляхом ділення ( "/") стовпців кожного елемента на . Таким чином, його можна розкласти в два етапи:(i), в результаті чого, це знаменники для кожного стовпця в(ii),де кожен елемент у стовпці ділиться на відповідне значення(i).col.xi2(i) apply(raw, 2, function(x)sqrt(sum(x^2)))2 2.236 2 1.341(ii)(i)

У цей момент вектори стовпців утворюють ортонормальну основу , поки ми не позбудемося першого стовпця, який буде перехопленням, і ми не відтворили результат :R4contr.poly(4)

[0.67082040.50.22360680.22360680.50.67082040.22360680.50.67082040.67082040.50.2236068]

Стовпці цієї матриці є ортонормальними , як це можна показати (sum(Z[,3]^2))^(1/4) = 1і z[,3]%*%z[,4] = 0, наприклад (до речі, те саме стосується рядків). І кожен стовпець є результатом підняття початкових до 1- ї, 2- ї та 3- ї потужності відповідно - тобто лінійної, квадратичної та кубічної .scores - mean123


2. Які контрасти (стовпці) суттєво сприяють поясненню відмінностей між рівнями пояснювальної змінної?

Ми можемо просто запустити ANOVA і подивитися підсумок ...

summary(lm(write ~ readcat, hsb2))

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  52.7870     0.6339  83.268   <2e-16 ***
readcat.L    14.2587     1.4841   9.607   <2e-16 ***
readcat.Q    -0.9680     1.2679  -0.764    0.446    
readcat.C    -0.1554     1.0062  -0.154    0.877 

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

coeff = coefficients(lm(write ~ readcat, hsb2))
C = contr.poly(4)
(recovered = c(coeff %*% c(1, C[1,]),
               coeff %*% c(1, C[2,]),
               coeff %*% c(1, C[3,]),
               coeff %*% c(1, C[4,])))
[1] 42.77273 49.97849 56.56364 61.83333

... або ...

enter image description here

... або набагато краще ...

enter image description here

Будучи ортогональних контрастів сума їх компонентів додає до нуля для через 1 , , через т константами, а скалярний добуток будь-яких двох з них дорівнює нулю. Якби ми могли їх уявити, вони виглядали б приблизно так:i=1tai=0a1,,at

enter image description here

X0,X1,.Xn

Графічно це зрозуміти набагато простіше. Порівняйте фактичні засоби за групами у великих квадратних чорних блоках з передбачуваними значеннями та подивіться, чому оптимальне прямолінійне наближення з мінімальним внеском квадратичних та кубічних многочленів (з кривими, лише апроксимованими з льосом):

enter image description here

Якби тільки для ефекту коефіцієнти ANOVA були настільки ж великими для лінійного контрасту для інших наближень (квадратичного та кубічного), наступний безглуздий графік більш чітко зображає поліноміальні ділянки кожного "внеску":

enter image description here

Код тут .


+1 Вау Чи можна цю відповідь (я до цього часу не читав її до кінця) розглядати як відповідь на моє давнє, забуте запитання: stats.stackexchange.com/q/63639/3277 ?
ttnphns

(+1) @ttnphns: Імовірно, він би там навіть краще вписався.
Scortchi

Лише підказка: ви можете прокоментувати мене там із посиланням на це; або надіслати відповідь там - яку я, швидше за все, прийму.
ttnphns

1
@ttnphns та @Scortchi Дякую! Я витратив досить багато часу, намагаючись зрозуміти ці поняття, і не очікував особливої ​​реакції. Тож це дуже позитивний сюрприз. Я думаю, що є якісь зморшки, які слід виправити у поясненні qr.qy()функції, але я обов'язково спробую зрозуміти, чи зможу я сказати щось мінімально узгоджене у вашому питанні, як тільки у мене з’явиться певний час.
Антоні Пареллада

1
@Elvis Я намагався вибрати хороший підсумкове речення і помістити його десь у дописі. Я думаю, що це хороший момент і вимагає приємного математичного пояснення, але, можливо, в цьому моменті буде занадто багато детального розробки.
Антоні Пареллада

5

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

Ешriте1=мк-0,67L+0,5Q-0,22СЕшriте2=мк-0,22L-0,5Q+0,67СЕшriте3=мк+0,22L-0,5Q-0,67СЕшriте4=мк+0,67L+0,5Q+0,22С

Where first equation works for the group of lowest reading scores and the fourth one for the group of best reading scores. we can compare these equations to the one given using normal linear regression (supposing readi is continous)

Ewritei=μ+readiL+rеагi2Q+rеагi3С

Зазвичай замість L,Q,С ти мав би β1,β2,β3і написано на першій позиції. Але це написання нагадує те, з поліноміальними контрастами. Так цифри передL,Q,С насправді замість rеагi,rеагi2,rеагi3. Ви можете бачити ці коефіцієнти ранішеL раніше лінійна тенденція Q квадратичний і раніше С куб.

Тоді R оцінює параметри мк,L,Q,С і дає вам

мк^=52,79,L^=14.26,Q^=-0,97,С^=-0,16
Де μ^=14i=14Ewritei and estimated coefficients μ^,L^,Q^,C^ are something like estimates at normal linear regression. So from the output you can see if estimated coefficients are significantly different from zero, so you could anticipate some kind of linear, quadratic or cubic trend.

In that example is significantly non-zero only L^. So your conclusion could be: We see that the better scoring in writing depends linearly on reading score, but there is no significant quadratic or cubic effect.

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