2013-07-02 112 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