なぜglmer(family = binomial)出力をGauss-Newtonアルゴリズムの手動実装と一致させられないのですか?


15

lmer(本当にglmer)の出力をおもちゃの二項式の例と一致させたいと思います。私はビネットを読んで、何が起こっているのか理解していると信じています。

しかし、どうやらそうではありません。立ち往生した後、私はランダム効果の観点から「真実」を修正し、修正された効果だけを評価した。以下にこのコードを含めます。それが合法であることを確認するには、コメントアウトする+ Z %*% b.kと、通常のglmの結果と一致します。私は、ランダム効果が含まれているときにlmerの出力を一致させることができない理由を理解するために、いくらかの知力を借りたいと思っています。

# Setup - hard coding simple data set 
df <- data.frame(x1 = rep(c(1:5), 3), subject = sort(rep(c(1:3), 5)))
df$subject <- factor(df$subject)

# True coefficient values  
beta <- matrix(c(-3.3, 1), ncol = 1) # Intercept and slope, respectively 
u <- matrix(c(-.5, .6, .9), ncol = 1) # random effects for the 3 subjects 

# Design matrices Z (random effects) and X (fixed effects)
Z <- model.matrix(~ 0 + factor(subject), data = df)
X <- model.matrix(~ 1 + x1, data = df)

# Response  
df$y <- c(1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1)
    y <- df$y

### Goal: match estimates from the following lmer output! 
library(lme4)
my.lmer <- lmer( y ~ x1 + (1 | subject), data = df, family = binomial)
summary(my.lmer)
ranef(my.lmer)

### Matching effort STARTS HERE 

beta.k <- matrix(c(-3, 1.5), ncol = 1) # Initial values (close to truth)
b.k <- matrix(c(1.82478, -1.53618, -.5139356), ncol = 1) # lmer's random effects

# Iterative Gauss-Newton algorithm
for (iter in 1:6) {
  lin.pred <- as.numeric(X %*% beta.k +  Z %*% b.k)
  mu.k <- plogis(lin.pred)
  variances <- mu.k * (1 - mu.k)
  W.k <- diag(1/variances)

  y.star <- W.k^(.5) %*% (y - mu.k)
  X.star <- W.k^(.5) %*% (variances * X)
  delta.k <- solve(t(X.star) %*% X.star) %*% t(X.star) %*% y.star

  # Gauss-Newton Update 
  beta.k <- beta.k + delta.k
  cat(iter, "Fixed Effects: ", beta.k, "\n")
}

回答:


28

モデルフィッティングコマンドを次のように変更すると、一致するアプローチが機能します。

my.lmer <- glmer(y ~ x1 + (1 | subject), data = df, family = binomial, nAGQ = 0)

主な変更点はでnAGQ = 0、これはアプローチに一致しますが、デフォルト(nAGQ = 1)は一致しません。 nAGQは、「適応ガウスエルミート求積点の数」を意味しglmer、混合モデルを近似するときにランダム効果をどのように統合するかを設定します。ときにnAGQ1よりも大きい、次いで適応直交が一緒に使用されるnAGQポイント。の場合nAGQ = 1、ラプラス近似が使用され、の場合nAGQ = 0、積分は「無視」されます。具体的すぎない(したがって、おそらく技術的すぎる)とnAGQ = 0は限らないことを意味します。つまり、ランダム効果は、推定された条件付きモードを介して固定効果の推定にのみ影響することを意味します。nAGQ = 0ランダム効果のランダム性を完全には説明しません。ランダム効果を完全に説明するには、それらを統合する必要があります。しかし、あなたは間のこの違いを発見nAGQ = 0し、nAGQ = 1多くの場合、かなり小さくすることができます。

一致するアプローチはで機能しませんnAGQ > 0。これは、これらの場合、最適化に3つのステップがあるためです:(1)ランダム効果の条件付きモードを推定するためにペナルティされた反復再重み付け最小二乗(PIRLS)、(2)(およそ)条件付きモードに関するランダム効果を統合、および(3)目的関数の非線形最適化(つまり、積分の結果)。これらの手順自体は、収束するまで繰り返されます。単純に反復的に再重み付けされた最小二乗(IRLS)を実行しています。これbは既知でありZ%*%b、オフセット項を入れていることを前提としています。あなたのアプローチはPIRLSと同等であることが判明しましたが、glmer推定された条件付きモードを取得するために使用するため、この同等性が保持されます(それ以外の場合は知りません)。

これがうまく説明されていない場合はおologiesび申し上げますが、簡単な説明に向いているトピックではありません。https://github.com/lme4/lme4pureRは便利な場合があります これは、lme4純粋なRコードでのアプローチの(不完全な)実装です。 それ自体lme4pureRよりも読みやすいように設計されていますlme4(ただし、はるかに遅いです)。

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