मैं गॉस-न्यूटन एल्गोरिथ्म के मैनुअल कार्यान्वयन के साथ ग्लैमर (परिवार = द्विपद) आउटपुट का मिलान क्यों नहीं कर सकता?


15

मैं एक खिलौना द्विपद उदाहरण के साथ lmer (वास्तव में ग्लैमर) के आउटपुट से मेल खाना चाहता हूं। मैंने विगनेट्स पढ़े हैं और मुझे विश्वास है कि मैं समझता हूं कि क्या हो रहा है।

लेकिन जाहिर है मैं नहीं। अटक जाने के बाद, मैंने यादृच्छिक प्रभावों के संदर्भ में "सच्चाई" तय की और अकेले तय प्रभावों के अनुमान के बाद चला गया। मैं नीचे इस कोड को शामिल कर रहा हूं। यह देखने के लिए कि यह + Z %*% b.kवैध है , आप टिप्पणी कर सकते हैं और यह नियमित रूप से चमक के परिणामों से मेल खाएगा। मैं कुछ ब्रेनपावर उधार लेने की उम्मीद कर रहा हूं ताकि यह पता लगाया जा सके कि यादृच्छिक प्रभाव शामिल होने पर मैं लैमर के आउटपुट का मिलान क्यों नहीं कर पा रहा हूं।

# 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। ऐसा इसलिए है क्योंकि इन मामलों में अनुकूलन के तीन चरण हैं: (1) यादृच्छिक प्रभावों के सशर्त मोड का अनुमान लगाने के लिए पुनरावृत्त पुनरावृत्त कम से कम वर्ग (PIRLS), (2) (लगभग) उनके सशर्त मोड के यादृच्छिक प्रभावों को एकीकृत करते हैं। , और (3) उद्देश्य समारोह (यानी एकीकरण का परिणाम) के nonlinear अनुकूलन। इन कदमों को स्वयं अभिसरण तक प्रसारित किया जाता है। आप बस पुनरावृत्त कम से कम वर्ग (IRLS) चला रहे हैं, जो मानता bहै और Z%*%bएक ऑफसेट अवधि में डाल रहा है। आपका दृष्टिकोण PIRLS के समतुल्य है, लेकिन यह समानता केवल इसलिए है क्योंकि आप glmerअनुमानित सशर्त मोड प्राप्त करने के लिए उपयोग करते हैं (जो आप अन्यथा नहीं जानते होंगे)।

माफी अगर यह अच्छी तरह से समझाया नहीं गया है, लेकिन यह एक ऐसा विषय नहीं है जो एक त्वरित विवरण के लिए अच्छी तरह से उधार देता है। आपको https://github.com/lme4/lme4pureR उपयोगी मिल सकता है , जो lme4शुद्ध आर कोड में दृष्टिकोण का (अपूर्ण) कार्यान्वयन है । खुद lme4pureRसे अधिक पठनीय lme4(हालांकि बहुत धीमा) डिज़ाइन किया गया है ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.