aov(depvar~timevar+Error(id))
とaov(depvar~timevar+Error(id/timevar))
式の仕様の違いは何ですか?これらの2つのバリアントは、わずかに異なる結果を生成します。
同じ質問がかつてここで尋ねられました: https://stats.stackexchange.com/questions/60108/how-to-write-the-error-term-in-repeated-measures-anova-in-r ただし、より適切な例で繰り返したいと思います。
これが私が作成した例です:
var=rep(NA,180)
id=rep(1:20,each=180/20)
group=rep(rep(1:2,each=9),180/(9*2))
time1=rep(rep(1:3,each=3),180/(3*3))
time2=rep(c(8,15,20),180/3)
var[group==1&time1==1&time2==8]=runif(10,105,115)
var[group==2&time1==1&time2==8]=runif(10,105,115)
var[group==1&time1==1&time2==15]=runif(10,95,105)
var[group==2&time1==1&time2==15]=runif(10,95,105)
var[group==1&time1==1&time2==20]=runif(10,85,95)
var[group==2&time1==1&time2==20]=runif(10,85,95)
var[group==1&time1==2&time2==8]=runif(10,95,105)
var[group==2&time1==2&time2==8]=runif(10,95,105)
var[group==1&time1==2&time2==15]=runif(10,85,95)
var[group==2&time1==2&time2==15]=runif(10,75,85)
var[group==1&time1==2&time2==20]=runif(10,75,85)
var[group==2&time1==2&time2==20]=runif(10,65,75)
var[group==1&time1==3&time2==8]=runif(10,95,105)
var[group==2&time1==3&time2==8]=runif(10,95,105)
var[group==1&time1==3&time2==15]=runif(10,85,95)
var[group==2&time1==3&time2==15]=runif(10,75,85)
var[group==1&time1==3&time2==20]=runif(10,75,85)
var[group==2&time1==3&time2==20]=runif(10,65,75)
df=data.frame(id,var,group,time1,time2)
df$id=factor(df$id)
df$group=factor(df$group)
df$time1=factor(df$time1)
df$time2=factor(df$time2)
これに対してaov()を実行すると、Error()項の指定に応じてわずかに異なる結果が得られます。
一度だけ:
> summary(aov(var~time1+Error(id),data=df))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 19 958.4 50.44
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7538 3769 30.41 6.72e-12 ***
Residuals 158 19584 124
> summary(aov(var~time1+Error(id/time1),data=df))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 19 958.4 50.44
Error: id:time1
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7538 3769 211.5 <2e-16 ***
Residuals 38 677 18
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 120 18907 157.6
または、両方の期間について(スペースのためにここに出力を入力しないでください。自分で確認できます):
summary(aov(var~group*time1*time2+Error(id/(group*time1*time2)),data=df))
summary(aov(var~group*time1*time2+Error(id),data=df))
なぜそれが起こるのですか?どのバリアントが正しいですか?
これは、「古典的ANOVAの変量効果」セクションでそれぞれの意味を分析するのに役立つブログ投稿です。
ブログから、Error
用語の「分割」が何を意味するかについての要約があります。
aov(Y ~ Error(A), data=d) # Lone random effect
aov(Y ~ B + Error(A/B), data=d) # A random, B fixed, B nested within A
aov(Y ~ (B*X) + Error(A/(B*X)), data=d) # B and X interact within levels of A
だからあなたの質問から、
aov(depvar~timevar+Error(id/timevar))
つまり、id
からランダムな効果がありますが、timevar
をtimevar
レベル内にネストされたid
で修正します。
aov(depvar~timevar+Error(id))
これは、他の変数に制約のない変量効果としてid
を採用しているだけです。
出典: http://conjugateprior.org/2013/01/formulae-in-r-anova/
This も役立つ可能性があります。これは、分散分析を検討するコードであり、ANOVAの学習に関するいくつかの推奨事項があります。
aov(depvar~timevar+Error(id))
とaov(depvar~timevar+Error(id/timevar))
の違いは、ランダム効果としてtimevar
を含めるかどうかです。
変量効果として変数を含める方法は複数あることに注意してください。 aov(depvar~timevar+Error(id*timevar))
またはaov(depvar~timevar+Error(id + timevar))
を使用することもできます。これらはそれぞれまったく異なる意味を持ちますが、データ自体の制約により、同じデータセットに適用すると同様の結果が得られることが多いため、混乱を招く可能性があります。
aov()
で使用されるスラッシュ_/
_は、 ネスト を示します。 _/
_を使用すると、Rは自動的にそれを下の変数の主効果に加えて、下と上の間の交互作用に展開します。たとえば、_A/B
_は自動的に_A + A:B
_に展開されます。これは、_A*B
_が自動的に_A + B + A:B
_に展開される方法と似ていますが、ネストを使用すると、ネスト内の変数がネストの外に表示されることはありません(つまり、B
の主な効果はありません。独自)。
この拡張が出力で発生していることがわかります。
_> summary(aov(var~time1+Error(id / time1)))
Error: id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 1 52.24 52.24
Error: id:time1
Df Sum Sq Mean Sq
time1 1 4291 4291
Error: Within
Df Sum Sq Mean Sq F value Pr(>F)
time1 1 1239 1238.7 10.19 0.00167 **
Residuals 176 21399 121.6
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
_
Error
の用語は、変量効果を示します。ネストのベースであるためid
の主効果用に、_time1
_がネストされているためid
と_time1
_の間の相互作用用に1つ取得することに注意してください。 id
内(モデルの基本的な残差項であるError
のWithin
効果、つまり個々の観測値自体の変量効果も得られます)。
これは、1)データが実際にどのように構造化されているか、および2)実行する予定のモデルによって異なります。注:構造または正しいモデルを決定するためにデータに対して実行できる決定的なテストはありません。これは、計算ではなく思考の練習です。
提供したモデルの例では、結果var
があり、次にグループ化変数group
とid
、そして2つの時間変数_time1
_のように見えます。および_time2
_。各id
は1つのグループにのみ存在し、両方のグループにまたがっていません。これは、idがグループ内にネストされていることを示しています。
_> table(group, id)
id
group 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
1 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0
2 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9 0 9
_
id
は単一の参加者を指し、_time1
_と_time2
_の9つの測定値は、各参加者の被験者内テストであると想定します(つまり、各参加者は9回測定されました。 var
なので、これは 反復測定設計 )です。
具体的には、var
が問題解決タスクのスコアであり、_time1
_と_time2
_が参加者が問題を調査できる時間と時間であるとします。 '問題を完了するためにそれぞれ与えられます。 _time1
_と_time2
_が交差しているため、各参加者は、状況の組み合わせごとに、タスクを9回完了します。
_> table(time1, time2)
time2
time1 8 15 20
1 20 20 20
2 20 20 20
3 20 20 20
> table(time1, time2, id)
, , id = 1
time2
time1 8 15 20
1 1 1 1
2 1 1 1
3 1 1 1
, , id = 2
time2
time1 8 15 20
1 1 1 1
2 1 1 1
3 1 1 1
(output truncated)
_
参加者はグループでテストされ、参加者の半分はグループ1に、残りの半分はグループ2に参加します。おそらく、研究は教室で行われ、グループ1が1つのクラスで、グループ2が2番目のクラスです。おそらく、グループIDは実際には関心のある変数ではありませんが、グループ間の違いに起因する厄介な差異がある可能性があるため、モデルから除外するべきではありません。たとえば、最初の教室の照明が優れていて、グループ1のすべてのメンバーに、グループ2のメンバーよりもパズルでうまくスコアを付けるチャンスが与えられた可能性があります。
スコア、ID、グループはすべて変量効果であり、time1とtime2は固定効果である必要があります(モデルで異なる考えを持っている場合、これは同じデータで異なる可能性があることに注意してください。たとえば、グループを固定と見なしたい場合があります。リサーチクエスチョン)。
そのモデルを考えると、これはaov()
を使用したモデルの最も完全なバージョンになります。
_aov(var~time1*time2 + Error(group/id/(time1*time2)),data=df)
_
出力は次のとおりです。
_> summary(aov(var~time1*time2 + Error(group/id/(time1*time2)),data=df))
Error: group
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 1 771.7 771.7
Error: group:id
Df Sum Sq Mean Sq F value Pr(>F)
Residuals 18 243.8 13.55
Error: group:id:time1
Df Sum Sq Mean Sq F value Pr(>F)
time1 2 7141 3571 181.6 <2e-16 ***
Residuals 38 747 20
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Error: group:id:time2
Df Sum Sq Mean Sq F value Pr(>F)
time2 2 16353 8176 434.6 <2e-16 ***
Residuals 38 715 19
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Error: group:id:time1:time2
Df Sum Sq Mean Sq F value Pr(>F)
time1:time2 4 214.5 53.63 5.131 0.00103 **
Residuals 76 794.3 10.45
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Warning message:
In aov(var ~ time1 * time2 + Error(group/id/(time1 * time2)), data = df) :
Error() model is singular
_
(上記のリンクに加えて、 ランダム効果と固定効果 に関する追加のガイダンスがあります)