この投稿の答えが選択されていることは知っています。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 は結果を出すことさえできませんでした。推定に必要なランダム効果の数が、サンプル サイズよりも大きかったのでしょう。