我很难从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)。
我觉得我遗漏了一些基本的东西,但我还没能弄清楚。任何帮助都将不胜感激。
发布于 2013-07-03 12:20:50
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结果相同的结果。
https://stackoverflow.com/questions/17437166
复制相似问题