我无法让我的对比从 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 = 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)。
我觉得我错过了一些基本的东西,但我一直无法弄清楚。任何帮助,将不胜感激。