web-dev-qa-db-ja.com

Rのaov()エラー項:bw Error(id)とError(id / timevar)の仕様の違いは何ですか?

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)) 

なぜそれが起こるのですか?どのバリアントが正しいですか?

13
NeverTim

これは、「古典的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からランダムな効果がありますが、timevartimevarレベル内にネストされたidで修正します。

aov(depvar~timevar+Error(id))

これは、他の変数に制約のない変量効果としてidを採用しているだけです。

出典: http://conjugateprior.org/2013/01/formulae-in-r-anova/

This も役立つ可能性があります。これは、分散分析を検討するコードであり、ANOVAの学習に関するいくつかの推奨事項があります。

6
Eric Leung

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内(モデルの基本的な残差項であるErrorWithin効果、つまり個々の観測値自体の変量効果も得られます)。

では、データに対する正しいアプローチは何ですか?

これは、1)データが実際にどのように構造化されているか、および2)実行する予定のモデルによって異なります。注:構造または正しいモデルを決定するためにデータに対して実行できる決定的なテストはありません。これは、計算ではなく思考の練習です。

提供したモデルの例では、結果varがあり、次にグループ化変数groupid、そして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
_

(上記のリンクに加えて、 ランダム効果と固定効果 に関する追加のガイダンスがあります)

1
Rose Hartman