Confronti multipli di modelli misti per l'interazione tra predittore continuo e categorico


11

Vorrei utilizzare lme4per adattare una regressione di effetti misti e multcompper calcolare i confronti a coppie. Ho un set di dati complesso con più predittori continui e categorici, ma la mia domanda può essere dimostrata usando il ChickWeightset di dati integrato come esempio:

m <- lmer(weight ~ Time * Diet + (1 | Chick), data=ChickWeight, REML=F)

Timeè continuo ed Dietè categorico (4 livelli) e ci sono più pulcini per dieta. Tutti i pulcini hanno iniziato a circa lo stesso peso, ma le loro diete (possono) influenzare il loro tasso di crescita, quindi le Dietintercettazioni dovrebbero essere (più o meno) uguali, ma le pendenze potrebbero essere diverse. Posso ottenere i confronti a coppie per l'effetto di intercettazione di Dietquesto tipo:

summary(glht(m, linfct=mcp(Diet = "Tukey")))

e, in effetti, non sono significativamente differenti, ma come posso fare il test analogo per l' Time:Dieteffetto? Basta inserire il termine di interazione per mcpprodurre un errore:

summary(glht(m, linfct=mcp('Time:Diet' = "Tukey")))
Error in summary(glht(m, linfct = mcp(`Time:Diet` = "Tukey"))) : 
  error in evaluating the argument 'object' in selecting a method for function
 'summary': Error in mcp2matrix(model, linfct = linfct) : 
Variable(s) Time:Diet have been specified in linfct but cannot be found in model’! 

Ha Time*Diet, che è solo una semplificazione di Time + Diet + Time:Diet. L'uso anova(m)o summary(m)conferma che il termine di interazione è nel modello.
Dan M.,

Risposte:


8

Per impostazione predefinita, lmerconsidera il livello di riferimento di un predittore categoriale come base e stima i parametri per gli altri livelli. In questo modo si ottengono alcuni confronti a coppie nell'output predefinito e si possono ottenere gli altri usando relevelper definire un nuovo livello di riferimento e reinserire il modello. Ciò ha il vantaggio di permetterti di utilizzare i confronti tra modelli o MCMC per ottenere i valori p, ma non è corretto per confronti multipli (anche se in seguito potresti applicare la tua correzione).

Per utilizzare multcomp, è necessario definire la matrice di contrasto. Ogni riga nella matrice di contrasto rappresenta i pesi per gli effetti ottenuti nell'output del modello predefinito, a partire dall'intercettazione. Quindi, se vuoi un effetto che è già incluso nell'output di base, metti semplicemente un "1" nella posizione corrispondente a quell'effetto. Poiché le stime dei parametri sono relative a un livello di riferimento comune, è possibile ottenere confronti tra due altri livelli impostando il peso di uno su "-1" e dell'altro "1". Ecco come funzionerebbe per i Time:Diettermini ChickWeightnell'esempio:

contrast.matrix <- rbind("Time:Diet1 vs. Time:Diet2" =  c(0, 0, 0, 0, 0, 1, 0, 0),
                           "Time:Diet1 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, 0, 1, 0),
                           "Time:Diet1 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, 0, 1),
                           "Time:Diet2 vs. Time:Diet3" =  c(0, 0, 0, 0, 0, -1, 1, 0),
                           "Time:Diet2 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, -1, 0, 1),
                           "Time:Diet3 vs. Time:Diet4" =  c(0, 0, 0, 0, 0, 0, -1, 1))
summary(glht(m, contrast.matrix))

Caveat emptor: questo approccio sembra usare l'approssimazione normale per ottenere valori p, che è un po 'anti-conservativo, e quindi applica una correzione per confronti multipli. Il risultato è che questo metodo consente di accedere facilmente a tutte le stime dei parametri a coppie e agli errori standard desiderati, ma i valori p possono o meno essere ciò che si desidera.

(Grazie a Scott Jackson di r-ling-lang-L per l'aiuto con questo)

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.