Come eseguire test post-hoc sul modello lmer?


18

Questo è il mio frame di dati:

Group   <- c("G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G1","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G2","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3","G3")
Subject <- c("S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13","S14","S15","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13","S14","S15","S1","S2","S3","S4","S5","S6","S7","S8","S9","S10","S11","S12","S13","S14","S15")
Value   <- c(9.832217741,13.62390117,13.19671612,14.68552076,9.26683366,11.67886655,14.65083473,12.20969772,11.58494621,13.58474896,12.49053635,10.28208078,12.21945867,12.58276212,15.42648969,9.466436017,11.46582655,10.78725485,10.66159358,10.86701127,12.97863424,12.85276916,8.672953949,10.44587257,13.62135205,13.64038394,12.45778874,8.655142642,10.65925259,13.18336949,11.96595556,13.5552118,11.8337142,14.01763101,11.37502161,14.14801305,13.21640866,9.141392359,11.65848845,14.20350364,14.1829714,11.26202565,11.98431285,13.77216009,11.57303893)

data <- data.frame(Group, Subject, Value)

Quindi eseguo un modello di effetti lineari misti per confrontare la differenza dei 3 gruppi su "Valore", dove "Oggetto" è il fattore casuale:

library(lme4)
library(lmerTest)
model <- lmer (Value~Group + (1|Subject), data = data)
summary(model)

I risultati sono:

Fixed effects:
            Estimate Std. Error       df t value Pr(>|t|)    
(Intercept) 12.48771    0.42892 31.54000  29.114   <2e-16 ***
GroupG2     -1.12666    0.46702 28.00000  -2.412   0.0226 *  
GroupG3      0.03828    0.46702 28.00000   0.082   0.9353    

Tuttavia, come confrontare Group2 con Group3? Qual è la convenzione nell'articolo accademico?

Risposte:


16

Puoi usare emmeans::emmeans()o lmerTest::difflsmeans(), o multcomp::glht().

Preferisco emmeans(precedentemente lsmeans).

library(emmeans)
emmeans(model, list(pairwise ~ Group), adjust = "tukey")

Nota difflsmeansnon può essere corretto per confronti multipli e utilizza il metodo Satterthwaite per il calcolo dei gradi di libertà come impostazione predefinita anziché il metodo Kenward-Roger utilizzato dagli emmeans.

library(lmerTest)
difflsmeans(model, test.effs = "Group")

Il multcomp::glht()metodo è descritto nell'altra risposta a questa domanda, da Hack-R.

Inoltre, è possibile ottenere i valori p ANOVA caricando lmerTeste quindi utilizzando anova.

library(lmerTest)
anova(model)

Giusto per essere chiari, intendevi che il Valore venisse valutato tre volte per ogni materia, giusto? Sembra che il gruppo sia all'interno di soggetti, non tra soggetti.


1
Voglio solo aggiungere alla risposta di Kayle Sawyer che il pacchetto lsmeans è deprecato a favore di emmeans .
Downhiller,

Nota se si specifica la libreria, è necessario utilizzare lmerTest :: lmer (), non lme4 :: lmer () per anova () per mostrare i valori p.
Kayle Sawyer,

11

Dopo aver adattato il lmermodello, è possibile eseguire ANOVA, MANOVA e più procedure di confronto sull'oggetto modello, in questo modo:

library(multcomp)
summary(glht(model, linfct = mcp(Group = "Tukey")), test = adjusted("holm"))
   Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Tukey Contrasts


Fit: lmer(formula = Value ~ Group + (1 | Subject), data = data)

Linear Hypotheses:
             Estimate Std. Error z value Pr(>|z|)  
G2 - G1 == 0 -1.12666    0.46702  -2.412   0.0378 *
G3 - G1 == 0  0.03828    0.46702   0.082   0.9347  
G3 - G2 == 0  1.16495    0.46702   2.494   0.0378 *
---
Signif. codes:  0***0.001**0.01*0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- holm method)

Per quanto riguarda la convenzione sui documenti accademici, ciò varierà molto in base al campo, al giornale e all'argomento specifico. Quindi per quel caso basta rivedere gli articoli correlati e vedere cosa fanno.


Grazie. Ma quale regolazione è stata effettivamente utilizzata? Tukey o leccio? Perché entrambi appaiono nel test post hoc?
Ping Tang,

@PingTang Prego. È la correzione Bonferroni-Holm del confronto multiplo di tutte le coppie. Questa è solo un'opzione, ovviamente. Potresti anche fare summary(glht(model, linfct = mcp(Group = "Tukey"))). Se vuoi vedere le descrizioni accademiche / statistiche complete dei vari test che possono essere eseguiti controlla i riferimenti in ?glhte multicomppiù in generale. Penso che Hsu 1996 sarebbe il principale.
Hack-R,

3
@PingTang, la mcpfunzione, il Group = Tukeygiusto significa confrontare tutti i gruppi a coppie nella variabile "Gruppo". Non significa una regolazione Tukey.
Sal Mangiafico,
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.