Điều này có thể trông giống như một chút tự quảng cáo (và tôi cho rằng nó là). Nhưng tôi đã phát triển gói lsmeans cho R (có sẵn trên CRAN) được thiết kế để xử lý chính xác loại tình huống này. Đây là cách nó hoạt động cho ví dụ của bạn:
> sample.data <- data.frame(IV=rep(1:4,each=20),DV=rep(c(-3,-3,1,3),each=20)+rnorm(80))
> sample.aov <- aov(DV ~ factor(IV), data = sample.data)
> library("lsmeans")
> (sample.lsm <- lsmeans(sample.aov, "IV"))
IV lsmean SE df lower.CL upper.CL
1 -3.009669 0.2237448 76 -3.4552957 -2.564043
2 -3.046072 0.2237448 76 -3.4916980 -2.600445
3 1.147080 0.2237448 76 0.7014539 1.592707
4 3.049153 0.2237448 76 2.6035264 3.494779
> contrast(sample.lsm, list(mycon = c(-3,-1,1,3)))
contrast estimate SE df t.ratio p.value
mycon 22.36962 1.000617 76 22.356 <.0001
Bạn có thể chỉ định độ tương phản bổ sung trong danh sách nếu bạn muốn. Trong ví dụ này, bạn sẽ nhận được kết quả tương tự với độ tương phản đa thức tuyến tính tích hợp:
> con <- contrast(sample.lsm, "poly")
> con
contrast estimate SE df t.ratio p.value
linear 22.369618 1.0006172 76 22.356 <.0001
quadratic 1.938475 0.4474896 76 4.332 <.0001
cubic -6.520633 1.0006172 76 -6.517 <.0001
Để xác nhận điều này, lưu ý rằng "poly"
đặc tả chỉ đạo nó gọi poly.lsmc
, điều này tạo ra các kết quả sau:
> poly.lsmc(1:4)
linear quadratic cubic
1 -3 1 -1
2 -1 -1 3
3 1 -1 -3
4 3 1 1
Nếu bạn muốn làm một bài kiểm tra chung về một số tương phản, sử dụng test
chức năng với joint = TRUE
. Ví dụ,
> test(con, joint = TRUE)
Điều này sẽ tạo ra một thử nghiệm "loại III". Không giống như car::Anova()
, nó sẽ làm điều đó một cách chính xác bất kể mã hóa tương phản được sử dụng trong giai đoạn phù hợp với mô hình. Điều này là do các hàm tuyến tính đang được thử nghiệm được chỉ định trực tiếp thay vì ngầm thông qua việc giảm mô hình. Một tính năng bổ sung là trường hợp phát hiện độ tương phản phụ thuộc tuyến tính, và thống kê kiểm tra chính xác và mức độ tự do được tạo ra.