14

Rを使用して反復測定ANOVAを実行しようとしています。さまざまなWebサイトでさまざまな例を調べましたが、発生したエラーについて話しているようには見えません。私は何か重要なことを誤解していると思います。

私が実行しようとしているANOVAは、人間の参加者を使用した実験からのいくつかのデータに基づいています。1つのDVと3つのIVがあります。すべてのIVのすべてのレベルがすべての参加者で実行され、3方向の反復測定/被験者内ANOVAになります。

Rで実行しているコードは次のとおりです。

aov.output = aov(DV~ IV1 * IV2 * IV3 + Error(PARTICIPANT_ID / (IV1 * IV2 * IV3)),
                 data=fulldata)

これを実行すると、次の警告が表示されます。

Error() model is singular

私が間違っているかもしれないアイデアはありますか?

4

2 に答える 2

13

lme4 パッケージの lmer 関数を使用してみてください。ここではおそらく aov 関数は適切ではありません。http://lme4.r-forge.r-project.org/book/Ch4.pdfなどのDougles Bates からの参照を探します(他の章も素晴らしいですが、これは反復測定の章であり、これはイントロです: http://lme4.r-forge.r-project.org/book/Ch1.pdf )。Rコードは同じ場所にあり、縦断データの場合、lme4パッケージやnlmeのような分散モデルのコンポーネントの代わりにOLSにぴったり合うのは最近では一般的に間違っていると考えられているようです。最近の人気は lme4 に大きく追い抜かれています。上記のコメント セクションで参照されている Brian Ripley の投稿では、lme への切り替えも推奨されているだけです。

ちなみに、ジャンプから離れた大きな利点は、典型的な構文を使用して、総平均の調整として各効果のレベルの推定値を取得できることです。

lmer(DV ~ 1  +IV1*IV2*IV3 +(IV1*IV2*IV3|Subject), dataset))

ランダム効果はベクトル値になることに注意してください。

于 2011-04-18T04:04:33.813 に答える
9

この投稿の答えが選択されていることは知っています。aovまたはlmerモデルを多元反復測定データに適合させるときに、正しい誤差項/ランダム効果を指定する方法を指摘したいと思います。両方の独立変数 (IV) が固定されており、互いに交差し、被験者と交差していると仮定します。つまり、すべての被験者が IV のすべての組み合わせにさらされていることを意味します。Kirk のExperimental Deisign: Procedures for the Behavioral Sciences (2013) から取得したデータを使用します。

library(lme4)
library(foreign)
library(lmerTest)
library(dplyr)

file_name <- "http://www.ats.ucla.edu/stat/stata/examples/kirk/rbf33.dta" #1
d <- read.dta(file_name) %>%                                              #2
  mutate(a_f = factor(a), b_f = factor(b), s_f = factor(s))               #3

head(d)
    ##   a b s  y a_f b_f s_f
    ## 1 1 1 1 37   1   1   1
    ## 2 1 2 1 43   1   2   1
    ## 3 1 3 1 48   1   3   1
    ## 4 2 1 1 39   2   1   1
    ## 5 2 2 1 35   2   2   1

この研究では、5 人の被験者 (複数可) が 2 つの治療 (ビートの種類 (a) とトレーニング期間 (b)) にそれぞれ 3 つのレベルでさらされます。結果変数はマイノリティに対する態度です。#3 では、a、b、および s を因子変数 a_f、b_f、および s_f にしました。pとqを a_f と b_f のレベル数 (それぞれ 3)、nサンプル サイズ (5) とします。

この例では、a_f、b_f、およびそれらの相互作用のテストの自由度 ( dfs ) は、 p -1=2、q -1=2、および ( p -1)*( q -1)=4 である必要があります。それぞれ。s_f 誤差項のdfは ( n -1) = 4 であり、(s_f:a_f:b_f) 内の誤差項の df は ( n -1)( pq -1)=32 です。したがって、正しいモデルはこれらのdfsを提供するはずです。

使用するaov

を使用して、さまざまなモデル仕様を試してみましょうaov

aov(y ~ a_f*b_f + Error(s_f), data=d) %>% summary()         # m1

aov(y ~ a_f*b_f + Error(s_f/a_f:b_f), data=d) %>% summary() # m2

aov(y ~ a_f*b_f + Error(s_f/a_f*b_f), data=d) %>% summary() # m3

m1 のようにエラーを指定するだけで、本の値に一致するError(s_f)正しいdfsと F 比が得られます。m2 も m1 と同じ値を返しますが、悪名高い「警告: Error() モデルは特異です」も返します。m3 が変なことをしています。さらに、m1 の残差内 (634.9) を、s_f:a_f (174.2)、s_f:b_f (173.6)、および s_f:a_f:b_f (287.1) の 3 つの誤差項の残差に分割します。これは間違っています。2 因子間 ANOVA を実行すると、3 つの誤差項が得られないからです。複数の誤差項は、2 つの誤差項を必要とする分割計画とは異なり、A、B、および AB の検定に同じ誤差項を使用できるブロック実施要因計画を使用するという点にも反します。

使用するlmer

lmer を使用して同じ dfs と F 値を取得するにはどうすればよいでしょうか? データのバランスがとれている場合、で使用される Kenward-Roger 近似によってlmerTest正確なdfsと F 比が得られます。

lmer(y ~ a_f*b_f + (1|s_f), data=d) %>% anova()         # mem1

lmer(y ~ a_f*b_f + (1|s_f/a_f:b_f), data=d) %>% anova() # mem2

lmer(y ~ a_f*b_f + (1|s_f/a_f*b_f), data=d) %>% anova() # mem3

lmer(y ~ a_f*b_f + (1|s_f:a_f:b_f), data=d) %>% anova() # mem4

lmer(y ~ a_f*b_f + (a_f*b_f|s_f), data=d) %>% anova()   # mem5

ここでもランダム効果を指定するだけ(1|s_f)で、正しいdfsと F-ratios (mem1) が得られます。mem2-5 は結果を出すことさえできませんでした。推定に必要なランダム効果の数が、サンプル サイズよりも大きかったのでしょう。

于 2014-08-08T15:18:57.517 に答える