在 R 中使用 ezANOVA 输出的计划对比
Planned contrasts using ezANOVA output in R
我一直在研究使用计划对比而不是 post-hoc t 检验。我通常使用 ezANOVA
(III 型方差分析),但目前似乎不适合使用 ezANOVA
进行计划对比。
另一方面,aov()
是 I 型方差分析(我不想讨论哪种类型最适合哪种设计)。使用 aov()
(针对组间设计)进行计划对比是直接的,但我想在重复测量中进行 III 型方差分析,坦率地说,ezANOVA
具有更加用户友好的输出。
记住 ezANOVA
可以选择包括 return_aov = TRUE
有谁知道使用 ezANOVA
提供的信息进行计划对比的方法吗?
注意: return_aov = TRUE
允许通过以下方式访问 aov
的输出:
summary.lm(ModelName$aov$'Participant:IndependentVariable1')
上面的参与者是在ezANOVA
中添加到wid
的示例变量:
wid = .(Participant)
summary.lm()
通常在 aov
中呈现计划对比的结果时使用,授予组间方差分析而不是重复测量。
我对使用输出对重复测量方差分析进行计划对比特别感兴趣。
赏金目标
我想从这个赏金中实现的目标:
1) 使用 ezANOVA
的输出在重复测量方差分析中进行计划对比。
1A) 使用 ezANOVA
的输出对受试者之间的方差分析进行有计划的对比(这应该相对容易,因此不是要求赏金的必要条件。)
任何虚拟数据都应该足够了,但这里提醒一下 ezANOVA
重复测量方差分析的格式:
ModelName <- ezANOVA(
data = DataSet,
dv = .(DependentVariable),
wid = .(Participant),
within = .(IndependentVariable1, IndependentVariable2),
type=3,
detailed = TRUE,
return_aov = TRUE)
这是一个,可以用来解决这个问题。
您可以找到 PDF here giving some background on planned contrasts 以及他们的工作。
emmeans
包提供了适当的功能来计算 aov
和 aovlist
对象的估计边际均值 (EMM) 的自定义 contrasts/arbitrary 线性函数(参见 here 以获得受支持型号的完整列表)。
下面我使用了ez
包中自带的ANT
数据集。
首先,我们使用 ezANOVA
设置混合因子方差分析。请注意,需要设置正交对比以获得有意义的 III 类测试(例如,参见 John Fox 的回答 here)。
library("ez")
library("emmeans")
# set orthogonal contrasts
options(contrasts = c("contr.sum", "contr.poly"))
data(ANT)
rt_anova <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within = .(cue, flank),
between = group,
type = 3,
return_aov = TRUE)
然后我们可以计算 EMM,比如说所有的侧翼组合。
emm <- emmeans(rt_anova$aov, ~ group * flank)
emm
## group flank emmean SE df lower.CL upper.CL
## Control Neutral 381.5546 1.735392 53.97 378.0753 385.0339
## Treatment Neutral 379.9286 1.735392 53.97 376.4493 383.4079
## Control Congruent 381.6363 1.735392 53.97 378.1570 385.1155
## Treatment Congruent 379.7520 1.735392 53.97 376.2727 383.2313
## Control Incongruent 466.6770 1.735392 53.97 463.1977 470.1563
## Treatment Incongruent 452.2352 1.735392 53.97 448.7559 455.7145
现在可以轻松计算这些 EMM 上的所有成对比较或任何所需的对比。
如果您需要更多关于如何从假设中得出对比权重的详细信息,另请参阅 this book chapter and my answer 。
# all pairwise comparisons
pairs(emm, adjust = "Holm")
## contrast estimate SE df t.ratio p.value
## Control,Neutral - Treatment,Neutral 1.62594836 2.454215 53.97 0.663 1.0000
## Control,Neutral - Control,Congruent -0.08167403 2.473955 36.00 -0.033 1.0000
## Control,Neutral - Treatment,Congruent 1.80259257 2.454215 53.97 0.734 1.0000
## Control,Neutral - Control,Incongruent -85.12239797 2.473955 36.00 -34.407 <.0001
## Control,Neutral - Treatment,Incongruent -70.68062093 2.454215 53.97 -28.800 <.0001
## Treatment,Neutral - Control,Congruent -1.70762239 2.454215 53.97 -0.696 1.0000
## Treatment,Neutral - Treatment,Congruent 0.17664421 2.473955 36.00 0.071 1.0000
## Treatment,Neutral - Control,Incongruent -86.74834633 2.454215 53.97 -35.347 <.0001
## Treatment,Neutral - Treatment,Incongruent -72.30656929 2.473955 36.00 -29.227 <.0001
## Control,Congruent - Treatment,Congruent 1.88426660 2.454215 53.97 0.768 1.0000
## Control,Congruent - Control,Incongruent -85.04072394 2.473955 36.00 -34.374 <.0001
## Control,Congruent - Treatment,Incongruent -70.59894690 2.454215 53.97 -28.766 <.0001
## Treatment,Congruent - Control,Incongruent -86.92499054 2.454215 53.97 -35.419 <.0001
## Treatment,Congruent - Treatment,Incongruent -72.48321351 2.473955 36.00 -29.299 <.0001
## Control,Incongruent - Treatment,Incongruent 14.44177704 2.454215 53.97 5.884 <.0001
##
## Results are averaged over the levels of: cue
## P value adjustment: holm method for 15 tests
# custom contrasts
contrast(
emm,
list(c1 = c(1, -1, 0, 0, 0, 0), # reproduces first pairwise comparison
# emmean of row 1 - (emmean of row 1 + emmean of row 2) / 2; see EMMs table
# 381.5546 - (379.9286 + 381.6363) / 2
c2 = c(1, -0.5, -0.5, 0, 0, 0))
)
## contrast estimate SE df t.ratio p.value
## c1 1.6259484 2.454215 53.97 0.663 0.5105
## c2 0.7721372 2.136825 43.84 0.361 0.7196
这同样适用于纯粹的受试者内方差分析或受试者间方差分析。
# within-subjects ANOVA
rt_anova_wi <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within = .(cue, flank),
type = 3,
return_aov = TRUE)
emm <- emmeans(rt_anova_wi$aov, ~ cue * flank)
contrast(
emm,
list(c1 = c(1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
c2 = c(1, -0.5, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0))
)
## contrast estimate SE df t.ratio p.value
## c1 47.31005 3.802857 170.34 12.441 <.0001
## c2 50.35320 3.293371 170.34 15.289 <.0001
# between-subjects ANOVA
rt_anova_bw <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within_full = .(cue, flank),
between = group,
type = 3,
return_aov = TRUE)
emm_bw <- emmeans(rt_anova_bw$aov, ~ group)
# custom linear function
contrast(
emm_bw,
list(c1 = c(2/3, 1/2))
)
## contrast estimate SE df t.ratio p.value
## c1 475.2899 0.8213448 18 578.673 <.0001
我一直在研究使用计划对比而不是 post-hoc t 检验。我通常使用 ezANOVA
(III 型方差分析),但目前似乎不适合使用 ezANOVA
进行计划对比。
aov()
是 I 型方差分析(我不想讨论哪种类型最适合哪种设计)。使用 aov()
(针对组间设计)进行计划对比是直接的,但我想在重复测量中进行 III 型方差分析,坦率地说,ezANOVA
具有更加用户友好的输出。
记住 ezANOVA
可以选择包括 return_aov = TRUE
有谁知道使用 ezANOVA
提供的信息进行计划对比的方法吗?
注意: return_aov = TRUE
允许通过以下方式访问 aov
的输出:
summary.lm(ModelName$aov$'Participant:IndependentVariable1')
上面的参与者是在ezANOVA
中添加到wid
的示例变量:
wid = .(Participant)
summary.lm()
通常在 aov
中呈现计划对比的结果时使用,授予组间方差分析而不是重复测量。
我对使用输出对重复测量方差分析进行计划对比特别感兴趣。
赏金目标
我想从这个赏金中实现的目标:
1) 使用 ezANOVA
的输出在重复测量方差分析中进行计划对比。
1A) 使用 ezANOVA
的输出对受试者之间的方差分析进行有计划的对比(这应该相对容易,因此不是要求赏金的必要条件。)
任何虚拟数据都应该足够了,但这里提醒一下 ezANOVA
重复测量方差分析的格式:
ModelName <- ezANOVA(
data = DataSet,
dv = .(DependentVariable),
wid = .(Participant),
within = .(IndependentVariable1, IndependentVariable2),
type=3,
detailed = TRUE,
return_aov = TRUE)
这是一个
您可以找到 PDF here giving some background on planned contrasts 以及他们的工作。
emmeans
包提供了适当的功能来计算 aov
和 aovlist
对象的估计边际均值 (EMM) 的自定义 contrasts/arbitrary 线性函数(参见 here 以获得受支持型号的完整列表)。
下面我使用了ez
包中自带的ANT
数据集。
首先,我们使用 ezANOVA
设置混合因子方差分析。请注意,需要设置正交对比以获得有意义的 III 类测试(例如,参见 John Fox 的回答 here)。
library("ez")
library("emmeans")
# set orthogonal contrasts
options(contrasts = c("contr.sum", "contr.poly"))
data(ANT)
rt_anova <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within = .(cue, flank),
between = group,
type = 3,
return_aov = TRUE)
然后我们可以计算 EMM,比如说所有的侧翼组合。
emm <- emmeans(rt_anova$aov, ~ group * flank)
emm
## group flank emmean SE df lower.CL upper.CL
## Control Neutral 381.5546 1.735392 53.97 378.0753 385.0339
## Treatment Neutral 379.9286 1.735392 53.97 376.4493 383.4079
## Control Congruent 381.6363 1.735392 53.97 378.1570 385.1155
## Treatment Congruent 379.7520 1.735392 53.97 376.2727 383.2313
## Control Incongruent 466.6770 1.735392 53.97 463.1977 470.1563
## Treatment Incongruent 452.2352 1.735392 53.97 448.7559 455.7145
现在可以轻松计算这些 EMM 上的所有成对比较或任何所需的对比。
如果您需要更多关于如何从假设中得出对比权重的详细信息,另请参阅 this book chapter and my answer
# all pairwise comparisons
pairs(emm, adjust = "Holm")
## contrast estimate SE df t.ratio p.value
## Control,Neutral - Treatment,Neutral 1.62594836 2.454215 53.97 0.663 1.0000
## Control,Neutral - Control,Congruent -0.08167403 2.473955 36.00 -0.033 1.0000
## Control,Neutral - Treatment,Congruent 1.80259257 2.454215 53.97 0.734 1.0000
## Control,Neutral - Control,Incongruent -85.12239797 2.473955 36.00 -34.407 <.0001
## Control,Neutral - Treatment,Incongruent -70.68062093 2.454215 53.97 -28.800 <.0001
## Treatment,Neutral - Control,Congruent -1.70762239 2.454215 53.97 -0.696 1.0000
## Treatment,Neutral - Treatment,Congruent 0.17664421 2.473955 36.00 0.071 1.0000
## Treatment,Neutral - Control,Incongruent -86.74834633 2.454215 53.97 -35.347 <.0001
## Treatment,Neutral - Treatment,Incongruent -72.30656929 2.473955 36.00 -29.227 <.0001
## Control,Congruent - Treatment,Congruent 1.88426660 2.454215 53.97 0.768 1.0000
## Control,Congruent - Control,Incongruent -85.04072394 2.473955 36.00 -34.374 <.0001
## Control,Congruent - Treatment,Incongruent -70.59894690 2.454215 53.97 -28.766 <.0001
## Treatment,Congruent - Control,Incongruent -86.92499054 2.454215 53.97 -35.419 <.0001
## Treatment,Congruent - Treatment,Incongruent -72.48321351 2.473955 36.00 -29.299 <.0001
## Control,Incongruent - Treatment,Incongruent 14.44177704 2.454215 53.97 5.884 <.0001
##
## Results are averaged over the levels of: cue
## P value adjustment: holm method for 15 tests
# custom contrasts
contrast(
emm,
list(c1 = c(1, -1, 0, 0, 0, 0), # reproduces first pairwise comparison
# emmean of row 1 - (emmean of row 1 + emmean of row 2) / 2; see EMMs table
# 381.5546 - (379.9286 + 381.6363) / 2
c2 = c(1, -0.5, -0.5, 0, 0, 0))
)
## contrast estimate SE df t.ratio p.value
## c1 1.6259484 2.454215 53.97 0.663 0.5105
## c2 0.7721372 2.136825 43.84 0.361 0.7196
这同样适用于纯粹的受试者内方差分析或受试者间方差分析。
# within-subjects ANOVA
rt_anova_wi <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within = .(cue, flank),
type = 3,
return_aov = TRUE)
emm <- emmeans(rt_anova_wi$aov, ~ cue * flank)
contrast(
emm,
list(c1 = c(1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0),
c2 = c(1, -0.5, -0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0))
)
## contrast estimate SE df t.ratio p.value
## c1 47.31005 3.802857 170.34 12.441 <.0001
## c2 50.35320 3.293371 170.34 15.289 <.0001
# between-subjects ANOVA
rt_anova_bw <- ezANOVA(data = ANT[ANT$error == 0, ],
dv = rt,
wid = subnum,
within_full = .(cue, flank),
between = group,
type = 3,
return_aov = TRUE)
emm_bw <- emmeans(rt_anova_bw$aov, ~ group)
# custom linear function
contrast(
emm_bw,
list(c1 = c(2/3, 1/2))
)
## contrast estimate SE df t.ratio p.value
## c1 475.2899 0.8213448 18 578.673 <.0001