我无法从aov()和lm()中获得对比以便在R中匹配。我很确定这是因为我不完全了解正在发生的事情或如何指定适当的对比,但我还以为我会问。
R默认情况下对lm()和aov()使用治疗对比,这意味着它将因子的每个级别与基线水平进行对比。我可以在lm()的结果中看到这一点:
data(InsectSprays)
lmMod <- lm(count ~ spray, data=InsectSprays)
summary(lmMod)
将截距添加到每个系数给出与tapply()计算的相同的平均值。然而,尝试用aov()重现这些对比会产生不同的结果。
model1 <- aov(count ~ spray, data = InsectSprays)
summary(model1, split=list(spray=list("Cont1"=1, "Cont2"=2,
"Cont3" = 3, "Cont4" = 4, "Cont5" = 5)))
这里,最后一个p值与lm中对比度的p值相同(p = 0.181),但aov()对比表明喷雾B不同于喷雾A(p <0.0001),而lm说他们并没有什么不同(p = 0.604)。
我尝试使用归零效果重新编码对比:
c1 <- c(-1, 1, 0, 0, 0, 0)
c2 <- c(-1, 0, 1, 0, 0, 0)
c3 <- c(-1, 0, 0, 1, 0, 0)
c4 <- c(-1, 0, 0, 0, 1, 0)
c5 <- c(-1, 0, 0, 0, 0, 1)
contMat <- cbind(c1, c2, c3, c4, c5)
contrasts(InsectSprays$spray) <- contMat
model2 <- aov(count ~ spray, data = InsectSprays)
summary(model2, split=list(spray=list("Cont1"=1, "Cont2"=2,
"Cont3" = 3, "Cont4" = 4, "Cont5" = 5)))
现在,第一个对比度给出与lm相同的p值(p = 0.604),但最后的对比度表示治疗F与A显着不同(p <0.0001),而lm表示它不是(p = 0.181)。
我觉得我缺少一些基本的东西,但我无法弄明白。任何帮助将不胜感激。
答案 0 :(得分:1)
aov
正在进行连续的平方和(类型I); lm
正在调整平方和(II型)。
要进行比较,请将lm
与手动计算的虚拟变量一起使用。
d2 <- data.frame(cbind(count=InsectSprays$count, model.matrix(~spray, data=InsectSprays)))
m2 <- lm(count~0+.,d2)
anova(m2)
summary(m2)
anova
会为您提供与aov
结果相同的结果,而summary
会为您提供与lm
结果相同的结果。