Kontrasty wielomianowe dla regresji

17

Nie rozumiem użycia kontrastów wielomianowych w dopasowaniu regresji. W szczególności mam na myśli kodowanie stosowane Rw celu wyrażenia zmiennej interwałowej (zmienna porządkowa z równo rozmieszczonymi poziomami), opisanej na tej stronie .

W przykładzie tej strony , jeśli dobrze zrozumiałem, R pasuje do modelu zmiennej interwałowej, zwracając pewne współczynniki, które ważą jej liniowy, kwadratowy lub sześcienny trend. Dlatego dopasowanym modelem powinien być:

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

gdzie powinien przyjmować wartości , , lub zgodnie z innym poziomem zmiennej interwałowej.X1234

Czy to jest poprawne? A jeśli tak, to jaki był cel kontrastów wielomianowych?

Pippo
źródło
7
Nie, współczynniki te dotyczą ortogonalnych terminów wielomianowych: napisałeś model dla surowych terminów wielomianowych. Zamień , X 2 i X 3 odpowiednio na wartości L , Q i C (z tabeli przeglądowej). XX2X3LQC
Scortchi - Przywróć Monikę
1
Drogi @Scortchi, dziękuję za odpowiedź. Chyba rozumiem, co masz na myśli, ale potem nie zrozumiałem szczerze, jak działają te ortogonalne terminy wielomianowe. : P
Pippo
1
Co ważne, to, co masz, nie jest do końca dopasowanym modelem. Potrzebujesz albo gigantycznego „kapelusza” nad zapisem (lub E [zapisu]), co oznacza przewidywaną wartość zapisu lub oczekiwaną wartość zapisu; lub potrzebujesz „+ e” na końcu, aby wskazać resztki.
gung - Przywróć Monikę
@Scortchi Co to jest lub jak znaleźć „tablicę przeglądową”?
Antoni Parellada,
2
@AntoniParellada: Jest to tabela na stronie, do której prowadzi OP: ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL . i dostałem się contr.polyw R.
Scortchi - Przywróć Monikę

Odpowiedzi:

29

Podsumowując (i w przypadku, gdy hiperłącza OP nie będą działać w przyszłości), patrzymy na taki zestaw danych hsb2jako taki:

   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

które można zaimportować tutaj .

Przekształcamy zmienną readw zmienną uporządkowaną / porządkową:

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 

Teraz wszystko jest gotowe, aby po prostu uruchomić regularną ANOVA - tak, to jest R, a my w zasadzie mają zmienną zależną ciągły, writeoraz zmienną objaśniającą z wieloma poziomami, readcat. W R możemy użyćlm(write ~ readcat, hsb2)


1. Generowanie macierzy kontrastu:

Istnieją cztery różne poziomy uporządkowanej zmiennej readcat, więc będziemy mieli kontrasty.n1=3

table(hsb2$readcat)

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

Najpierw chodźmy po pieniądze i spójrz na wbudowaną funkcję 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

Teraz przeanalizujmy, co działo się pod maską:

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]

Co tu się stało? outer(a, b, "^")podnosi elementów az elementami btak, że pierwsze wyniki z kolumny z operacji, , ( - 0,5 ) 0 , 0,5 0 , a 1,5 0 ; druga kolumna z ( - 1,5 ) 1 , ( - 0,5 ) 1 , 0,5 1 i 1,5 1 ; trzeci z ( - 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 i 1,5 2 = 2,25 ; i czwarty, ( - 1,5 ) 3 = - 3,375 , ( - 0,5 ) 3 = - 0,125 , 0,5 3 = 0,125 i 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

Następnie wykonać ortonormalną rozkład tej macierzy i ma kompaktową reprezentację Q ( ). Niektóre z wewnętrznych funkcji funkcji używanych w rozkładzie QR w R używanych w tym poście są wyjaśnione tutaj .QRc_Q = qr(X)$qr

[-2)0-2.500,5-2.2360-4.5840,50,4772)00,50,894-0,9296-1,342]

... z których zapisujemy tylko przekątną ( z = c_Q * (row(c_Q) == col(c_Q))). Co leży w przekątna: tylko „dolne” wpisy z część Q R rozkładu. Właśnie? no nie ... Okazuje się, że przekątna górnej trójkątnej macierzy zawiera wartości własne macierzy!RQR

Następnie wywołujemy następującą funkcję: raw = qr.qy(qr(X), z)wynik z których mogą być replikowane „ręcznie” przez dwie operacje: 1. Włączanie zwartą postać , tj , do Q , transformację, jaką można uzyskać z , i 2. Przeprowadzenie mnożenie macierzy Q z , jak w .Qqr(X)$qrQQ = qr.Q(qr(X))QzQ %*% z

Co najważniejsze, pomnożenie przez wartości własne R nie zmienia ortogonalności składowych wektorów kolumnowych, ale biorąc pod uwagę, że wartość bezwzględna wartości własnych pojawia się w porządku malejącym od góry z lewej strony do prawej u dołu, mnożenie Q z będzie miało tendencję do zmniejszania wartości w kolumnach wielomianowych wyższego rzędu: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

Porównać wartości w kolejnych wektorów kolumny (kwadratowe i sześcienne) przed i po tym, jak operacji faktoryzacji, i niedotkniętych chorobą pierwszych dwóch kolumn.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

Wreszcie nazywamy (Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))przekształcanie macierzy raww wektory ortonormalne :

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

Ta funkcja po prostu „normalizuje” macierz, dzieląc ( "/") kolumnowo każdy element przez . Można go zatem rozłożyć na dwa etapy:(i), w wyniku czego, które są mianownikami dla każdej kolumny w(ii),gdzie każdy element w kolumnie jest podzielony przez odpowiednią wartość(i).przełęcz.xja2)(ja) apply(raw, 2, function(x)sqrt(sum(x^2)))2 2.236 2 1.341(ii)(ja)

W tym momencie wektory kolumnowe stanowią podstawę ortonormalną z , aż pozbędziemy pierwszej kolumny, która będzie przechwytywać i mamy powielana wynik :R4contr.poly(4)

[-0,67082040,5-0,2236068-0,2236068-0,50,67082040,2236068-0,5-0,67082040,67082040,50,2236068]

Kolumny tej macierzy są ortonormalne , co może być pokazane na przykład przez (sum(Z[,3]^2))^(1/4) = 1i z[,3]%*%z[,4] = 0(nawiasem mówiąc, to samo dotyczy wierszy). Każda kolumna jest wynikiem podniesienia początkowych do 1. , 2. i 3. mocy, tj. Liniowej , kwadratowej i sześciennej .wyniki - średnie12)3)


2. Które kontrasty (kolumny) znacząco przyczyniają się do wyjaśnienia różnic między poziomami w zmiennej objaśniającej?

Możemy po prostu uruchomić ANOVA i spojrzeć na podsumowanie ...

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 

... aby zobaczyć, że istnieje liniowy efekt readcaton write, dzięki czemu oryginalne wartości (w trzeciej części kodu na początku postu) można odtworzyć jako:

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

... lub ...

wprowadź opis zdjęcia tutaj

... lub znacznie lepiej ...

wprowadź opis zdjęcia tutaj

Będąc ortogonalnych kontrastów sumą ich składników dodaje się do zera dla a 1 , , a t stałych, a produkt kropka dowolnych dwóch z nich jest równa zero. Gdybyśmy mogli je wizualizować, wyglądałyby mniej więcej tak:ja=1tzaja=0za1,,zat

wprowadź opis zdjęcia tutaj

X0,X1,.Xn

Graficznie jest to znacznie łatwiejsze do zrozumienia. Porównaj rzeczywiste średnie według grup w dużych kwadratowych czarnych blokach z przewidywanymi wartościami i zobacz, dlaczego optymalne przybliżenie linii prostej przy minimalnym udziale kwadratowych i sześciennych wielomianów (z krzywymi aproksymowanymi tylko metodą less) jest optymalne:

wprowadź opis zdjęcia tutaj

Gdyby, dla samego efektu, współczynniki ANOVA były tak duże dla kontrastu liniowego dla innych przybliżeń (kwadratowych i sześciennych), przedstawiony poniżej nonsensowny wykres wyraźniej przedstawiłby wykresy wielomianowe każdego „wkładu”:

wprowadź opis zdjęcia tutaj

Kod jest tutaj .

Antoni Parellada
źródło
+1 Wow. Czy tę odpowiedź (do tej pory jej nie czytałem) można postrzegać jako odpowiedź na moje stare, zapomniane pytanie zbyt stats.stackexchange.com/q/63639/3277 ?
ttnphns
(+1) @ttnphns: Prawdopodobnie pasowałoby tam jeszcze lepiej.
Scortchi - Przywróć Monikę
Tylko wskazówka: możesz skomentować mnie tam z linkiem do tutaj; lub udzielić tam odpowiedzi - którą prawdopodobnie zaakceptuję.
ttnphns 9.04.16
1
@ttnphns i @Scortchi Dziękujemy! Spędziłem sporo czasu próbując zrozumieć te koncepcje i nie spodziewałem się dużej reakcji. To bardzo pozytywna niespodzianka. Myślę, że są pewne zmarszczki do wyjaśnienia w związku z wyjaśnieniem qr.qy()funkcji, ale zdecydowanie postaram się sprawdzić, czy mogę powiedzieć coś minimalnie spójnego na twoje pytanie, jak tylko będę miał trochę czasu.
Antoni Parellada,
1
@Elvis Próbowałem wybrać dobre zdanie podsumowujące i umieścić je gdzieś w poście. Myślę, że jest to dobry punkt i wymaga dobrego matematycznego wyjaśnienia, ale w tym momencie może być zbyt wiele do dalszego rozwijania.
Antoni Parellada
5

Użyję twojego przykładu, aby wyjaśnić, jak to działa. Zastosowanie kontrastów wielomianowych z czterema grupami daje następujące.

miwrjatmi1=μ-0,67L.+0,5Q-0,22domiwrjatmi2)=μ-0,22L.-0,5Q+0,67domiwrjatmi3)=μ+0,22L.-0,5Q-0,67domiwrjatmi4=μ+0,67L.+0,5Q+0,22do

Gdzie pierwsze równanie działa dla grupy najniższych wyników czytania, a czwarte dla grupy najlepszych wyników czytania. możemy porównać te równania do podanych przy użyciu normalnej regresji liniowej (założeniermizareja jest ciągły)

miwrjatmija=μ+rmizarejaL.+rmizareja2)Q+rmizareja3)do

Zwykle zamiast L.,Q,do miałbyś β1,β2),β3)i napisane na pierwszej pozycji. Ale ten tekst przypomina ten z kontrastami wielomianowymi. Więc liczby przedL.,Q,do są w rzeczywistości zamiast rmizareja,rmizareja2),rmizareja3). Współczynniki można zobaczyć wcześniejL. wcześniej trend liniowy Q kwadratowy i przedtem do sześcienny.

Następnie R szacuje parametry μ,L.,Q,do i daje ci

μ^=52,79,L.^=14,26,Q^=-0,97,do^=-0,16
Gdzie μ^=14ja=14miwrjatmija i oszacowane współczynniki μ^,L.^,Q^,do^są czymś w rodzaju szacunków przy normalnej regresji liniowej. Na podstawie danych wyjściowych można sprawdzić, czy szacowane współczynniki znacznie różnią się od zera, dzięki czemu można było przewidzieć pewien trend liniowy, kwadratowy lub sześcienny.

W tym przykładzie jest to tylko niezerowa wartość L.^. Twój wniosek może być następujący: Widzimy, że lepsza punktacja w pisaniu zależy liniowo od wyniku czytania, ale nie ma znaczącego efektu kwadratowego lub sześciennego.

Fimba
źródło