Eu realizei uma ANOVA de três medidas repetidas; que análises post-hoc são válidas?
Este é um design totalmente equilibrado (2x2x2) com um dos fatores que possui uma medida repetida dentro dos sujeitos. Estou ciente das abordagens multivariadas para ANOVA de medidas repetidas em R, mas meu primeiro instinto é prosseguir com um estilo simples de ANOVA aov ():
aov.repeated <- aov(DV ~ IV1 * IV2 * Time + Error(Subject/Time), data=data)
DV = variável de resposta
IV1 = variável independente 1 (2 níveis, A ou B)
IV2 = variável independente 2 (2 níveis, Sim ou Não)
IV3 = Tempo (2 níveis, Antes ou Depois)
Assunto = ID do sujeito (40 indivíduos no total, 20 para cada nível de IV1: nA = 20, nB = 20)
summary(aov.repeated)
Error: Subject
Df Sum Sq Mean Sq F value Pr(>F)
IV1 1 5969 5968.5 4.1302 0.049553 *
IV2 1 3445 3445.3 2.3842 0.131318
IV1:IV2 1 11400 11400.3 7.8890 0.007987 **
Residuals 36 52023 1445.1
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Error: Subject:Time
Df Sum Sq Mean Sq F value Pr(>F)
Time 1 149 148.5 0.1489 0.701906
IV1:Time 1 865 864.6 0.8666 0.358103
IV2:Time 1 10013 10012.8 10.0357 0.003125 **
IV1:IV2:Time 1 852 851.5 0.8535 0.361728
Residuals 36 35918 997.7
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Como alternativa, eu estava pensando em usar o pacote nlme para uma ANOVA no estilo lme:
aov.repeated2 <- lme(DV ~ IV1 * IV2 * Time, random = ~1|Subject/Time, data=data)
summary(aov.repeated2)
Fixed effects: DV ~ IV1 * IV2 * Time
Value Std.Error DF t-value p-value
(Intercept) 99.2 11.05173 36 8.975972 0.0000
IV1 19.7 15.62950 36 1.260437 0.2156
IV2 65.9 15.62950 36 4.216385 0.0002 ***
Time 38.2 14.12603 36 2.704228 0.0104 *
IV1:IV2 -60.8 22.10346 36 -2.750701 0.0092 **
IV1:Time -26.2 19.97722 36 -1.311494 0.1980
IV2:Time -57.8 19.97722 36 -2.893295 0.0064 **
IV1:IV2:Time 26.1 28.25206 36 0.923826 0.3617
Meu primeiro instinto post-hoc de interações bidirecionais significativas com Tukey contrasta usando glht () do pacote multcomp:
data$IV1IV2int <- interaction(data$IV1, data$IV2)
data$IV2Timeint <- interaction(data$IV2, data$Time)
aov.IV1IV2int <- lme(DV ~ IV1IV2int, random = ~1|Subject/Time, data=data)
aov.IV2Timeint <- lme(DV ~ IV2Timeint, random = ~1|Subject/Time, data=data)
IV1IV2int.posthoc <- summary(glht(aov.IV1IV2int, linfct = mcp(IV1IV2int = "Tukey")))
IV2Timeint.posthoc <- summary(glht(aov.IV2Timeint, linfct = mcp(IV2Timeint = "Tukey")))
IV1IV2int.posthoc
#A.Yes - B.Yes == 0 0.94684
#B.No - B.Yes == 0 0.01095 *
#A.No - B.Yes == 0 0.98587 I don't care about this
#B.No - A.Yes == 0 0.05574 . I don't care about this
#A.No - A.Yes == 0 0.80785
#A.No - B.No == 0 0.00346 **
IV2Timeint.posthoc
#No.After - Yes.After == 0 0.0142 *
#Yes.Before - Yes.After == 0 0.0558 .
#No.Before - Yes.After == 0 0.5358 I don't care about this
#Yes.Before - No.After == 0 0.8144 I don't care about this
#No.Before - No.After == 0 0.1941
#No.Before - Yes.Before == 0 0.8616
O principal problema que vejo nessas análises post-hoc são algumas comparações que não são úteis para minhas hipóteses.
Quaisquer sugestões para uma análise post-hoc apropriada são muito apreciadas, obrigado.
Editar: pergunta e resposta relevantes que apontam para o teste de matrizes de contraste manuais
Error
termo aov()
dessa maneira para especificar que Time
é o fator dentro dos grupos. De Baron Error(subj/(color + shape))
parece ser usado da mesma maneira.
lme
modelo, não estou claro sobre o uso adequado de /
. Como você especificar Time
como o fator dentro de-grupos como na Error()
com aov()
?
/
é usado para denotar aninhamento (como normalmente visto em um experimento de plotagem dividida), diferentemente de seu uso noError
termoaov()
em que indica principalmente como criar estratos de erro .