Test post-hoc in multcomp :: glht per modelli a effetti misti (lme4) con interazioni


10

Sto eseguendo test post-hoc su un modello lineare a effetti misti in R( lme4pacchetto). Sto usando il multcomppacchetto ( glht()funzione) per eseguire i test post-hoc.

Il mio disegno sperimentale è misure ripetute, con un effetto blocco casuale. I modelli sono specificati come:

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

Invece di allegare qui i miei dati, sto lavorando su quelli richiamati warpbreaksall'interno del multcomppacchetto.

data <- warpbreaks
warpbreaks$rand <- NA

Ho aggiunto una variabile casuale aggiuntiva per imitare il mio effetto "blocco":

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

Questo imita il mio modello:

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

Sono a conoscenza dell'esempio in " Esempi Multcomp aggiuntivi - Anova a 2 vie" Questo esempio ti porta a un confronto tra livelli di tensione all'interno dei livelli di wool.

E se volessi fare il contrario - confrontare i livelli woolall'interno dei livelli di tension? (Nel mio caso, si tratterebbe di confrontare i livelli di trattamento (due - 0, 1) entro i livelli di tempo (tre - giugno, luglio, agosto).

Ho creato il seguente codice per farlo, ma non sembra funzionare (vedi il messaggio di errore sotto).

Innanzitutto, dall'esempio (con woole tensionluoghi scambiati):

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

Da qui in basso, il mio codice:

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

Risposte:


6

È molto più facile da fare usando il pacchetto lsmeans

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

Ottimo, funziona! Grazie. Nota: questo codice ha funzionato solo per i miei dati dopo aver cambiato la mia variabile di ripetizione da valori numerici (3 e 6) a valori alfabetici (A e B).

Bene, questo conta molto! Perché è un modello diverso con timecome predittore numerico. Sospetto che lo volessi come fattore.
Russ Lenth,

Come posso generalizzare a più predittori? se ad esempio ho 3 predittori come funziona?
divertiti il

1
@havefun Per favore guarda help("lsmeans", package = "lsmeans")e vignette("using-lsmeans"). C'è molta documentazione e molti esempi.
Russ Lenth,

1
Conta il numero di confronti che ottieni con ogni metodo, non sono gli stessi. Leggi anche su regolazioni di test multipli. Quando si dispone di una famiglia di test più ampia, i valori P regolati sono diversi rispetto a quelli di una famiglia più piccola. Quando si utilizza una per variabile, le regolazioni vengono applicate separatamente a ciascun set.
Russ Lenth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.