Câu hỏi nào bạn đang cố gắng trả lời?
Nếu bạn muốn kiểm tra tổng thể mọi thứ đang diễn ra, null là cả hiệu ứng chính và tương tác đều bằng 0, sau đó bạn có thể thay thế tất cả các điểm dữ liệu bằng thứ hạng của chúng và chỉ cần thực hiện ANOVA thông thường để so sánh với ý nghĩa chặn / lớn chỉ mô hình. Về cơ bản, đây là cách có bao nhiêu phép thử không tham số hoạt động, sử dụng các cấp bậc biến đổi dữ liệu thành phân phối đồng đều (dưới giá trị null) và bạn có được một xấp xỉ tốt bằng cách xử lý nó như bình thường (Định lý giới hạn trung tâm áp dụng cho đồng phục cho mẫu kích thước trên khoảng 5 hoặc 6).
Đối với các câu hỏi khác, bạn có thể sử dụng các bài kiểm tra hoán vị. Nếu bạn muốn kiểm tra một trong các hiệu ứng chính và sự tương tác với nhau (nhưng cho phép hiệu ứng chính khác khác không) thì bạn có thể cho phép dự đoán được kiểm tra. Tôi muốn kiểm tra sự tương tác trong khi cho phép cả hai hiệu ứng chính khác không thì bạn chỉ có thể điều chỉnh mô hình hiệu ứng chính giảm và tính toán các giá trị và phần dư được trang bị, sau đó hoán vị ngẫu nhiên các phần dư và thêm phần dư được hoán vị trở lại giá trị phù hợp và phù hợp với mô hình anova đầy đủ bao gồm cả sự tương tác. Lặp lại điều này rất nhiều lần để có được phân phối null cho kích thước của hiệu ứng tương tác để so sánh với kích thước của hiệu ứng tương tác từ dữ liệu gốc.
Có thể có mã SAS hiện tại để làm những việc như thế này, tôi đã thấy một số hướng dẫn cơ bản về việc sử dụng SAS cho kiểm tra bootstrap và hoán vị (cách nhanh nhất dường như là sử dụng bước dữ liệu để tạo tất cả các bộ dữ liệu trong một bảng lớn, sau đó sử dụng xử lý để làm các phân tích). Cá nhân tôi sử dụng R cho loại điều này vì vậy không thể giúp đỡ nhiều hơn trong việc sử dụng SAS.
Biên tập
Dưới đây là một ví dụ sử dụng mã R:
> fit1 <- aov(breaks ~ wool*tension, data=warpbreaks)
> summary(fit1)
Df Sum Sq Mean Sq F value Pr(>F)
wool 1 451 450.7 3.765 0.058213 .
tension 2 2034 1017.1 8.498 0.000693 ***
wool:tension 2 1003 501.4 4.189 0.021044 *
Residuals 48 5745 119.7
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
>
> fit2 <- aov(breaks ~ wool + tension, data=warpbreaks)
>
> tmpfun <- function() {
+ new.df <- data.frame(breaks = fitted(fit2) + sample(resid(fit2)),
+ wool = warpbreaks$wool,
+ tension = warpbreaks$tension)
+ fitnew <- aov(breaks ~ wool*tension, data=new.df)
+ fitnew2 <- update(fitnew, .~ wool + tension)
+ c(coef(fitnew), F=anova(fitnew2,fitnew)[2,5])
+ }
>
> out <- replicate(10000, tmpfun())
>
> # based on only the interaction coefficients
> mean(out[5,] >= coef(fit1)[5])
[1] 0.002
> mean(out[6,] >= coef(fit1)[6])
[1] 0.0796
>
> # based on F statistic from full-reduced model
> mean(out[7,] >= anova(fit2,fit1)[2,5])
[1] 0.022