मैं एक खिलौना द्विपद उदाहरण के साथ 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")
}