Chỉ cần tóm tắt lại (và trong trường hợp các siêu liên kết OP thất bại trong tương lai), chúng tôi đang xem xét một bộ dữ liệu hsb2
như sau:
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
có thể được nhập khẩu ở đây .
Chúng tôi biến biến read
thành và biến thứ tự / thứ tự:
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
Bây giờ tất cả chúng ta đã sẵn sàng để chạy ANOVA thông thường - vâng, đó là R và về cơ bản chúng ta có một biến phụ thuộc liên tục write
và một biến giải thích với nhiều cấp độ , readcat
. Trong R chúng ta có thể sử dụnglm(write ~ readcat, hsb2)
1. Tạo ma trận tương phản:
Có bốn cấp độ khác nhau cho biến được đặt hàng readcat
, vì vậy chúng tôi sẽ có độ tương phản.n - 1 = 3
table(hsb2$readcat)
(28,40] (40,52] (52,64] (64,76]
22 93 55 30
Trước tiên, hãy kiếm tiền và xem chức năng R tích hợp:
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
Bây giờ hãy mổ xẻ những gì đã diễn ra dưới mui xe:
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
⎡⎣⎢⎢⎢⎢1111- 1,5- 0,50,51,52,250,250,252,25- 3.375- 0,1250,1253.375⎤⎦⎥⎥⎥⎥
Chuyện gì đã xảy ra ở đó? các outer(a, b, "^")
phần tử tăng các phần a
tử của b
, để cột đầu tiên kết quả từ các hoạt động, , ( - 0,5 ) 0 , 0,5 0 và 1,5 0 ; cột thứ hai từ ( - 1,5 ) 1 , ( - 0,5 ) 1 , 0,5 1 và 1,5 1 ; thứ ba từ ( - 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 và 1,5 2 = 2,25 ; và thứ tư, ( - 1,5 ) 3 = - 3,375 , ( - 0,5 ) 3 = - 0,125 , 0,5 3 = 0,125 và 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
Tiếp theo, chúng ta thực hiện phân rã trực giao của ma trận này và lấy biểu diễn nhỏ gọn của Q ( ). Một số hoạt động bên trong của các chức năng được sử dụng trong nhân tố QR trong R được sử dụng trong bài viết này được giải thích thêm ở đây .Q Rc_Q = qr(X)$qr
⎡⎣⎢⎢⎢⎢- 20,50,50,50- 2.2360,4470,894- 2,502- 0,92960- 4.5840- 1.342⎤⎦⎥⎥⎥⎥
... trong đó chúng ta chỉ lưu đường chéo ( z = c_Q * (row(c_Q) == col(c_Q))
). Những gì nằm trong đường chéo: Chỉ là các mục "dưới cùng" của phần của phân tách Q R. Chỉ? tốt, không ... Hóa ra đường chéo của ma trận tam giác trên chứa các giá trị riêng của ma trận!RQ R
Tiếp theo, chúng ta gọi hàm sau : raw = qr.qy(qr(X), z)
, kết quả có thể được sao chép "thủ công" bằng hai thao tác: 1. Biến dạng rút gọn của , tức là thành Q , một phép biến đổi có thể đạt được và 2. Thực hiện nhân ma trận Q z , như trong .Qqr(X)$qr
QQ = qr.Q(qr(X))
Q zQ %*% z
Điều quan trọng, nhân với các giá trị riêng của R không làm thay đổi tính trực giao của các vectơ cột cấu thành, nhưng với giá trị tuyệt đối của các giá trị riêng xuất hiện theo thứ tự giảm dần từ trên trái sang dưới phải, phép nhân của Q z sẽ có xu hướng giảm các giá trị trong các cột đa thức bậc cao:QRQ z
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
So sánh các giá trị trong các vectơ cột sau (bậc hai và khối) trước và sau các hoạt động nhân tố và với hai cột đầu tiên không bị ảnh hưởng.Q R
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
Cuối cùng, chúng ta gọi (Z <- sweep(raw, 2L, apply(raw, 2L, function(x) sqrt(sum(x^2))), "/", check.margin = FALSE))
biến ma trận raw
thành một vectơ trực giao :
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
Chức năng này đơn giản là "bình thường hóa" ma trận bằng cách chia ( "/"
) theo cột mỗi phần tử của . Vì vậy, nó có thể được phân tách theo hai bước:(i), dẫn đến, đó là mẫu số cho mỗi cột trong(ii)trong đó mọi phần tử trong một cột được chia cho giá trị tương ứng của(i).Σcol.x2Tôi-------√( tôi ) apply(raw, 2, function(x)sqrt(sum(x^2)))
2 2.236 2 1.341
( ii )( tôi )
Tại thời điểm này, các vectơ cột tạo thành một cơ sở trực giao của , cho đến khi chúng ta thoát khỏi cột đầu tiên, đó sẽ là phần chặn và chúng tôi đã sao chép kết quả của :R4contr.poly(4)
⎡⎣⎢⎢⎢⎢- 0,6708204- 0.22360680.22360680,67082040,5- 0,5- 0,50,5- 0.22360680,6708204- 0,67082040.2236068⎤⎦⎥⎥⎥⎥
(sum(Z[,3]^2))^(1/4) = 1
z[,3]%*%z[,4] = 0
điểm số - có nghĩa là123
2. Sự tương phản (cột) nào đóng góp đáng kể để giải thích sự khác biệt giữa các cấp độ trong biến giải thích?
Chúng ta chỉ có thể chạy ANOVA và xem tóm tắt ...
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
... Để thấy rằng có một hiệu ứng tuyến tính readcat
trên write
, để các giá trị ban đầu (trong đoạn mã thứ ba ở đầu bài) có thể được sao chép thành:
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
... hoặc là...
... hoặc tốt hơn nhiều ...
Σi = 1tmộtTôi= 0một1, ⋯ , mộtt
X0, X1, ⋯ . Xn
Về mặt đồ họa, điều này dễ hiểu hơn nhiều. So sánh các phương tiện thực tế của các nhóm trong các khối đen vuông lớn với các giá trị dự đoán và xem tại sao một xấp xỉ đường thẳng với sự đóng góp tối thiểu của đa thức bậc hai và bậc ba (với các đường cong chỉ xấp xỉ với hoàng thổ) là tối ưu:
Nếu, chỉ để có hiệu lực, các hệ số của ANOVA đã lớn bằng độ tương phản tuyến tính đối với các xấp xỉ khác (bậc hai và khối), biểu đồ vô nghĩa theo sau sẽ mô tả rõ hơn các biểu đồ đa thức của mỗi "đóng góp":
Mã ở đây .