首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >lme4中的GLMM随机截尾估计

lme4中的GLMM随机截尾估计
EN

Stack Overflow用户
提问于 2022-11-05 11:07:45
回答 2查看 21关注 0票数 0

如何从lme4结果对象获得随机拦截效果估计器?

代码语言:javascript
复制
set.seed(247)
# Create Data
n=1000
x = runif(n)

id = rep(NA,n)
for (i in 1:10) {
  id_s = (i-1)*100+1
  id_e = i*100
  id[id_s:id_e] = i
}

effects = rnorm(10)
lp = -0.5+0.5*x + effects[id]
probs = exp(lp)/(1+exp(lp))
Y2 = rbinom(n, 1, probs)

library(lme4)
fit_glmm2 = glmer(Y2 ~ x + (1|id), family = "binomial",control = glmerControl(calc.derivs = FALSE))

我以为它们可能是u的,但它们之间有一些细微的区别:

代码语言:javascript
复制
yy = coef(fit_glmm2) # looking only at the intercept
fit_glmm2@u + fit_glmm2@beta[1]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-11-15 13:56:21

如果您想要随机效果,ranef()是获得它们的最佳方法:

代码语言:javascript
复制
r <- ranef(fit_glmm2)
 str(r)
## List of 1
##  $ id:'data.frame':  10 obs. of  1 variable:
##   ..$ (Intercept): num [1:10] -0.693 0.297 0.54 -0.467 0.755 ...
##   ..- attr(*, "postVar")= num [1, 1, 1:10] 0.0463 0.0385 0.0392 0.0436 0.0409 ...
##  - attr(*, "class")= chr "ranef.mer"
代码语言:javascript
复制
raw <- unname(unlist(ranef(fit_glmm2)$id))
identical(raw, fit_glmm2@u*fit_glmm2@theta) ## TRUE

正如vignette("lmer", package = "lme4")所描述的,@u值是球形随机效应,即它们是iid N(0,1),需要变换才能得到公式X %*% beta + Z %*% b中使用的随机效应b。在这种情况下(纯截距RE),theta对应于随机效应的标准差.u*theta不能处理更复杂的案子.在这种情况下,您需要getME(fit_glmm2, "Lambda") %*% getME(fit_glmm2, "u")

getME(., "b")也可以工作,但是对于更复杂的模型,您必须知道如何将b-vector分解为随机拦截、斜率、不同的RE项等等。

票数 2
EN

Stack Overflow用户

发布于 2022-11-05 16:58:27

结果表明,您可以通过将u参数与theta参数相乘,或者通过调用getME(.,"b")来获得它们。

代码语言:javascript
复制
yy = coef(fit_glmm2) # looking only at the intercept
fit_glmm2@u*fit_glmm2@theta + fit_glmm2@beta[1] # or 
# getME(fit_glmm2,"b") + fit_glmm2@beta[1]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74327176

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档