作为初始说明,除非已更改,否则要获得类型 iii 平方和的正确结果,您需要为因子变量设置对比度编码。这可以在lm
调用内部或使用options
. 下面的示例使用options
.
我会谨慎使用HSD.test
具有不平衡设计的类似功能,除非文档说明了它们在这些情况下的使用。文档TukeyHSD
提到它针对“轻度不平衡”设计进行了调整。我不知道HSD.test
处理方式是否不同。您必须检查包的附加文档或该函数引用的原始参考。
附带说明一下,将整个HSD.test
函数括在括号中会导致它打印结果。请参见下面的示例。
一般来说,我建议您使用灵活的emmeans
(née lsmeans
) 或multcomp
软件包来满足您的所有事后比较需求。对于对相互作用进行平均分离或检查治疗之间的对比emmeans
特别有用。[编辑:请注意,我是这些页面的作者。]
对于不平衡设计,您可能希望报告 EM(或 LS)均值而不是算术均值。请参阅SAEPER:什么是最小二乘均值?. [编辑:警告我是本页的作者。] 请注意,在下面的示例中,报告的边际均值emmeans
不同于HSD.test
.
另请注意,“Tukey”中的“Tukey”glht
与 Tukey HSD 或 Tukey-adjusted 比较无关;正如输出所示,它只是为所有成对测试设置了对比。
然而,adjust="tukey"
inemmeans
函数确实意味着使用 Tukey-adjusted 比较,如输出所示。
以下示例部分改编自ARCHBS: One-way Anova。
### EDIT: Some code changed to reflect changes to some functions
### in the emmeans package
if(!require(car)){install.packages("car")}
library(car)
data(mtcars)
mtcars$cyl.f = factor(mtcars$cyl)
mtcars$carb.f = factor(mtcars$carb)
options(contrasts = c("contr.sum", "contr.poly"))
model = lm(mpg ~ cyl.f + carb.f, data=mtcars)
library(car)
Anova(model, type="III")
if(!require(agricolae)){install.packages("agricolae")}
library(agricolae)
(HSD.test(model, "cyl")$groups)
if(!require(emmeans)){install.packages("emmeans")}
library(emmeans)
marginal = emmeans(model,
~ cyl.f)
pairs(marginal, adjust="tukey")
if(!require(multcomp)){install.packages("multcomp")}
library(multcomp)
cld(marginal, adjust="tukey", Letters=letters)
if(!require(multcomp)){install.packages("multcomp")}
library(multcomp)
mc = glht(model,
mcp(cyl.f = "Tukey"))
summary(mc, test=adjusted("single-step"))
cld(mc)