为什么不能将glmer(family = binomial)输出与手动实现的Gauss-Newton算法匹配?


15

我想将lmer(really 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")
}

Answers:


28

如果将模型拟合命令更改为以下命令,则匹配方法有效:

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

关键的更改是nAGQ = 0,它与您的方法匹配,而默认(nAGQ = 1)不匹配。 nAGQ表示“自适应高斯-赫尔姆正交点的数量”,并设置glmer在拟合混合模型时如何整合随机效应。当nAGQ大于1时,将自适应正交与nAGQ点一起使用。当nAGQ = 1使用时nAGQ = 0,将使用拉普拉斯逼近;当使用时,将“忽略”积分。无需过于具体(因此也可能过于技术性),则nAGQ = 0意味着随机效应仅通过其估计的条件模式影响固定效应的估计-因此,nAGQ = 0不能完全解决随机效应的随机性。为了充分考虑随机效应,需要将它们整合在一起。但是,正如您所发现的nAGQ = 0和之间的差异nAGQ = 1通常很小。

您的匹配方法不适用于nAGQ > 0。这是因为在这些情况下,需要进行三个步骤的优化:(1)惩罚式迭代加权最小二乘(PIRLS)以估计随机效应的条件模式;(2)(近似)整合关于其条件模式的随机效应,以及(3)目标函数的非线性优化(即积分的结果)。这些步骤本身会反复进行,直到收敛为止。您只是在进行迭代的加权最小二乘(IRLS)运行,它假设b已知并放入Z%*%b偏移项。事实证明,您的方法与PIRLS等效,但是这种等效仅成立,因为您用于glmer获取估计的条件模式(否则您将不知道)。

不好意思,如果这没有得到很好的解释,但这并不是一个快速描述的主题。您可能会发现 https://github.com/lme4/lme4pureR有用,这是lme4纯R代码中该方法的(不完整)实现。 lme4pureR被设计为比lme4其本身更具可读性(尽管速度慢得多)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.