0

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) ことを示しています。

何か基本的なことが欠けているように感じますが、それを理解できていません。どんな助けでも大歓迎です。

4

1 に答える 1

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結果と同じ結果を返しますがaovsummaryは結果と同じ結果を返しますlm

于 2013-07-03T04:20:50.120 に答える