Post-hoc тестування в мультикомплект :: glht для моделей зі змішаними ефектами (lme4) з взаємодіями


10

Я виконую пост-спеціальні тести на лінійній моделі зі змішаними ефектами в R( lme4пакет). Я використовую multcompпакет ( glht()функцію) для виконання пост-спеціальних тестів.

Моя експериментальна конструкція - це повторні заходи, з випадковим блоковим ефектом. Моделі вказані як:

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

Замість того, щоб додавати сюди свої дані, я опрацьовую дані, викликані warpbreaksв multcompпакеті.

data <- warpbreaks
warpbreaks$rand <- NA

Я додав додаткову випадкову змінну, щоб імітувати мій ефект "блокування":

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

Це імітує мою модель:

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

Мені відомо про приклад у " Додаткові приклади багатокомпонентної роботи - 2 способи Anova" Цей приклад приводить вас до порівняння рівнів напруженості в межах рівнів wool.

Що робити, якщо я хочу зробити зворотне - порівняти рівні в woolмежах рівнів tension? (У моєму випадку це було б порівнянням рівнів лікування (два - 0, 1) протягом рівнів часу (три - червень, липень, серпень).

Я придумав наступний код для цього, але він, здається, не працює (див. Повідомлення про помилку нижче).

По-перше, із прикладу (із місцями woolта tensionмісцями):

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 = ":")

Звідси донизу мій власний код:

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

Відповіді:


6

Це набагато простіше зробити за допомогою пакету lsmeans

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

Чудово, це працює! Дякую. Примітка: цей код працював лише для моїх даних після зміни моєї повторної змінної з числових значень (3 і 6) на алфавітні значення (A & B).

Ну, це важливо багато! Тому що це інша модель з timeяк цифровим провісником. Я підозрюю, що ви хотіли це як фактор.
Russ Lenth

Як я можу узагальнити більше прогнозів? якщо, наприклад, у мене є 3 прогнози, як це працює?
весело провести

1
@havefun ласка , дивіться help("lsmeans", package = "lsmeans")і vignette("using-lsmeans"). Існує багато документації та багато прикладів.
Russ Lenth

1
Порахуйте кількість порівнянь, які ви отримуєте з кожним методом, вони не однакові. Читайте також про параметри багаторазового тестування. Якщо у вас є велика сім'я тестів, скориговані значення P відрізняються, ніж для меншої родини. Якщо ви використовуєте змінну a, коригування застосовуються окремо до кожного набору.
Russ Lenth
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.