Comment effectuer un test post-hoc sur le modèle lmer?

18

Voici ma trame de données:

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)

Ensuite, je lance un modèle d'effets mixtes linéaires pour comparer la différence des 3 groupes sur "Valeur", où "Sujet" est le facteur aléatoire:

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

Les résultats sont:

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    

Cependant, comment comparer Group2 avec Group3? Quelle est la convention dans l'article académique?

Ping Tang
la source

Réponses:

16

Vous pouvez utiliser emmeans::emmeans()ou lmerTest::difflsmeans(), ou multcomp::glht().

Je préfère emmeans(précédemment lsmeans).

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

Remarque difflsmeansne peut pas corriger les comparaisons multiples et utilise la méthode Satterthwaite pour calculer les degrés de liberté par défaut au lieu de la méthode Kenward-Roger utilisée par emmeans.

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

La multcomp::glht()méthode est décrite dans l'autre réponse à cette question, par Hack-R.

En outre, vous pouvez obtenir les valeurs p de l'ANOVA en chargeant lmerTestpuis en utilisant anova.

library(lmerTest)
anova(model)

Juste pour être clair, vous vouliez que la valeur soit évaluée trois fois pour chaque sujet, non? Il semble que le groupe soit intra-sujets, pas entre sujets.

Kayle Sawyer
la source
1
Je veux juste ajouter à la réponse de Kayle Sawyer que le paquet lsmeans est déprécié en faveur d' emmeans .
Downhiller
Notez que si vous spécifiez la bibliothèque, vous devez utiliser lmerTest :: lmer (), pas lme4 :: lmer () pour anova () pour afficher les valeurs p.
Kayle Sawyer
11

Une fois que vous avez ajusté votre lmermodèle, vous pouvez effectuer des procédures ANOVA, MANOVA et plusieurs comparaisons sur l'objet modèle, comme ceci:

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)

Quant à la convention dans les articles académiques, cela va beaucoup varier selon le domaine, la revue et le sujet spécifique. Donc, dans ce cas, passez en revue les articles connexes et voyez ce qu'ils font.

Hack-R
la source
Je vous remercie. Mais quel ajustement a été réellement utilisé? Tukey ou holm? Pourquoi les deux apparaissent dans le test post-hoc?
Ping Tang
@PingTang Vous êtes les bienvenus. C'est la correction de Bonferroni-Holm de la comparaison multiple toutes paires. C'est juste une option, bien sûr. Vous pourriez aussi fairesummary(glht(model, linfct = mcp(Group = "Tukey"))) . Si vous souhaitez voir la description académique / statistique complète des différents tests qui peuvent être effectués, consultez les références dans ?glhtet multicompplus généralement. Je pense que Hsu 1996 serait le principal.
Hack-R
3
@PingTang, la mcpfonction, le Group = Tukeyjuste moyen de comparer tous les groupes par paire dans la variable "Group". Cela ne signifie pas un ajustement Tukey.
Sal Mangiafico