Р: Почему суммарное () случайное среднее значение и дисперсия отличаются от ручных вычислений? - PullRequest
0 голосов
/ 30 октября 2019

Если я подгоняю модель случайных перехватов к R * lme4::glmer(), я могу извлечь результирующий вектор перехватов и вычислить среднее значение и дисперсию этих перехватов. Однако результат вычисления этих чисел вручную, похоже, не совпадает с результатом использования summary() на объекте модели. Что происходит?

Вот точный рабочий пример, на который я смотрю, показывающий несогласие:

set.seed(5)
# Load packages
library(fabricatr)
library(lme4)

##############################################################    
# Make some fake data with 10 clusters, 50 observations each
# and the outcomes are correlated in clusters.
##############################################################    

clusters <- rep(1:10, 50)
y <- fabricatr::draw_binary_icc(prob = 0.2, clusters = clusters, ICC = 0.5)

x1 <- rnorm(n = 500)
x2 <- rnorm(n = 500) 
x3 <- rnorm(n = 500)

dat <- data.frame(clusters, y, x1, x2, x3)

##############################################################    
# Fit binary logistic hierarchical regression model with 
# random intercepts, interaction
##############################################################    

m1 <- lme4::glmer(formula = y ~ x1*x2 + x3 + (1|clusters),
              data = dat, family = binomial(link = "logit"),
              nAGQ = 10)

##############################################################    
# Show manual vs. summary() intercept means and variance
##############################################################    

# Variance of random intercepts is 4.28, mean (Intercept) is -1.80
summary(m1)

# But manually the variance is 3.89 and mean is -1.70
intercepts <- coef(m1)$clusters["(Intercept)"]$`(Intercept)`
mean(intercepts)
var(intercepts)
...