首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中Aov和lm的不同对比结果

R中Aov和lm的不同对比结果
EN

Stack Overflow用户
提问于 2013-07-03 06:56:39
回答 1查看 1.9K关注 0票数 0

我很难从aov()和lm()中获得与R匹配的对比度。我非常确定这是因为我不完全理解发生了什么,也不知道如何指定适当的对比度,但我想我还是要问一下。

R默认情况下对lm()和aov()使用处理对比,这意味着它将因子的每个级别与基线级别进行对比。我可以在lm()的结果中看到:

代码语言:javascript
复制
data(InsectSprays)

lmMod <- lm(count ~ spray, data=InsectSprays)
summary(lmMod)

将截距加到每个系数上,得到的平均值与tapply()计算的平均值相同。但是,尝试用aov()重现这些对比会得到不同的结果。

代码语言:javascript
复制
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)。

我已经尝试过自己使用和到零效果重新编码对比度:

代码语言:javascript
复制
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)。

我觉得我遗漏了一些基本的东西,但我还没能弄清楚。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-03 12:20:50

aov做的是顺序平方和(类型I);lm做的是调整后的平方和(类型II)。

要进行比较,请将lm与手动计算的虚拟变量一起使用。

代码语言:javascript
复制
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结果相同的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17437166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档