¿Cómo realizar una prueba post-hoc en el modelo lmer?

18

Este es mi marco de datos:

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)

Luego ejecuto un modelo de efectos lineales mixtos para comparar la diferencia de los 3 grupos en "Valor", donde "Asunto" es el factor aleatorio:

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

Los resultados son:

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    

Sin embargo, ¿cómo comparar Group2 con Group3? ¿Qué es la convención en artículo académico?

Ping Tang
fuente

Respuestas:

16

Podrías usar emmeans::emmeans()o lmerTest::difflsmeans(), o multcomp::glht().

Prefiero emmeans(anteriormente lsmeans)

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

Note difflsmeansno puede corregir comparaciones múltiples, y utiliza el método Satterthwaite para calcular los grados de libertad por defecto en lugar del método Kenward-Roger utilizado por los medios.

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

El multcomp::glht()método se describe en la otra respuesta a esta pregunta, de Hack-R.

Además, puede obtener los valores p de ANOVA cargando lmerTesty luego usando anova.

library(lmerTest)
anova(model)

Para ser claros, pretendías que el Valor se evaluara tres veces para cada asignatura, ¿verdad? Parece que el grupo está dentro de las asignaturas, no entre las asignaturas.

Kayle Sawyer
fuente
1
Solo quiero agregar a la respuesta de Kayle Sawyer que el paquete lsmeans está en desuso en favor de los emmeans .
Downhiller
Tenga en cuenta que si especifica la biblioteca, debe usar lmerTest :: lmer (), no lme4 :: lmer () para anova () para mostrar los valores p.
Kayle Sawyer
11

Una vez que haya ajustado su lmermodelo, puede realizar ANOVA, MANOVA y múltiples procedimientos de comparación en el objeto modelo, de esta manera:

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)

En cuanto a la convención en artículos académicos, eso variará mucho según el campo, la revista y el tema específico. Entonces, para ese caso, solo revise los artículos relacionados y vea qué hacen.

Hack-R
fuente
Gracias. ¿Pero qué ajuste se usó realmente? Tukey o Holm? ¿Por qué ambos aparecen en la prueba post-hoc?
Ping Tang
@PingTang De nada. Es la corrección de Bonferroni-Holm de la comparación múltiple de todos los pares. Esa es solo una opción, por supuesto. También podrías hacer summary(glht(model, linfct = mcp(Group = "Tukey"))). Si desea ver las descripciones académicas / estadísticas completas de las diversas pruebas que se pueden realizar, consulte las referencias ?glhty, de manera multicompmás general. Creo que Hsu 1996 sería el principal.
Hack-R
3
@PingTang, la mcpfunción, el Group = Tukeymedio justo para comparar todos los grupos por pares en la variable "Grupo". No significa un ajuste de Tukey.
Sal Mangiafico