Regresyon için polinom kontrastları


17

Regresyon uyumunda polinom kontrastlarının kullanımını anlayamıyorum. Özellikle, bu sayfadaR açıklanan bir aralık değişkenini (eşit aralıklı düzeylere sahip sıralı değişken) ifade etmek için kullanılan bir kodlamaya atıfta bulunuyorum .

Bu sayfa örneğinde, doğru anladıysam, R bir aralık değişkeni için bir modele uyuyor ve doğrusal, karesel veya kübik eğilimini ağırlaştıran bazı katsayılar döndürüyor. Bu nedenle, takılan model şöyle olmalıdır:

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

burada , aralık değişkeninin farklı düzeyine göre , , veyaX değerlerini almalıdır .1234

Bu doğru mu? Ve eğer öyleyse, polinom tezatlarının amacı neydi?


7
Hayır, bu katsayılar dik polinom terimleri içindir: modeli ham polinom terimleri için yazdınız . Yerine , , ve 'deki değerler ile, , , ve , sırasıyla (indeks tablosundan itibaren). XX2X3LQC
Scortchi - Eski durumuna getir Monica

1
Sevgili @ Skrtchi, cevabınız için teşekkür ederim. Ne demek istediğini anlıyorum, ama o zaman bu dik polinom terimlerinin nasıl çalıştığını dürüstçe anlamadım. : P
Pippo

1
Notasyonel bir mesele olarak, sahip olduğunuz şey uygun model değildir. Ya yazma üzerine dev bir 'şapka' ya (veya E [yazma]) ihtiyacınız vardır, bu da yazmanın tahmini değeri veya beklenen yazma değeri anlamına gelir; veya kalıntıları belirtmek için sonunda bir '+ e' gerekir.
gung - Monica'yı eski

@Scortchi "Arama tablosu" nedir veya nasıl bulunabilir?
Antoni Parellada

2
@AntoniParellada: Sayfadaki OP'nin ats.ucla.edu/stat/r/library/contrast_coding.htm#ORTHOGONAL ile bağlantılı olduğu tablo . ve contr.polyR. ile var
Scortchi - Monica'yı eski durumuna getirin

Yanıtlar:


29

Sadece özetlemek gerekirse (ve gelecekte OP köprüleri başarısız olursa), bir veri kümesine şu şekilde bakıyoruz 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

burada ithal edilebilir .

Değişkeni readve sıralı / sıralı değişkene dönüştürürüz:

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 

Şimdi hepimiz sadece düzenli bir ANOVA çalıştırmaya hazırız - evet, bu R ve temelde sürekli bağımlı writebir değişkenimiz ve çok seviyeli açıklayıcı bir değişkenimiz var readcat. R de kullanabilirizlm(write ~ readcat, hsb2)


1. Kontrast matrisinin oluşturulması:

Sıralı değişkenin dört farklı seviyesi vardır readcat, bu yüzden kontrastımız olacaktır.n1=3

table(hsb2$readcat)

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

İlk olarak, para için gidelim ve yerleşik R işlevine bir göz atalım:

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

Şimdi kaputun altında neler olup bittiğini inceleyelim:

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]

Orada ne oldu? outer(a, b, "^")elemanlarını yükseltir aelemanlarına b, yani bu operasyonlardan ilk sütun sonuçları, , ( - 0.5 ) 0 , 0.5 0 ve 1.5 0 ; ( - 1.5 ) 1 , ( - 0.5 ) 1 , 0.5 1 ve 1.5 1 ' den ikinci sütun ; üçüncüsü ( - 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 ve 1.5 2 = 2.25 ; ve dördüncü, ( - 1.5 ) 3 = - 3.375 , ( - 0.5 ) 3 = - 0.125 , 0.5 3 = 0.125 ve 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

Bir dahaki bu matrisin ortonormal ayrışmasını ve Q'nun kompakt temsil alır ( ). Bu yazıda kullanılan R'de QR çarpanlarına ayırmada kullanılan fonksiyonların iç çalışmalarından bazıları burada daha ayrıntılı olarak açıklanmaktadır .QRc_Q = qr(X)$qr

[202.500.52.23604.5840.50.447200.50.8940.92961.342]

... sadece diyagonalini kaydettik ( z = c_Q * (row(c_Q) == col(c_Q))). Diyagonalde ne var: Q R ayrışmasının kısmının sadece "alt" girdileri . Sadece? iyi, hayır ... Bir üst üçgen matrisin köşegeninin matrisin özdeğerlerini içerdiği ortaya çıktı!RQR

Aşağıdaki işlev çağrısı Sonraki: raw = qr.qy(qr(X), z)1. kompakt bir yapıya Dönüş: bunun sonucu, iki işlem ile "elle" çoğaltılmış olabilir , yani içine, Q , ile elde edilebilir bir dönüşüm ve 2. yapılması matris çarpımı Q z , olduğu gibi .Qqr(X)$qrQQ = qr.Q(qr(X))QzQ %*% z

En önemlisi, çarparak ve öz-değerlerle R kurucu sütun vektörlerinin ortogonalliği değişmez, ancak özdeğerler mutlak değeri alt soldan sağa doğru yukarıdan azalan görünür göz önüne alındığında, bir çarpma S z azaltma eğilimi gösterecektir yüksek sıralı polinom sütunlarındaki değerler: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

Önce ve sonra (Kuvadratik ve kübik), daha sonra sütun vektörleri değerleri karşılaştır ve etkilenmemiş ilk iki sütununa çarpanlarına işlemleri.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

Nihayet dediğimiz (Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))matrisi dönüm rawbir içine ortonormal vektörler:

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

Bu işlev (bölünmesiyle matris "normalize" "/"), her bir eleman columnwise . Dolayısıyla, iki adımda ayrıştırılabilir:(i), sonuç olarak,(ii) 'deki bir sütundaki her elemanın(i)'nin karşılık gelen değerine bölündüğüher bir sütun için payda olansonuç.col.xi2(i) apply(raw, 2, function(x)sqrt(sum(x^2)))2 2.236 2 1.341(ii)(i)

Bu noktada sütun vektörler bir ortonormal temelini oluşturur biz kesişme olacak ilk sütunda, kurtulana kadar, ve biz sonuca çoğaltılmış var :R4contr.poly(4)

[0.67082040.50.22360680.22360680.50.67082040.22360680.50.67082040.67082040.50.2236068]

(sum(Z[,3]^2))^(1/4) = 1z[,3]%*%z[,4] = 0scores - mean123


2. Açıklayıcı değişkendeki seviyeler arasındaki farkları açıklamak için hangi kontrastlar (sütunlar) önemli ölçüde katkıda bulunur?

Sadece ANOVA'yı çalıştırabilir ve özete bakabiliriz ...

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üzerinde doğrusal bir etki olduğunu görmek için write, orijinal değerler (postanın başlangıcındaki üçüncü kod yığınında) şu şekilde çoğaltılabilir:

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

... ya da ...

resim açıklamasını buraya girin

... ya da daha iyisi ...

resim açıklamasını buraya girin

i=1tai=0a1,,at

resim açıklamasını buraya girin

X0,X1,.Xn

Grafiksel olarak, bunu anlamak çok daha kolaydır. Gerçek araçları büyük kare siyah bloklardaki gruplarla öngörülen değerlerle karşılaştırın ve kuadratik ve kübik polinomların minimum katkısı ile (sadece loess ile yaklaşık eğrilerle) düz bir çizgi yaklaşımının neden en uygun olduğunu görün:

resim açıklamasını buraya girin

Sadece etki için, ANOVA katsayıları diğer yaklaşımlar (kuadratik ve kübik) için doğrusal kontrast için büyük olsaydı, takip eden saçma sapan her "katkının" polinom parsellerini daha açık bir şekilde tasvir ederdi:

resim açıklamasını buraya girin

Kod burada .


+1 Vay canına. Bu cevap (şimdiye kadar sonuna kadar okumadım) eski, unutulmuş sorumun yanıtı olarak da görülebilir. Stat.stackexchange.com/q/63639/3277 ?
ttnphns

(+1) @ttnphns: Muhtemelen orada daha da iyi olurdu.
Scortchi - Monica'yı eski durumuna döndürün

Sadece bir ipucu: Bana buraya bir bağlantı ile yorum yapmak isteyebilirsiniz; ya da orada bir cevap verebilirim - kabul edeceğim.
ttnphns

1
@ttnphns ve @Scortchi Teşekkür ederiz! Bu kavramları anlamaya çalışmak için epey zaman geçirdim ve fazla tepki beklemiyordum. Bu çok olumlu bir sürpriz. Bence qr.qy()işlevi açıklamak için ütülemek için bazı kırışıklıklar var , ama zamanım olur olmaz sorunuz hakkında minimal bir şey söyleyip söyleyemeyeceğimi kesinlikle görmeye çalışacağım.
Antoni Parellada

1
@Elvis İyi bir özet cümle seçmeye ve yazıya bir yere koymaya çalıştım. Bence bu iyi bir nokta ve güzel bir matematiksel açıklama gerektiriyor, ancak bu noktada daha fazla ayrıntı vermek çok fazla olabilir.
Antoni Parellada

5

Örneğinizi nasıl çalıştığını açıklamak için kullanacağım. Dört grupla polinom kontrastlarının kullanılması aşağıdaki sonuçları verir.

Ewrite1=μ0.67L+0.5Q0.22CEwrite2=μ0.22L0.5Q+0.67CEwrite3=μ+0.22L0.5Q0.67CEwrite4=μ+0.67L+0.5Q+0.22C

readi

Ewritei=μ+readiL+readi2Q+readi3C

L,Q,Cβ1,β2,β3L,Q,Creadi,readi2,readi3LQC

μ,L,Q,C

μ^=52.79,L^=14.26,Q^=0.97,C^=0.16
μ^=14i=14Ewriteiμ^,L^,Q^,C^

L^

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.