2013-07-02 113 views
0

从aov()和lm()得到的对比度在R中相匹配时,我遇到了麻烦。我很确定这是因为我没有完全理解将要发生的事情或如何指定适当的对比,但我想我会问。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(对< 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))) 

现在,第一个对比给出了同样的p值作为LM(P = 0.604),但最后对比表示治疗F与A显着不同(p< 0.0001),而lm表示不是(p = 0.181)。

我觉得我错过了一些根本性的东西,但我一直没有弄明白。任何帮助,将不胜感激。

+0

对于最后一种方法,如果在所有c1,.. c6中使用0作为-1,则将得到0.181,但对于第一个p <0.0001,因此第二种和最后一种方法在此之下相同;但是有区别,我还是不清楚。查看[这里](http://www.talkstats.com/showthread.php/25952-lm()-and-aov()-for-ANCOVA) – Metrics

回答

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结果。

+0

那种说得通。我想我现在困惑的地方是在做对比时SS的类型如何。我认为对比SS是独立于其他人计算的。 – Nate

+0

不一定,如你在这里看到的。通常对比度不计算SS,而只是使用摘要中的协方差矩阵。我使用'multcomp'包来简化计算。或者,对于单向ANOVA的标准情况,我希望所有两两比较,即TukeyHSD函数。 – Aaron

+0

感谢您的帮助!我想我只是假设计算方差分析的SS,然后使用MSE作为F检验中的分母,从对比度计算出来,这是在之后计算的。这就是我在网上阅读的所有内容都描述了这一点。显然,我有一些阅读要做。 – Nate