Чому я не можу зіставити результат glmer (family = binomial) з ручною реалізацією алгоритму Гаусса-Ньютона?


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будуть інтегруватися випадкові ефекти при встановленні змішаної моделі. Коли 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сам (хоча і набагато повільніше).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.