混合効果モデル:グループ化変数のレベル全体でランダム分散成分を比較


14

私は参加者がいて、それぞれが 20回、ある条件で10回、別の条件で10回応答するとします。各条件でを比較する線形混合効果モデルを近似します。以下のパッケージを使用して、この状況をシミュレートする再現可能な例を示します。NYYlme4R

library(lme4)
fml <- "~ condition + (condition | participant_id)"
d <- expand.grid(participant_id=1:40, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

モデルmは、2つの固定効果(条件の切片と勾配)、および3つのランダム効果(参加者ごとのランダム切片、条件の参加者ごとのランダム勾配、切片と勾配の相関)を生成します。

によって定義されたグループ全体で、参加者ごとのランダムインターセプト分散のサイズを統計的に比較しますcondition(つまり、コントロールと実験条件内で赤で強調表示された分散コンポーネントを計算し、コンポーネントのサイズの違いがゼロ以外)。どうすればこれを行うことができますか?

ここに画像の説明を入力してください


ボーナス

モデルがもう少し複雑であるとしましょう:参加者はそれぞれ10回の刺激を20回、1つの条件で10回、別の条件で10回経験します。したがって、交差ランダム効果には、参加者のランダム効果と刺激のランダム効果の2つのセットがあります。再現可能な例を次に示します。

library(lme4)
fml <- "~ condition + (condition | participant_id) + (condition | stimulus_id)"
d <- expand.grid(participant_id=1:40, stimulus_id=1:10, trial_num=1:10)
d <- rbind(cbind(d, condition="control"), cbind(d, condition="experimental"))

set.seed(23432)
d <- cbind(d, simulate(formula(fml), 
                       newparams=list(beta=c(0, .5), 
                                      theta=c(.5, 0, 0, .5, 0, 0), 
                                      sigma=1), 
                       family=gaussian, 
                       newdata=d))

m <- lmer(paste("sim_1 ", fml), data=d)
summary(m)

で定義されたグループ全体で、参加者ごとのランダムな切片分散の大きさを統計的に比較したいと思いconditionます。それをどのように行うのですか?プロセスは上記の状況のプロセスとは異なりますか?


編集

私が探しているものをもう少し具体的にするために、私は知りたいです:

  1. 「各条件内の条件付き平均応答(つまり、各条件のランダムインターセプト値)は、サンプリングエラーのために予想されるものを超えて、互いに大幅に異なる」という質問ですか?理論的にさえ答えられる)?そうでない場合は、なぜですか?
  2. 質問(1)の答えが「はい」の場合、どのように答えますか?R実装を希望しますが、lme4パッケージに縛られていません-たとえば、OpenMxパッケージにマルチグループおよびマルチレベルの分析(https://openmx.ssri.psu。 edu / openmx-features)、これはSEMフレームワークで答えられるべき質問のようなもののようです。

1
@MarkWhite、あなたのコメントに応えて質問を更新しました。つまり、参加者がコントロール条件で応答するときと、実験条件で応答するときの参加者の切片の標準偏差を比較したいということです。私は、統計学的にこれを行うにはしたくすなわち、テストインターセプトの標準偏差の差が0と異なる場合
パトリック・S. Forscher

2
私は答えを書きましたが、それが非常に役立つかどうかわからないので、それで寝ます。問題は、あなたが求めていることを誰もできないと思うことです。インターセプトのランダムな効果は、参加者が制御状態にあるときの参加者の平均の分散です。そのため、実験条件での観測値の分散を見ることができません。インターセプトは人レベルで定義され、条件は観測レベルです。条件間の分散を比較しようとしている場合、条件付き異分散モデルについて考えます。
マークホワイト

2
一連の刺激に応答する参加者がいる論文の改訂と再提出に取り組んでいます。各参加者は複数の条件にさらされ、各刺激は複数の条件で応答を受け取ります。つまり、私の研究は、「ボーナス」の説明で説明したセットアップをエミュレートします。私のグラフの1つでは、参加者の平均的な反応は、他の条件よりも条件の1つで大きな変動があるように見えます。レビューアーは、これが真実かどうかをテストするように頼みました。
パトリックS.フォーシャー

2
グループ化変数の各レベルに対して異なる分散パラメーターを使用してlme4モデルを設定する方法については、stats.stackexchange.com / questions / 322213を参照してください。2つの分散パラメーターが等しいかどうかについて仮説検定を行う方法がわかりません。個人的には、信頼区間を得るために被験者と刺激をブートストラップするか、または何らかの並べ替えのような(リサンプリングに基づく)仮説検定を設定することを常に好みます。
アメーバは、モニカを復活させる

3
@MarkWhiteのコメントに同意します。「ランダムインターセプト分散は互いに実質的に異なります...」という質問はせいぜい不明確で、最悪の場合は無意味です。インターセプトは特定のグループのY値を指すためグループは0)の値を割り当てたため、厳密に言えばグループ間で「切片」を比較することは意味がありません。私が理解しているように、あなたの質問を言い換えるより良い方法は、「参加者の条件A対条件Bの条件付き平均応答の分散は等しくないでしょうか」のようなものだと思います。
ジェイクウェストフォール

回答:


6

この仮説をテストする方法は複数あります。たとえば、@ amoebaで概説されている手順が機能するはずです。しかし、それをテストする最も簡単で最も便利な方法は、2つのネストされたモデルを比較する古き良き比率テストを使用することであるように思えます。このアプローチの潜在的にトリッキーな部分は、単一のパラメーターをドロップアウトすることで、不等分散の望ましい仮説を明確にテストできるように、モデルのペアをセットアップする方法を知ることです。以下にその方法を説明します。

短い答え

独立変数のコントラスト(ゼロの合計)コーディングに切り替えてから、完全なモデルをランダムな勾配とランダムな切片間の相関を強制的に0にするモデルと比較する尤度比検定を実行します。

# switch to numeric (not factor) contrast codes
d$contrast <- 2*(d$condition == 'experimental') - 1

# reduced model without correlation parameter
mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id), data=d)

# full model with correlation parameter
mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id), data=d)

# likelihood ratio test
anova(mod1, mod2)

視覚的な説明/直感

この答えが理にかなっているためには、観測されたデータに対して相関パラメーターの異なる値がどのような意味を持つかを直感的に理解する必要があります。(ランダムに変化する)被験者固有の回帰線を考慮してください。基本的に、相関パラメーターは、ポイントX=0に対して、参加者の回帰直線が「右にファンアウト」(正の相関)または「左にファンアウト」(負の相関)かどうかを制御します。変数。これらのいずれかは、参加者の条件付き平均応答の不等分散を意味します。これを以下に示します。

ランダム相関

このプロットでは、各条件の各被験者についての複数の観測値を無視し、代わりに、各被験者の2つのランダムな平均をプロットし、それらを結ぶ線でその被験者のランダムな傾きを表します。(これは、OPに投稿されたデータではなく、10の仮想被験者からのデータで構成されています。)

強い負の勾配切片の相関がある左側の列では、回帰線は点X=0に対して左側に扇形に広がります。あなたは、図中にはっきりと見ることができるように条件における被験者のランダムな手段で大きな差異にこのリードをの状態に比べて。X=1X=1

右側の列は、このパターンの逆の鏡像を示しています。この場合、条件に被験者のランダムな手段で大きなばらつきがあるの状態よりも。X=1X=1

中央の列は、ランダムな勾配とランダムな切片が無相関の場合に何が起こるかを示しています。つまり、回帰線は、点基準として、右に扇状に広がるのと同じくらい左に扇状に広がることを意味し。これは、2つの条件における被験者の平均の分散が等しいことを意味します。X=0

ここでは、ダミーコードではなく sum-to-zeroコントラストコーディングスキームを使用することが重要です(つまり、グループを vs.設定しない)。それが唯一の我々は分散が等しい、請求この関係を有することコントラスト符号化方式であればのみ傾き切片相関が0である場合、ビルドしようと下図直感こと。X=0X=1

ここに画像の説明を入力してください

この図が示すのは、両方の列に同じデータセットがありますが、独立変数は2つの異なる方法でコード化されています。左側の列では、コントラストコードを使用しています。これはまさに最初の図の状況です。右側の列では、ダミーコードを使用しています。これにより、インターセプトの意味が変わります。現在、インターセプトは、コントロールグループでの被験者の予測応答を表します。下のパネルは、この変更の結果を示しています。つまり、深い意味でデータが同じであり、両方の場合で条件付き分散が等しい場合でも、勾配切片の相関は0に近くなりません。それでもこれがあまり意味をなさないように思える場合は、この現象について詳しく説明している私の以前の答えを調べてみると役立ちます。

証明

ましょうyijkであるjの応答番目i状況下番目の被写体k。(僕らは、ここで2つだけ条件を有するk次に混合モデルを記述することができるだけのいずれか1または2である)

yijk=αi+βixk+eijk
αi被験者のありますランダムインターセプトしHAVE分散σα2βi被験者のランダム傾きであり、持っている分散σβ2eijk観測レベルの誤差項、及びあるcov(αi,βi)=σαβ

私たちは、その表示したい

var(αi+βix1)=var(αi+βix2)σαβ=0.

この意味合いの左側から始まり、我々は

var(αi+βix1)=var(αi+βix2)σα2+x12σβ2+2x1σαβ=σα2+x22σβ2+2x2σαβσβ2(x12x22)+2σαβ(x1x2)=0.

ゼロ対ゼロのコントラストコードは、x1+x2=0およびx12=x22=x2意味します。その後、我々はさらにために、上記の最後の行を低減することができる

σβ2(x2x2)+2σαβ(x1+x1)=0σαβ=0,
これが証明したかったものです。(含意の他の方向を確立するために、これらの同じステップを逆にたどることができます。)

繰り返しますが、これは、独立変数がコントラスト(合計ゼロ)でコーディングされている場合、各条件における被験者のランダム平均の分散は、ランダムな勾配とランダムな切片間の相関が0 場合にのみ等しいことを示しています。このすべてから持ち帰り点は帰無仮説をテストすることということであるσαβ=0 OPによって記載等しい分散の帰無仮説をテストします。

これは、独立変数が、たとえばダミーコード化されている場合は機能しません。具体的には、我々は、値がプラグ場合x1=0及びx2=1上式に、我々はそれを見つける

var(αi)=var(αi+βi)σαβ=σβ22


これはすでに素晴らしい答えです、ありがとう!これは私の質問に答えるのに最も近いと思うので、私はそれを受け入れて賞金を与えます(期限切れになります)が、時間とエネルギーがあれば代数的正当化を見たいです。
パトリックS.フォーシャー

1
@ PatrickS.Forscher証拠を追加しました
ジェイクウェストフォール

1
@JakeWestfall私のおもちゃの例では、被験者は2つの条件で応答を反転しました。対象は、応答がある場合は、条件Aにと-条件Bで私たちが使用した場合、その後、何がこの主題のためにランダム切片のBLUP値でしょうモデルを?0にしかできないと思います。すべての被験者のBLUPがゼロに等しい場合、ランダム切片の分散もゼロになります。したがって、このモデルはこのおもちゃの例にまったく当てはまりません。対照的に、経由して上記で定義されたモデルは、各被験者のための2つのBLUPsを持つことになり、それらは容易にすることができると- ここに何かが足りませんか?aa(1 | subject)dummyaa
アメーバは、モニカを復活させる

1
説明してくれてありがとう@amoeba それに応じて回答を編集します。
ジェイクウェストフォール

1
@amoebaモデルに相関パラメーターがなくても、BLUPが相関する可能性があることは確かです。しかし、相関パラメータを持つモデルのみが尤度関数にそれを組み込むことができ、それによってそのための「クレジットを受け取る」ことができるので、テスト目的ではプロシージャは意図したとおりに機能すると信じています。つまり、より単純なモデルでBLUPが相関していたとしても、総尤度に関する限り、効果は相関していないように見えるため、LRテストは機能します。私は思う:)
ジェイクウェストフォール

6

モデルパラメーターの有意性は、lme4パッケージに機能がある推定信頼区間を使用してテストできますconfint.merMod

ブートストラップ(たとえば、ブートストラップからの信頼区間を参照)

> confint(m, method="boot", nsim=500, oldNames= FALSE)
Computing bootstrap confidence intervals ...
                                                           2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.32764600 0.64763277
cor_conditionexperimental.(Intercept)|participant_id -1.00000000 1.00000000
sd_conditionexperimental|participant_id               0.02249989 0.46871800
sigma                                                 0.97933979 1.08314696
(Intercept)                                          -0.29669088 0.06169473
conditionexperimental                                 0.26539992 0.60940435 

尤度プロファイル(たとえば、プロファイルの尤度と信頼区間の関係を参照)

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                                          2.5 %     97.5 %
sd_(Intercept)|participant_id                         0.3490878 0.66714551
cor_conditionexperimental.(Intercept)|participant_id -1.0000000 1.00000000
sd_conditionexperimental|participant_id               0.0000000 0.49076950
sigma                                                 0.9759407 1.08217870
(Intercept)                                          -0.2999380 0.07194055
conditionexperimental                                 0.2707319 0.60727448

  • メソッドもありますが'Wald'、これは固定効果にのみ適用されます。

  • lmerTestという名前のパッケージには、ある種のanova(尤度比)タイプの式もありますranova。しかし、私はこれから意味をなさないように思えます。帰無仮説(ランダム効果のゼロ分散)がtrueであるlogLikelihoodの差の分布は、カイ二乗分布ではありません(おそらく参加者と試行の数が多い場合、尤度比検定は意味があります)。


特定のグループの分散

特定のグループの分散の結果を取得するには、再パラメーター化できます

# different model with alternative parameterization (and also correlation taken out) 
fml1 <- "~ condition + (0 + control + experimental || participant_id) "

データフレームに2つの列を追加した場所(これは、相関のない「コントロール」と「実験」を評価する場合にのみ必要です。関数(0 + condition || participant_id)は、条件の異なる要因を非相関として評価しません)

#adding extra columns for control and experimental
d <- cbind(d,as.numeric(d$condition=='control'))
d <- cbind(d,1-as.numeric(d$condition=='control'))
names(d)[c(4,5)] <- c("control","experimental")

lmer、異なるグループの分散を与えます

> m <- lmer(paste("sim_1 ", fml1), data=d)
> m
Linear mixed model fit by REML ['lmerModLmerTest']
Formula: paste("sim_1 ", fml1)
   Data: d
REML criterion at convergence: 2408.186
Random effects:
 Groups           Name         Std.Dev.
 participant_id   control      0.4963  
 participant_id.1 experimental 0.4554  
 Residual                      1.0268  
Number of obs: 800, groups:  participant_id, 40
Fixed Effects:
          (Intercept)  conditionexperimental  
               -0.114                  0.439 

そして、これらにプロファイルメソッドを適用できます。たとえば、現在、confintは、制御および実験の分散の信頼区間を提供します。

> confint(m, method="profile", oldNames= FALSE)
Computing profile confidence intervals ...
                                    2.5 %     97.5 %
sd_control|participant_id       0.3490873 0.66714568
sd_experimental|participant_id  0.3106425 0.61975534
sigma                           0.9759407 1.08217872
(Intercept)                    -0.2999382 0.07194076
conditionexperimental           0.1865125 0.69149396

シンプルさ

尤度関数を使用してより高度な比較を行うこともできますが、道路に沿って近似する多くの方法があります(たとえば、保守的なanova / lrt-testを実行できますが、それは必要ですか?)。

この時点で、実際に分散間のこの(それほど一般的ではない)比較のポイントは何だろうと思います。洗練されすぎているのではないかと思います。なぜ分散代わりの間の(古典的なF-分布に関する)分散間?なぜ信頼区間を報告しないのですか?統計的な問題や実際に主要なトピックである統計的な考慮事項に不必要で疎いかもしれない高度な経路に入る前に、一歩下がって、データとそれが伝えるはずのストーリーを明確にする必要があります。

単純に信頼区間を記述するだけでなく、実際に仮説検定よりもはるかに多くのことを行う必要があるかどうか疑問に思います。仮説検定では、答えはありませんが、母集団の実際の広がりに関する情報は得られません。有意差として報告されるわずかな違いを作成します)。(目的を問わず)さらに深く掘り下げるには、数学的な機械をガイドして適切な単純化を行うために、より具体的な(厳密に定義された)研究質問が必要だと思います(正確な計算が実行可能な場合や、シミュレーション/ブートストラップで概算できますが、それでも一部の設定では適切な解釈が必要です)。フィッシャーの正確検定と比較して、(特定の)質問(分割表について)を正確に解き、

簡単な例

可能な単純さの例を提供するために、個々の平均応答の分散を比較し、比較することにより行われたF検定に基づいて、2つのグループ分散間の差の単純な評価との比較(シミュレーションによる)を以下に示します混合モデルから派生した分散。

j

Y^i,jN(μj,σj2+σϵ210)

σϵσjj={1,2}

これは、サンプルに基づいたFスコアは別として、モデルからの予測分散(または平方誤差の合計)に基づいてFスコアが計算されることを意味する以下のグラフのシミュレーションで確認できます。

正確さの違いの例

σj=1=σj=2=0.5σϵ=1

いくつかの違いがあることがわかります。この違いは、混合効果線形モデルが(ランダム効果の)二乗誤差の合計を異なる方法で取得しているという事実に起因する可能性があります。そして、これらの2乗誤差項は(もはや)単純なカイ2乗分布として十分に表現されていませんが、密接に関連しており、近似することができます。

σj=1σj=2Y^i,jσjσϵ

力の違いの例

σj=1=0.5σj=2=0.25σϵ=1

したがって、平均に基づくモデルは非常に正確です。しかし、それほど強力ではありません。これは、正しい戦略があなたが望むもの/必要なものに依存することを示しています。

上記の例では、右尾の境界を2.1および3.1に設定すると、分散が等しい場合(人口10 000ケースの103および104)に人口の約1%が得られますが、分散が等しくない場合はこれらの境界が異なりますたくさん(ケースの5334と6716を与える)

コード:

set.seed(23432)

# different model with alternative parameterization (and also correlation taken out)
fml1 <- "~ condition + (0 + control + experimental || participant_id) "
fml <- "~ condition + (condition | participant_id)"

n <- 10000

theta_m <- matrix(rep(0,n*2),n)
theta_f <- matrix(rep(0,n*2),n)

# initial data frame later changed into d by adding a sixth sim_1 column
ds <- expand.grid(participant_id=1:40, trial_num=1:10)
ds <- rbind(cbind(ds, condition="control"), cbind(ds, condition="experimental"))
  #adding extra columns for control and experimental
  ds <- cbind(ds,as.numeric(ds$condition=='control'))
  ds <- cbind(ds,1-as.numeric(ds$condition=='control'))
  names(ds)[c(4,5)] <- c("control","experimental")

# defining variances for the population of individual means
stdevs <- c(0.5,0.5) # c(control,experimental)

pb <- txtProgressBar(title = "progress bar", min = 0,
                    max = n, style=3)
for (i in 1:n) {

  indv_means <- c(rep(0,40)+rnorm(40,0,stdevs[1]),rep(0.5,40)+rnorm(40,0,stdevs[2]))
  fill <- indv_means[d[,1]+d[,5]*40]+rnorm(80*10,0,sqrt(1)) #using a different way to make the data because the simulate is not creating independent data in the two groups 
  #fill <- suppressMessages(simulate(formula(fml), 
  #                     newparams=list(beta=c(0, .5), 
  #                                    theta=c(.5, 0, 0), 
  #                                    sigma=1), 
  #                     family=gaussian, 
  #                     newdata=ds))
  d <- cbind(ds, fill)
  names(d)[6] <- c("sim_1")


  m <- lmer(paste("sim_1 ", fml1), data=d)
  m
  theta_m[i,] <- m@theta^2

  imeans <- aggregate(d[, 6], list(d[,c(1)],d[,c(3)]), mean)
  theta_f[i,1] <- var(imeans[c(1:40),3])
  theta_f[i,2] <- var(imeans[c(41:80),3])

  setTxtProgressBar(pb, i)
}
close(pb)

p1 <- hist(theta_f[,1]/theta_f[,2], breaks = seq(0,6,0.06))       
fr <- theta_m[,1]/theta_m[,2]
fr <- fr[which(fr<30)]
p2 <- hist(fr, breaks = seq(0,30,0.06))



plot(-100,-100, xlim=c(0,6), ylim=c(0,800), 
     xlab="F-score", ylab = "counts [n out of 10 000]")
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # means based F-score
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,6), ylim=c(0,800), add=T)  # model based F-score
fr <- seq(0, 4, 0.01)
lines(fr,df(fr,39,39)*n*0.06,col=1)
legend(2, 800, c("means based F-score","mixed regression based F-score"), 
       fill=c(rgb(0,0,1,1/4),rgb(1,0,0,1/4)),box.col =NA, bg = NA)
legend(2, 760, c("F(39,39) distribution"), 
       lty=c(1),box.col = NA,bg = NA)
title(expression(paste(sigma[1]==0.5, " , ", sigma[2]==0.5, " and ", sigma[epsilon]==1)))

これは便利ですが、2つの条件の分散を比較する方法についての質問には対処していないようです。
アメーバは、モニカを復活させる

@amoebaこの答えが問題の核心であることがわかりました(ランダム分散コンポーネントのテストについて)。OPが正確に求めているのは、テキスト全体を読むのが難しいことです。「ランダム切片の分散」とは何を指しますか?(インターセプトに関連する複数形は私を混乱させます)1つの可能なケースはsim_1 ~ condition + (0 + condition | participant_id)"、インターセプト用とエフェクト用の2つのパラメーターではなく、2つのパラメーター(各グループに1つ)にパラメーター化を取得するモデルを使用することですグループごとに組み合わせる必要があります)。
セクストゥスエンピリカス

各被験者は、条件Aでいくつかの平均応答と条件Bでのいくつかの平均応答を持っている問題は、Aの被験者間変動はB.の被験者間変動と異なっているかどうかである
アメーバは回復モニカ言う

これは、「グループ化変数のレベル全体でランダム分散コンポーネントを比較する」というタイトルのタスクを完了しません。質問の本文に紛らわしいタイプミスがあることに気付きましたが、これは修正しました。また、質問の文言をさらに明確にしようとしました。
パトリックS.フォーシャー

car::linearHypothesisTestmath.furman.edu/~dcs/courses/math47/R/library/car/html/…)を使用して質問に答えることができる場合があります。これにより、ユーザーは適合モデルで任意の仮説をテストできます。ただし、@ amoebaの方法を使用して、同じモデルに適合したモデルで両方のランダム切片を取得する必要があるため、これらをこの関数と比較できます。また、このメソッドの有効性についても少し不確かです。
パトリックS.フォーシャー

5

比較的簡単な方法の1つanovaは、lme4FAQで説明されているように、尤度比テストを使用することです。

分散が制約されていない(つまり、2つの異なる分散が許可されている)完全なモデルから始めて、2つの分散が等しいと仮定される1つの制約付きモデルに適合します。それらを単純に比較しますanova()with は完全に実行可能ですが、私が設定しREML = FALSEたことに注意してください)。REML = TRUEanova(..., refit = FALSE)

m_full <- lmer(sim_1 ~ condition + (condition | participant_id), data=d, REML = FALSE)
summary(m_full)$varcor
 # Groups         Name                  Std.Dev. Corr  
 # participant_id (Intercept)           0.48741        
 #                conditionexperimental 0.26468  -0.419
 # Residual                             1.02677     

m_red <- lmer(sim_1 ~ condition + (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

anova(m_full, m_red)
# Data: d
# Models:
# m_red: sim_1 ~ condition + (1 | participant_id)
# m_full: sim_1 ~ condition + (condition | participant_id)
#        Df    AIC    BIC  logLik deviance  Chisq Chi Df Pr(>Chisq)
# m_red   4 2396.6 2415.3 -1194.3   2388.6                         
# m_full  6 2398.7 2426.8 -1193.3   2386.7 1.9037      2      0.386

ただし、このテストは保守的な可能性があります。たとえば、FAQには次のように書かれています。

ヌル値(σ2= 0など)が実行可能スペースの境界上にある場合、LRTベースの帰無仮説検定は保守的であることに注意してください。最も単純な場合(単一の変量効果の分散)、p値は本来の約2倍です(Pinheiro and Bates 2000)。

いくつかの選択肢があります。

  1. χ2

  2. を使用して正しい配布をシミュレートしますRLRsim(FAQでも説明されています)。

次の2番目のオプションを示します。

library("RLRsim")
## reparametrize model so we can get one parameter that we want to be zero:
afex::set_sum_contrasts() ## warning, changes contrasts globally
d <- cbind(d, difference = model.matrix(~condition, d)[,"condition1"])

m_full2 <- lmer(sim_1 ~ condition + (difference | participant_id), data=d, REML = FALSE)
all.equal(deviance(m_full), deviance(m_full2))  ## both full models are identical

## however, we need the full model without correlation!
m_full2b <- lmer(sim_1 ~ condition + (1| participant_id) + 
                   (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_full2b)$varcor
 # Groups           Name        Std.Dev.
 # participant_id   (Intercept) 0.44837 
 # participant_id.1 difference  0.13234 
 # Residual                     1.02677 

## model that only has random effect to be tested
m_red <- update(m_full2b,  . ~ . - (1 | participant_id), data=d, REML = FALSE)
summary(m_red)$varcor
 # Groups         Name       Std.Dev.
 # participant_id difference 0.083262
 # Residual                  1.125116

## Null model 
m_null <- update(m_full2b,  . ~ . - (0 + difference | participant_id), data=d, REML = FALSE)
summary(m_null)$varcor
 # Groups         Name        Std.Dev.
 # participant_id (Intercept) 0.44734 
 # Residual                   1.03571 

exactRLRT(m_red, m_full2b, m_null)
# Using restricted likelihood evaluated at ML estimators.
# Refit with method="REML" for exact results.
# 
#   simulated finite sample distribution of RLRT.
#   
#   (p-value based on 10000 simulated values)
# 
# data:  
# RLRT = 1.9698, p-value = 0.0719

ご覧のとおり、出力REML = TRUEから、正確な結果が得られたことが示唆されます。しかし、これは演習として読者に任されています。

ボーナスに関して、RLRsim複数のコンポーネントの同時テストを許可するかどうかはわかりませんが、許可する場合は、同じ方法でこれを行うことができます。


コメントへの応答:

θXθ0X

この質問が妥当な答えを受け取ることができるかどうかはわかりません。

  • ランダムインターセプトにより、グループ化要因の各レベルの全体的なレベルに特異な違いが生じます。たとえば、従属変数が応答時間である場合、一部の参加者は高速で、一部の参加者は遅くなります。
  • ランダムな勾配により、グループ化因子の各レベルで、ランダムな勾配が推定される因子の特異な効果が得られます。たとえば、要因が一致である場合、一部の参加者は他の参加者よりも高い一致効果を得ることができます。

ランダムな勾配はランダムな切片に影響しますか?ある意味で、これは理にかなっているかもしれません。グループ化因子の各レベルが各条件に対して完全に特異な効果を与えるからです。最後に、2つの条件に対して2つの特異なパラメーターを推定します。ただし、インターセプトによってキャプチャされた全体的なレベルとランダムスロープによってキャプチャされた条件固有の効果の違いは重要であり、ランダムスロープがランダムインターセプトに実際に影響を与えることはできないと思います。ただし、グループ化因子の各レベルは、条件の各レベルに対して個別に特異的です。

それにもかかわらず、私のテストはまだ元の質問が望んでいることを行います。2つの条件の分散の差がゼロかどうかをテストします。ゼロの場合、両方の条件の分散は等しくなります。言い換えると、ランダム勾配の必要がない場合にのみ、両方の条件の分散が同一になります。それが理にかなっていることを願っています。


1
contr.treatment制御条件が基準となる治療コントラスト()を使用します(つまり、ランダム切片が計算されます)。私が提案するパラメータ化は、合計コントラスト(つまりcontr.sum)を使用し、切片は総平均です。切片が制御条件の代わりに総平均である場合に差がnullであるかどうかをテストする方が理にかなっていると思います(ただし、それを書くと、比較的重要でないことが示唆されます)。次の24〜26
Henrik

1
ありがとう!ただし、私の質問は若干異なります。(1)あなたの答えは、私の質問が「0以外の条件のランダムな勾配」に減少することを暗示しているようです。これは本当ですか?(2)(1)への答えが「はい」の場合、これは、次のランダムな勾配の別の解釈を示唆conditionしますcondition。これは本当ですか?
パトリックS.フォーシャー

2
私の2¢:@amoebaのヘンリックの提案された手順に対する反例は正しいです。Henrikはほぼ正しいですが、間違ったモデルのペアを比較します。Patrickの質問に答えるモデルの比較は、Henrikがm_fullvs と呼んだモデルの比較m_full2bです。すなわち:B対Aにおける参加者の条件付き平均応答の分散が等しくないときに限り、ランダム切片傾斜相関は、重要---ゼロでないパラメータを符号化する和・ツー・ゼロコントラスト下。ランダムな勾配の分散をテストする必要はありません。簡潔にこれを説明する方法を考えるようにしようと...
ジェイク・ウェストフォール

2
これは実際には適切な説明ではありませんが、ここで私の答えを研究すると、問題に少し光を当てることができます。基本的に、相関パラメーターは、参加者の回帰線が「右に扇状に広がる」(正の相関)か「左に扇状に広がる」(負の相関)かを制御します。これらのいずれかは、参加者の条件付き平均応答の不等分散を意味します。ゼロ和その後、コーディングは、我々はX上の右の点で相関関係を探していることを保証します
ジェイク・ウェストフォール

2
私は時間を見つけることができる場合、私は...絵で答えを投稿して頂きます
ジェイクウェストフォール

5

あなたのモデル

m = lmer(sim_1 ~ condition + (condition | participant_id), data=d)

すでに、制御条件の被験者間分散が実験条件の被験者間分散と異なることが許可されてます。これは、同等の再パラメーター化により、より明確にすることができます。

m = lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=d)

ランダム共分散行列の解釈がより簡単になりました。

Random effects:
 Groups         Name                  Variance Std.Dev. Corr
 participant_id conditioncontrol      0.2464   0.4963       
                conditionexperimental 0.2074   0.4554   0.83

ここでは、2つの分散があり、正確に制御状態での条件付き平均応答の[横断科目]分散と実験条件で同じ2つはあなたが興味のある差異。シミュレートされたデータセットでは、それらは0.25と0.21です。差は

delta = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]

そして0.039に等しい。ゼロと大きく異なるかどうかをテストします。

編集:私は以下で説明する置換テストが間違っていることに気付きました。制御/実験条件の平均が同じでない場合、意図したとおりに機能しません(そのため、nullの下では観測値を交換できないため)。被験者(またはボーナスの場合は被験者/アイテム)をブートストラップし、の信頼区間を取得することをお勧めしますdelta

そのために、以下のコードを修正してみます。


元の置換ベースの提案(間違った)

順列テストを行うことで、多くのトラブルを回避できることがよくわかります。実際、この場合、セットアップは非常に簡単です。各被験者の制御/実験条件を個別に入れ替えましょう。分散の違いはすべて除去する必要があります。これを何度も繰り返すと、差異のヌル分布が生じます。

(私はRでプログラミングしていません。誰でも、より良いRスタイルで以下を書き直してください。)

set.seed(42)
nrep = 100
v = matrix(nrow=nrep, ncol=1)
for (i in 1:nrep)
{
   dp = d
   for (s in unique(d$participant_id)){             
     if (rbinom(1,1,.5)==1){
       dp[p$participant_id==s & d$condition=='control',]$condition = 'experimental'
       dp[p$participant_id==s & d$condition=='experimental',]$condition = 'control'
     }
   }
  m <- lmer(sim_1 ~ 0 + condition + (0 + condition | participant_id), data=dp)
  v[i,] = as.data.frame(VarCorr(m))[1,4] - as.data.frame(VarCorr(m))[2,4]
}
pvalue = sum(abs(v) >= abs(delta)) / nrep

p=0.7nrep

ボーナスケースにもまったく同じロジックを適用できます。


とても面白い、ありがとう!これがこの答えの重要な洞察であるように思われるので、なぜ再パラメータ化が機能するのかについてもっと考えなければなりません。
パトリックS.フォーシャー

奇妙なことに、回答のグループごとのインターセプト値は、@ MartijnWeteringsの回答の値とは異なるようです。
パトリックS.フォーシャー

@ PatrickS.Forscherそれは、彼が異なるデータセットを生成するからだと思います。sim_1 ~ 0 + condition + (0 + dummy(condition, "control") + dummy(condition, "experimental") | participant_id)定式化を使用して、回答と同じ結果を得ることができます。
アメーバは、モニカを復活させる

1
@ PatrickS.Forscherいいえ、コードで生成されたデータを(シードとともに)使用しました。順列テストを実行するときにのみ、シードを42に設定します。データセットを変更したのはMartijnであり、私ではありません。
アメーバは、モニカを復活させる

1
この提案は間違いなく健全です。すでに経験していると思いますが、マルチレベルデータの置換テストの設定は完全に簡単ではありません。実装が少し簡単な同様のアプローチは、パラメータブートストラップです。これは、lme4でフィットlmerオブジェクトのsimulate()メソッドを使用して簡単に実行できます。つまり、simulate(m)を何度も呼び出してブートストラップを構築します。分布。遊んでみてください。
ジェイクウェストフォール

0

yjk=μ+αj+dj+ejkdN0ΣejkN0σ2
αjjd=d1dJj
y1ky2kABd

Σ=[σA2σABσABσB2]

σA2σB2

Σ

総平均に対応する切片の分散は

σ12:=Var(総平均)=ヴァール12A+B=14ヴァールA+ヴァールB+2CovAB

コントラストの分散は

σ22:=Var(コントラスト)=ヴァール12AB=14ヴァールA+ヴァールB2CovAB

そして、切片とコントラストの共分散は

σ12:=Cov大平均、コントラスト=Cov12A+B12AB=14ヴァールAヴァールB

したがって、再パラメータ化 Σ

Σ=[σ12+σ22+2σ12σ12σ22σ12σ22σ12+σ222σ12]=[σA2σABσABσB2].

Σ can be decomposed into

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]+2[σ1200σ12].

Setting the covariance parameter σ12 to zero we get

Σ=[σ12σ12σ12σ12]+[σ22σ22σ22σ22]=[σ12+σ22σ12σ22σ12σ22σ12+σ22]

which, as @Jake Westfall derived slightly differently, tests the hypothesis of equal variances when we compare a model without this covariance parameter to a model where the covariance parameter is still included/not set to zero.

Notably, introducing another crossed random grouping factor (such as stimuli) does not change the model comparison that has to be done, i.e., anova(mod1, mod2) (optionally with the argument refit = FALSE when you use REML estimation) where mod1 and mod2 are defined as @Jake Westfall did.

Taking out σ12 and the variance component for the contrast σ22 (what @Henrik suggests) results in

Σ=[σ12σ12σ12σ12]

which tests the hypothesis that the variances in the two conditions are equal and that they are equal to the (positive) covariance between the two conditions.


When we have two conditions, a model that fits a covariance matrix with two parameters in a (positive) compound symmetric structure can also be written as

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

# new model
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

or (using the categorical variable/factor condition)

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

with

Σ=[σ12+σ22σ12σ12σ12+σ22]=[σ12σ12σ12σ12]+[σ2200σ22]

where σ12 and σ22 are the variance parameters for the participant and the participant-condition-combination intercepts, respectively. Note that this Σ has a non-negative covariance parameter.

Below we see that mod1, mod3, and mod4 yield equivalent fits:

# code snippet from Jake Westfall
d$contrast <- 2*(d$condition == 'experimental') - 1

mod1 <- lmer(sim_1 ~ contrast + (contrast || participant_id),
             data = d, REML = FALSE)

mod2 <- lmer(sim_1 ~ contrast + (contrast | participant_id),
             data = d, REML = FALSE)

# new models 
mod3 <- lmer(sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id), 
             data = d, REML = FALSE) 

mod4 <- lmer(sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id), 
             data = d, REML = FALSE)

anova(mod3, mod1)
# Data: d
# Models:
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
# mod1: sim_1 ~ contrast + ((1 | participant_id) + (0 + contrast | participant_id))
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod3  5 2396.9 2420.3 -1193.5   2386.9                        
# mod1  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

anova(mod4, mod3)
# Data: d
# Models:
# mod4: sim_1 ~ condition + (1 | participant_id) + (1 | condition:participant_id)
# mod3: sim_1 ~ contrast + (1 | participant_id) + (1 | contrast:participant_id)
#      Df    AIC    BIC  logLik deviance Chisq Chi Df Pr(>Chisq)
# mod4  5 2396.9 2420.3 -1193.5   2386.9                        
# mod3  5 2396.9 2420.3 -1193.5   2386.9     0      0          1

With treatment contrasts (the default in R) the re-parameterized Σ is

Σ=[σ12σ12+σ12σ12+σ12σ12+σ22+2σ12]=[σ12σ12σ12σ12]+[000σ22]+[0σ12σ122σ12]

where σ12 is the variance parameter for the intercept (condition A), σ22 the variance parameter for the contrast (AB), and σ12 the corresponding covariance parameter.

We can see that neither setting σ12 to zero nor setting σ22 to zero tests (only) the hypothesis of equal variances.

However, as shown above, we can still use mod4 to test the hypothesis as changing the contrasts has no impact on the parameterization of Σ for this model.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.