Neden glmer (family = binomial) çıktıyı Gauss-Newton algoritmasının manuel uygulamasıyla eşleştiremiyorum?


15

Lmer'in (gerçekten parıldayan) çıktılarını bir oyuncak binomial örneğiyle eşleştirmek istiyorum. Vinyetleri okudum ve neler olduğunu anladığımı düşünüyorum.

Ama görünüşe göre değil. Sıkıştıktan sonra, "gerçeği" rastgele etkiler açısından sabitledim ve sadece sabit etkilerin tahmin edilmesinden sonra gittim. Bu kodu aşağıya ekliyorum. + Z %*% b.kYasal olduğunu görmek için yorum yapabilir ve normal bir glm'nin sonuçlarıyla eşleşir. Rastgele etkiler dahil edildiğinde neden lmer'in çıktısını eşleştiremediğimi anlamak için biraz beyin gücü ödünç almayı umuyorum.

# 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")
}

Yanıtlar:


28

Model uydurma komutunuzu aşağıdaki şekilde değiştirirseniz, eşleşen yaklaşımınız işe yarar:

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

Temel değişiklik nAGQ = 0yaklaşımınızla eşleşir, oysa varsayılan ( nAGQ = 1) eşleşmez . nAGQ"uyarlanabilir Gauss-Hermite kareleme noktalarının sayısı" anlamına gelir glmerve karışık modele takılırken rastgele efektlerin nasıl entegre edileceğini belirler . Zaman nAGQ1'den büyük olması halinde, uyarlamalı kareleme ile birlikte kullanılır nAGQnokta. Zaman nAGQ = 1, Laplace yaklaşımı kullanılır ve ne zaman nAGQ = 0tamamlayıcı yok sayılır 'edilir. Çok spesifik (ve belki de çok teknik) olmadan nAGQ = 0, rastgele etkilerin yalnızca tahmini koşullu modları aracılığıyla sabit etkilerin tahminlerini etkilediği anlamına gelir - bu nedenle,nAGQ = 0tamamen rastgele etkilerin rasgeleliğini açıklamaz. Rastgele etkileri tam olarak açıklamak için bunların entegre edilmesi gerekir. Ancak, fark ettiğiniz gibi nAGQ = 0ve arasındaki fark nAGQ = 1oldukça küçük olabilir.

Eşleştirme yaklaşımınız çalışmaz nAGQ > 0. Bunun nedeni, bu durumlarda optimizasyon için üç adım olmasıdır: (1) rasgele etkilerin koşullu modlarını tahmin etmek için tekrarlanan şekilde yeniden ağırlıklandırılmış en küçük kareler (PIRLS) cezalandırıldı, (2) (yaklaşık) koşullu modları ile ilgili rastgele etkileri entegre edin ve (3) objektif fonksiyonun doğrusal olmayan optimizasyonu (yani entegrasyonun sonucu). Bu adımların kendileri yakınsamaya kadar tekrarlanır. Sadece devraldı bir tekrarlı yeniden ağırlıklandırmalı en küçük kareler (IRLS) koşmak, yapıyoruz bbilinir ve koyarak Z%*%bbir ofset vadede. Yaklaşımınız PIRLS ile eşdeğerdir, ancak bu eşdeğerlik yalnızca glmertahmini koşullu modları (aksi halde bilmeyeceğiniz) almak için kullandığınız için geçerlidir .

Bu iyi açıklanmadıysa özür dileriz, ancak kısa bir açıklamaya kendini iyi veren bir konu değildir. Saf R kodundaki yaklaşımın (eksik) bir uygulaması olan https://github.com/lme4/lme4pureR'yi yararlı bulabilirsiniz lme4. kendisinden lme4pureRdaha okunabilir olacak şekilde tasarlanmıştır lme4(çok daha yavaş olmasına rağmen).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.