Thử nghiệm hậu hoc trong multcomp :: glht cho các mô hình hiệu ứng hỗn hợp (lme4) với các tương tác


10

Tôi đang thực hiện các bài kiểm tra hậu hoc trên mô hình hiệu ứng hỗn hợp tuyến tính trong R( lme4gói). Tôi đang sử dụng multcompgói ( glht()chức năng) để thực hiện các bài kiểm tra sau hoc.

Thiết kế thử nghiệm của tôi là các biện pháp lặp đi lặp lại, với hiệu ứng khối ngẫu nhiên. Các mô hình được chỉ định là:

mymod <- lmer(variable ~ treatment * time + (1|block), data = mydata, REML = TRUE)

Thay vì đính kèm dữ liệu của tôi ở đây, tôi đang xử lý dữ liệu được gọi warpbreakstrong multcompgói.

data <- warpbreaks
warpbreaks$rand <- NA

Tôi đã thêm một biến ngẫu nhiên bổ sung để bắt chước hiệu ứng "khối" của mình:

warpbreaks$rand <- rep(c("foo", "bar", "bee"), nrow(warpbreaks)/3)

Mô hình này bắt chước mô hình của tôi:

mod <- lmer(breaks ~ tension * wool + (1|rand), data = warpbreaks) 

Tôi biết về ví dụ này trong " Ví dụ đa thành phần bổ sung- Anova 2 cách" Ví dụ này dẫn bạn đến việc so sánh các mức độ căng thẳng trong các mức wool.

Điều gì xảy ra nếu tôi muốn làm ngược lại - so sánh các cấp độ wooltrong các cấp độ tension? (Trong trường hợp của tôi, điều này sẽ so sánh các mức độ điều trị (hai - 0, 1) trong các mức độ thời gian (ba - tháng sáu, tháng bảy, tháng tám).

Tôi đã đưa ra mã sau đây để làm như vậy, nhưng nó dường như không hoạt động (xem thông báo lỗi bên dưới).

Đầu tiên, từ ví dụ (có wooltensionđổi chỗ):

tmp <- expand.grid(wool = unique(warpbreaks$wool), tension = unique(warpbreaks$tension))
X <- model.matrix(~ tension * wool, data = tmp)
glht(mod, linfct = X)

Tukey <- contrMat(table(warpbreaks$wool), "Tukey")

K1 <- cbind(Tukey, matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)))
rownames(K1) <- paste(levels(warpbreaks$tension)[1], rownames(K1), sep = ":")

K2 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[2], rownames(K2), sep = ":")

Từ đây đến dưới cùng, mã của riêng tôi:

K3 <- cbind(matrix(0, nrow = nrow(Tukey), ncol = ncol(Tukey)), Tukey)
rownames(K2) <- paste(levels(warpbreaks$tension)[3], rownames(K3), sep = ":")

K <- rbind(K1, K2, K3)
colnames(K) <- c(colnames(Tukey), colnames(Tukey))

> summary(glht(mod, linfct = K %*% X))
Error in summary(glht(mod, linfct = K %*% X)) : 
  error in evaluating the argument 'object' in selecting a method for function 'summary': Error in K %*% X : non-conformable arguments

Câu trả lời:


6

Sử dụng gói lsmeans dễ dàng hơn nhiều

library(lsmeans)
lsmeans(mod, pairwise ~ tension | wool)
lsmeans(mod, pairwise ~ wool | tension)

Tuyệt vời, nó hoạt động! Cảm ơn. Lưu ý: mã này chỉ hoạt động cho dữ liệu của tôi sau khi thay đổi biến lặp lại của tôi từ giá trị số (3 & 6) sang giá trị bảng chữ cái (A & B).

Vâng, đó là vấn đề rất nhiều! Bởi vì đó là một mô hình khác nhau với timenhư một yếu tố dự báo số. Tôi nghi ngờ bạn muốn nó như là một yếu tố.
Nga thứ

Làm thế nào tôi có thể khái quát để dự đoán nhiều hơn? ví dụ nếu tôi có 3 dự đoán thì nó hoạt động như thế nào?
vui chơi

1
@havefun Hãy nhìn vào help("lsmeans", package = "lsmeans")vignette("using-lsmeans"). Có rất nhiều tài liệu và nhiều ví dụ.
Nga thứ

1
Đếm số lượng so sánh bạn có được với mỗi phương pháp, chúng không giống nhau. Cũng đọc lên trên nhiều điều chỉnh thử nghiệm. Khi bạn có một họ các thử nghiệm lớn hơn, các giá trị P được điều chỉnh sẽ khác nhau đối với một gia đình nhỏ hơn. Khi bạn sử dụng một biến, các điều chỉnh được áp dụng riêng cho từng bộ.
Nga thứ
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.