Etkileşimli karma efektli modeller (lme4) için multcomp :: glht içinde post-hoc test


10

R( lme4Paket) içindeki doğrusal karma efektler modelinde post-hoc testler yapıyorum . Post-hoc testleri yapmak için multcomppackage ( glht()function) kullanıyorum .

Deneysel tasarımım rastgele blok etkisi ile tekrarlanan ölçümlerdir. Modeller şöyle belirtilir:

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

Verilerimi buraya iliştirmek yerine warpbreaks, multcomppakette adı verilen veriler üzerinde çalışıyorum .

data <- warpbreaks
warpbreaks$rand <- NA

Benim "blok" etkisi taklit etmek için ekstra rastgele bir değişken ekledim:

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

Bu benim modelimi taklit ediyor:

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

" Ek Multcomp Örnekleri - 2 Yollu Anova" daki örneğin farkındayım. Bu örnek sizi, seviyelerindeki gerilim seviyelerinin karşılaştırılmasına götürür wool.

Ne tersini yapmak istiyorsanız - düzeylerini arasında karşılaştırma woolseviyeleri dahilinde tension? (Benim durumumda, bu, tedavi seviyelerini (iki - 0, 1) zaman seviyeleriyle (üç Haziran, Temmuz, Ağustos) karşılaştırır.

Bunu yapmak için aşağıdaki kod ile geldim, ama çalışmıyor gibi görünüyor (aşağıdaki hata iletisine bakın).

İlk olarak, örnekten ( woolve tensiondeğiştirilen yerlerle):

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

Buradan aşağıya, kendi kodum:

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

Yanıtlar:


6

Lsmeans paketini kullanarak yapmak çok daha kolay

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

Harika, işe yarıyor! Teşekkürler. Not: Bu kod yalnızca tekrar değişkenimi sayısal değerlerden (3 ve 6) alfabetik değerlere (A & B) değiştirdikten sonra verilerim için çalıştı.

Bu çok önemli! Çünkü sayısal bir yordayıcı olan farklı bir modeltime . Bir faktör olarak istediğini sanıyorum.
Russ Lenth

Daha fazla yordayıcıya nasıl genelleme yapabilirim? örneğin 3 tahmin edicim varsa nasıl çalışır?
have fun

1
@havefun bakınız help("lsmeans", package = "lsmeans")ve vignette("using-lsmeans"). Çok fazla belge ve örnek var.
Russ Lenth

1
Her yöntemle elde ettiğiniz karşılaştırma sayısını sayın, bunlar aynı değildir. Ayrıca çoklu test ayarlamalarını da okuyun. Daha büyük bir test aileniz olduğunda, ayarlanan P değerleri daha küçük bir aileninkinden farklıdır. Bir by değişkeni kullandığınızda, ayarlamalar her kümeye ayrı ayrı uygulanır.
Russ Lenth
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.