Як виконати пост-хок-тест на lmer-моделі?


18

Це мій кадр даних:

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)

Потім я запускаю лінійно-змішану модель ефектів, щоб порівняти різницю 3 груп на "Значення", де "Тема" є випадковим фактором:

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

Результати:

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    

Однак як порівняти Group2 з Group3? Що таке конвенція в академічній статті?

Відповіді:


16

Ви можете використовувати emmeans::emmeans()або lmerTest::difflsmeans(), або multcomp::glht().

Я віддаю перевагу emmeans(раніше lsmeans).

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

Примітка difflsmeansне може виправити для декількох порівнянь і використовує метод Satterthwaite для обчислення ступенів свободи за замовчуванням замість методу Кенворда-Роджера, який використовується emmeans.

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

multcomp::glht()Метод описаний в іншу відповідь на це питання, по Hack-R.

Також ви можете отримати p-значення ANOVA, завантаживши lmerTestта використовуючи anova.

library(lmerTest)
anova(model)

Щоб було зрозуміло, ви мали намір оцінити значення три рази для кожного предмета, правда? Схоже, що група є всередині суб'єктів, а не між суб'єктами.


1
Я просто хочу додати у відповідь Кайлі Сойєр про те, що пакет lsmeans застаряється на користь emmeans .
Downhiller

Зверніть увагу, якщо ви вказуєте бібліотеку, ви повинні використовувати lmerTest :: lmer (), а не lme4 :: lmer () для anova (), щоб показати p-значення.
Кейл Сойєр

11

Після того, як ви підходите до своєї lmerмоделі, ви можете виконати ANOVA, MANOVA та кілька процедур порівняння на об'єкті моделі, наприклад:

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)

Що стосується конвенції в наукових працях, то це буде сильно відрізнятися залежно від галузі, журналу та конкретної тематики. Тож для цього випадку просто перегляньте відповідні статті та подивіться, що вони роблять.


Дякую. Але яке коригування було використано насправді? Туке чи холм? Чому обидва з'являються в пост-хок-тесті?
Ping Tang

@PingTang Безкоштовно Це корекція Бонферроні-Холма для багаторазового порівняння. Це, звичайно, лише один варіант. Ви також можете зробити summary(glht(model, linfct = mcp(Group = "Tukey"))). Якщо ви хочете побачити повний академічний / статистичний опис різних тестів, які можна виконати, ознайомтеся з посиланнями ?glhtта multicompзагалом. Я думаю, що Hsu 1996 був би головним.
Hack-R

3
@PingTang, mcpфункція, Group = Tukeyсправедливий означає порівняння всіх парних груп у змінній "Group". Це не означає коригування Tukey.
Sal Mangiafico
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.