エフェクトパッケージを通じてlmerオブジェクトの信頼区間はどの程度信頼できますか?


36

Effectspackageは、packageを通じて取得した線形混合効果モデルの結果プロットするための非常に高速で便利な方法を提供しlme4ます。このeffect関数は信頼区間(CI)を非常に迅速に計算しますが、これらの信頼区間はどの程度信頼できますか?

例えば:

library(lme4)
library(effects)
library(ggplot)

data(Pastes)

fm1  <- lmer(strength ~ batch + (1 | cask), Pastes)
effs <- as.data.frame(effect(c("batch"), fm1))
ggplot(effs, aes(x = batch, y = fit, ymin = lower, ymax = upper)) + 
  geom_rect(xmax = Inf, xmin = -Inf, ymin = effs[effs$batch == "A", "lower"],
        ymax = effs[effs$batch == "A", "upper"], alpha = 0.5, fill = "grey") +
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

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

effectsパッケージを使用して計算されたCIによると、バッチ「E」はバッチ「A」と重複しません。

同じusing confint.merMod関数とデフォルトの方法を試してみると:

a <- fixef(fm1)
b <- confint(fm1)
# Computing profile confidence intervals ...
# There were 26 warnings (use warnings() to see them)

b <- data.frame(b)
b <- b[-1:-2,]

b1 <- b[[1]]
b2 <- b[[2]]

dt <- data.frame(fit   = c(a[1],  a[1] + a[2:length(a)]), 
                 lower = c(b1[1],  b1[1] + b1[2:length(b1)]), 
                 upper = c(b2[1],  b2[1] + b2[2:length(b2)]) )
dt$batch <- LETTERS[1:nrow(dt)]

ggplot(dt, aes(x = batch, y = fit, ymin = lower, ymax = upper)) +
  geom_rect(xmax = Inf, xmin = -Inf, ymin = dt[dt$batch == "A", "lower"], 
        ymax = dt[dt$batch == "A", "upper"], alpha = 0.5, fill = "grey") + 
  geom_errorbar(width = 0.2) + geom_point() + theme_bw()

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

すべてのCIが重複していることがわかります。関数が信頼できるCIの計算に失敗したことを示す警告も表示されます。この例と実際のデータセットを見ると、effectsパッケージがCI計算でショートカットを使用していることが疑われますが、これは統計学者によって完全に承認されていない可能性があります。オブジェクトのパッケージから関数によって返されるCIの信頼性はどれくらいですか?effecteffectslmer

試したこと:ソースコードを見ると、effect関数が関数に依存していることがわかりました。Effect.merMod関数はEffect.mer次のように関数を指示します。

effects:::Effect.mer
function (focal.predictors, mod, ...) 
{
    result <- Effect(focal.predictors, mer.to.glm(mod), ...)
    result$formula <- as.formula(formula(mod))
    result
}
<environment: namespace:effects>

mer.to.glm関数はlmerオブジェクトから分散共変行列を計算するようです:

effects:::mer.to.glm

function (mod) 
{
...
mod2$vcov <- as.matrix(vcov(mod))
...
mod2
}

これは、おそらく、Effect.defaultCIを計算する関数で使用されます(この部分を誤解している可能性があります)。

effects:::Effect.default
...
     z <- qnorm(1 - (1 - confidence.level)/2)
        V <- vcov.(mod)
        eff.vcov <- mod.matrix %*% V %*% t(mod.matrix)
        rownames(eff.vcov) <- colnames(eff.vcov) <- NULL
        var <- diag(eff.vcov)
        result$vcov <- eff.vcov
        result$se <- sqrt(var)
        result$lower <- effect - z * result$se
        result$upper <- effect + z * result$se
...

これが正しいアプローチであるかどうかを判断するのにLMMについて十分な知識はありませんが、LMMの信頼区間計算に関する議論を考慮すると、このアプローチは疑わしいほど単純に見えます。


1
コードの長い行がある場合、それらを複数の行に分割すると、すべてを表示するためにスクロールする必要がなくなります。
RVL

1
@rvlこれでコードが読みやすくなりました。
ミッコ14年

回答:


52

すべての結果は本質的に同じです(この特定の例の場合)。理論的な違いは次のとおりです。

  • @rvlが指摘しているように、パラメータ間の共分散を考慮しないCIの再構築は間違っています(ごめん)
  • パラメータの信頼区間は(二次対数尤度面を仮定して)ワルド信頼区間に基づくことができます:lsmeanseffectsconfint(.,method="Wald")。を除いてlsmeans、これらのメソッドは有限サイズ効果(「自由度」)を無視しますが、この場合はほとんど違いがありません(df=40実質的に無限と区別がつかないdf
  • ...またはプロファイルの信頼区間(デフォルトの方法。有限サイズ効果を無視しますが、非2次曲面を許可します)
  • ...またはパラメトリックブートストラップ(ゴールドスタンダード-モデルが正しいと仮定する[応答は正規、ランダム効果は正規分布、データは条件付き独立など)

これらのアプローチはすべて合理的であると思います(一部は他のものよりも近似的です)が、この場合は、どちらを使用してもほとんど違いはありません。懸念がある場合は、データまたは独自のデータに似たシミュレートされたデータで対照的な方法をいくつか試して、何が起こるかを確認してください...

(PS:私はの信頼区間という事実にあまりにも多くの重量を入れていないだろうAEの重複あなたはこの違いについて信頼性の推論にするために、適切なペアごとの比較手順を実行する必要があると思いません。特定の推定値のペアを。 ..)

95%CI:

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

比較コード:

library(lme4)
fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
c0 <- confint(fm2,method="Wald")
c1 <- confint(fm2)
c2 <- confint(fm2,method="boot")
library(effects)
library(lsmeans)
c3 <- with(effect("batch",fm2),cbind(lower,upper))
c4 <- with(summary(lsmeans(fm2,spec="batch")),cbind(lower.CL,upper.CL))
tmpf <- function(method,val) {
    data.frame(method=method,
               v=LETTERS[1:10],
               setNames(as.data.frame(tail(val,10)),
                        c("lwr","upr")))
}
library(ggplot2); theme_set(theme_bw())
allCI <- rbind(tmpf("lme4_wald",c0),
      tmpf("lme4_prof",c1),
      tmpf("lme4_boot",c2),
      tmpf("effects",c3),
               tmpf("lsmeans",c4))
ggplot(allCI,aes(v,ymin=lwr,ymax=upr,colour=method))+
    geom_linerange(position=position_dodge(width=0.8))

ggsave("pastes_confint.png",width=10)

2
この答えは要点に即しており、さまざまな方法をうまく比較できます。ただし、詳細については、rlvの優れた回答を参照してください。
ミッコ14年

優れた非常に役立つ回答をありがとうございます。CIを使用してグループ/バッチを比較することはできませんが、効果を比較することは可能です。私は2つの治療、数人の個人と個人内のいくつかの測定を受けたとしましょう。それぞれがx個の測定値を含むため、個人をランダム効果として使用します。次に、これら2つの治療が異なる反応をもたらすかどうかを知りたかった。effectsこの場合、パッケージとCIのオーバーラップを使用できますか?
ミッコ14年

5
これは、標準的なモデルベースのアプローチに関連する、より一般的な質問です。別の質問に値するかもしれません。(1)一般に、治療法の違いに関する質問に答える方法は、焦点治療法の違いがモデルのコントラスト(推定パラメーター)になるようにモデルを設定し、p値を計算することです。または、特定のアルファレベルの信頼区間にゼロが含まれているかどうかを確認します。(続き)
ベンボルカー14年

4
(2)CIのオーバーラップは、せいぜい保守的であり、パラメーター間の違いの近似基準です(このトピックに関するいくつかの公開論文があります)。(3)ペアワイズ比較には個別/直交の問題があります。これは、比較の多重度と非独立性を適切に制御する必要があることです(これ、たとえばmultcompパッケージ内のメソッドによって実行できますが、少なくとも少し注意)
ベンボルカー14年

1
何のために?新しい質問をすることもできます。
ベンボルカー

20

2番目の方法で行ったことは、回帰係数の信頼区間を計算し、それらを変換して予測のCIを取得することです。これは、回帰係数間の共分散を無視します。

切片を使用せずにモデルを近似して、batch効果が実際に予測になり、confint必要な間隔が返されるようにしてください。

補遺1

私は上で提案したとおりにした。

> fm2 <- lmer(strength ~ batch - 1 + (1 | cask), Pastes)
> confint(fm2)
Computing profile confidence intervals ...
           2.5 %    97.5 %
.sig01  0.000000  1.637468
.sigma  2.086385  3.007380
batchA 60.234772 64.298581
batchB 57.268105 61.331915
batchC 60.018105 64.081915
batchD 57.668105 61.731915
batchE 53.868105 57.931915
batchF 59.001439 63.065248
batchG 57.868105 61.931915
batchH 61.084772 65.148581
batchI 56.651439 60.715248
batchJ 56.551439 60.615248

これらの間隔はからの結果でジャイブしているようですeffects

補遺2

別の代替手段はlsmeansパッケージです。pbkrtestパッケージから自由度と調整された共分散行列を取得します。

> library("lsmeans")
> lsmeans(fm1, "batch")
Loading required namespace: pbkrtest
 batch   lsmean       SE    df lower.CL upper.CL
 A     62.26667 1.125709 40.45 59.99232 64.54101
 B     59.30000 1.125709 40.45 57.02565 61.57435
 C     62.05000 1.125709 40.45 59.77565 64.32435
 D     59.70000 1.125709 40.45 57.42565 61.97435
 E     55.90000 1.125709 40.45 53.62565 58.17435
 F     61.03333 1.125709 40.45 58.75899 63.30768
 G     59.90000 1.125709 40.45 57.62565 62.17435
 H     63.11667 1.125709 40.45 60.84232 65.39101
 I     58.68333 1.125709 40.45 56.40899 60.95768
 J     58.58333 1.125709 40.45 56.30899 60.85768

Confidence level used: 0.95 

effecteffectconfint±1.96×se

得られた結果effectlsmeans類似しているが、不平衡の多因子状況に、lsmeans一方等しい重みを有する未使用の要素上デフォルト平均によって、effect(でオプションとして使用可能観測周波数によって重みlsmeans)。


この解決策をありがとう。間隔はより類似していますが、正確には同じではありません。それでも、effectsパッケージからのCI がlmerオブジェクトに対して信頼できるかどうかの質問には答えられません。出版物で結果を使用することを検討しており、LMMに対して承認された方法を使用してCIが計算されることを確認したいと思います。
ミッコ14年

補遺1では、最初の2つのパラメーター.sig01とその.sigma生成元はconfint分散の信頼区間ですか?または標準偏差の信頼区間 ?
ABC

これらは、モデル内でそのようにラベル付けされているパラメーターのCIです。lmer最終的な回答については、ドキュメントをご覧ください。ただし、人々は通常sigma、標準偏差を参照しsigma.squareたりsigma^2、分散を参照したりするために、表記法を使用します。
rvl

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