You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从glmmTMB对象中获取整合随机效应后的估算期望值?

从glmmTMB对象获取整合随机效应后的期望值

你需要的是整合了随机效应的边际期望值(即给定固定效应设计矩阵X时Y的期望,随机效应已被积分出去),glmmTMB的predict()函数默认返回的是包含随机效应预测值的条件预测,re.form=NA则是将随机效应设为0的固定效应预测,这两者都不符合你的需求。以下是针对不同分布的解决方法:

有闭合形式的分布(如泊松/负二项(对数连接)、高斯(恒等连接))

泊松/负二项模型(对数连接)

这类模型的边际期望可以通过解析计算得到:
边际期望 = exp(Xβ) * E[exp(Zb)]
其中:

  • Xβ是固定效应部分的线性预测值(可通过predict(fit, re.form=NA, type="link")获取)
  • b是服从多元正态分布的随机效应,E[exp(Zb)]的计算利用正态分布的性质:若Zb ~ N(0, V),则E[exp(Zb)] = exp(Var(Zb)/2)

具体代码示例:

library(glmmTMB)
# 拟合泊松混合模型
fit <- glmmTMB(count ~ mined + (1|site), data = Salamanders, family = poisson)

# 提取固定效应线性预测值(Xβ)
fixef_link <- predict(fit, re.form = NA, type = "link")

# 提取随机效应协方差矩阵
vc <- VarCorr(fit)$cond$site
# 构建随机效应设计矩阵Z(此处为随机截距,对应每个观测的site指示变量)
Z <- model.matrix(~0 + site, data = Salamanders)
# 计算每个观测的Zb的方差
var_Zb <- diag(Z %*% vc %*% t(Z))

# 计算边际期望值
marginal_exp <- exp(fixef_link) * exp(var_Zb / 2)

高斯模型(恒等连接)

高斯模型的边际期望值直接等于固定效应的预测值,此时用predict(fit, re.form=NA, type="response")即可得到正确结果,因为随机效应的期望为0,积分后不影响最终期望。

无闭合形式的分布(如二项(logit连接)、Gamma(对数连接))

这类模型无法通过解析计算得到边际期望,需要用蒙特卡洛模拟近似:
核心思路是多次模拟随机效应的取值,计算对应的条件期望后取平均。

以二项logit模型为例:

library(glmmTMB)
library(MASS)

# 拟合二项混合模型(示例数据需自行替换)
fit <- glmmTMB(cbind(success, failure) ~ treatment + (1|clinic), data = my_data, family = binomial)

# 提取固定效应系数和随机效应协方差
beta <- fixef(fit)$cond
sigma <- VarCorr(fit)$cond$clinic
# 固定效应线性预测值
fixef_link <- predict(fit, re.form = NA, type = "link")
# 随机效应设计矩阵Z
Z <- model.matrix(~0 + clinic, data = my_data)

# 蒙特卡洛模拟随机效应(模拟次数越多结果越准确)
n_sim <- 1000
b_sim <- mvrnorm(n_sim, mu = rep(0, nrow(sigma)), Sigma = sigma)

# 计算每次模拟的条件期望,再取平均得到边际期望
linear_pred <- matrix(fixef_link, nrow = nrow(my_data), ncol = n_sim) + Z %*% t(b_sim)
cond_exp <- plogis(linear_pred)  # logit连接的逆函数
marginal_exp <- rowMeans(cond_exp)

内容的提问来源于stack exchange,提问作者KOE

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:12:40