反復測定計画のANOVAはどのように計算されますか:Rのaov()vs lm()


13

タイトルはそれをすべて言っており、私は混乱しています。以下は、Rで反復測定aov()を実行し、同等のlm()呼び出しと考えたものを実行しますが、異なる誤差残差を返します(ただし、平方和は同じです)。

aov()の残差と近似値は、モデルで使用されるものです。これらの平方和は、summary(my.aov)で報告されるモデル/残余平方和のそれぞれに加算されるためです。それでは、反復測定設計に適用される実際の線形モデルは何ですか?

set.seed(1)
# make data frame,
# 5 participants, with 2 experimental factors, each with 2 levels
# factor1 is A, B
# factor2 is 1, 2
DF <- data.frame(participant=factor(1:5), A.1=rnorm(5, 50, 20), A.2=rnorm(5, 100, 20), B.1=rnorm(5, 20, 20), B.2=rnorm(5, 50, 20))

# get our experimental conditions
conditions <- names(DF)[ names(DF) != "participant" ]

# reshape it for aov
DFlong <- reshape(DF, direction="long", varying=conditions, v.names="value", idvar="participant", times=conditions, timevar="group")

# make the conditions separate variables called factor1 and factor2
DFlong$factor1 <- factor( rep(c("A", "B"), each=10) )
DFlong$factor2 <- factor( rep(c(1, 2), each=5) )

# call aov
my.aov <- aov(value ~ factor1*factor2 + Error(participant / (factor1*factor2)), DFlong)

# similar for an lm() call
fit <- lm(value ~ factor1*factor2 + participant, DFlong)

# what's aov telling us?
summary(my.aov)

# check SS residuals
sum(residuals(fit)^2)       # == 5945.668

# check they add up to the residuals from summary(my.aov)
2406.1 + 1744.1 + 1795.46   # == 5945.66

# all good so far, but how are the residuals in the aov calculated?
my.aov$"participant:factor1"$residuals

#clearly these are the ones used in the ANOVA:
sum(my.aov$"participant:factor1"$residuals ^ 2)

# this corresponds to the factor1 residuals here:
summary(my.aov)


# but they are different to the residuals reported from lm()
residuals(fit)
my.aov$"participant"$residuals
my.aov$"participant:factor1"$residuals
my.aov$"participant:factor1:factor2"$residuals

1
これがあなたの言っていることかどうかはわかりませんが、次のようにの相互作用に適合するとparticipant、すべてのSSを見つけることができますanova(lm(value ~ factor1*factor2*participant, DFlong))
カラカル

1
ああ、それは役に立ちます、モデルlm(value〜factor1 * factor2 * participant、DFlong)から、平方和は実際にどのように計算されますか?すなわち、anova()は何をしていますか?
トレブ

回答:


13

それについて考えるための一つの方法は、3-階乗のIVの被験者ANOVA間のような状況を扱うことですparticipantfactor1factor2、および1のセルサイズanova(lm(value ~ factor1*factor2*participant, DFlong))この3ウェイANOVA(3つの主効果、3中のすべてのエフェクトのための計算すべてのSS 1次相互作用、1次相互作用)。各セルには1人しかいないため、完全なモデルにはエラーがなく、上記の呼び出しでanova()はF検定を計算できません。しかし、SSは設計内の2階乗の場合と同じです。

anova()実際に効果のSSをどのように計算しますか?順次モデル比較(タイプI)を介して:問題の効果のない制限付きモデルと、その効果を含む制限のないモデルに適合します。この効果に関連するSSは、両モデル間の誤差SSの違いです。

# get all SS from the 3-way between subjects ANOVA
anova(lm(value ~ factor1*factor2*participant, DFlong))

dfL <- DFlong   # just a shorter name for your data frame
names(dfL) <- c("id", "group", "DV", "IV1", "IV2")   # shorter variable names

# sequential model comparisons (type I SS), restricted model is first, then unrestricted
# main effects first
anova(lm(DV ~ 1,      dfL), lm(DV ~ id,         dfL))  # SS for factor id
anova(lm(DV ~ id,     dfL), lm(DV ~ id+IV1,     dfL))  # SS for factor IV1
anova(lm(DV ~ id+IV1, dfL), lm(DV ~ id+IV1+IV2, dfL))  # SS for factor IV2

# now first order interactions
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+id:IV1,  dfL))  # SS for id:IV1
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+id:IV2,  dfL))  # SS for id:IV2
anova(lm(DV ~ id+IV1+IV2, dfL), lm(DV ~ id+IV1+IV2+IV1:IV2, dfL))  # SS for IV1:IV2

# finally the second-order interaction id:IV1:IV2
anova(lm(DV ~ id+IV1+IV2+id:IV1+id:IV2+IV1:IV2,            dfL),
      lm(DV ~ id+IV1+IV2+id:IV1+id:IV2+IV1:IV2+id:IV1:IV2, dfL))

次にid:IV1、制限付きモデルの誤差SSから非制限付きモデルの誤差SSを減算することにより、相互作用に関連付けられた効果SSを確認します。

sum(residuals(lm(DV ~ id+IV1+IV2,        dfL))^2) -
sum(residuals(lm(DV ~ id+IV1+IV2+id:IV1, dfL))^2)

これで、すべての「生の」効果SSが得られたので、効果SSをテストするための正しいエラー用語を選択するだけで、被験者内テストを構築できます。たとえば、factor1の相互作用効果SSに対して効果SSをテストしますparticipant:factor1

モデル比較アプローチの優れた紹介として、Maxwell&Delaney(2004)をお勧めします。実験の設計とデータの分析。


素晴らしい答えです。ANOVAが何をしているかを最終的に理解するのに本当に役立ちました。本の参照もありがとう!
トレブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.