我正在对分为 9 个类别的变量进行方差分析。
av <- aov(Z~Climes)
其中 Z 是一个包含值的向量,Climes 包含要执行方差分析的 9 个类别,请记住,每个类别中的样本数量略有不同。
现在我想要一个详细的输出(例如,JMP 为我提供了一个 9*9 矩阵,它为每个类别对提供配对比较,即 t 检验结果)。
类的输出对象是否包含aov
此信息?如果确实如此,我在文档中看不到它,如果没有,是否还有其他功能可以在 R 中执行详细的方差分析?
要回答您的第一个问题,否:您的aov
对象根据要求包含有关模型拟合的信息,而不是事后比较。它甚至不会评估(残差的)分布假设、同方差性检验等,这也不是我们期望在 ANOVA 表中看到的。但是,您可以自由(当然强烈建议)通过评估模型拟合、检查假设等来补充您的分析。
关于你的第二个问题。多重比较是单独处理的,使用例如pairwise.t.test()
(对多个测试进行校正或不进行校正)、TukeyHSD()
(通常对平衡数据最有效)、如@MYaseen208 所指出的multcomp(请参阅参考资料)或multtest包。其中一些测试将假设 ANOVA F 检验很重要,其他程序更灵活,但这完全取决于您想要做什么以及它是否听起来像是解决手头问题的合理方法(参见 @DWin 的评论)。那么为什么 R 会自动提供它们呢?glht()
作为说明,请考虑以下模拟数据集(平衡的单向方差分析):
dfrm <- data.frame(x=rnorm(100, mean=10, sd=2),
grp=gl(5, 20, labels=letters[1:5]))
其中组均值和标准差如下:
+-------+-+---+---------+--------+
| | | N | Mean | SD |
+-------+-+---+---------+--------+
|grp |a| 20|10.172613|2.138497|
| |b| 20|10.860964|1.783375|
| |c| 20| 9.910586|2.019536|
| |d| 20| 9.458459|2.228867|
| |e| 20| 9.804294|1.547052|
+-------+-+---+---------+--------+
|Overall| |100|10.041383|1.976413|
+-------+-+---+---------+--------+
With JMP, we have a non-significant F(4,95)=1.43 and the following results (I asked for pairwise t-tests):
(P-values are shown in the last column.)
Note that those t-tests are not protected against Type I error inflation.
With R, we would do:
aov.res <- aov(x ~ grp, data=dfrm)
with(dfrm, pairwise.t.test(x, grp, p.adjust.method="none"))
You can check what is stored in aov.res
by issuing str(aov.res)
at the R prompt. Tukey HSD tests can be carried out using either
TukeyHSD(aov.res) # there's a plot method as well
or
library(multcomp)
glht(aov.res, linfct=mcp(grp="Tukey")) # also with a plot method