モデルパラメーターの有意性は、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,j∼N(μj,σ2j+σ2ϵ10)
σϵσ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)))