You need to enable JavaScript to run this app. 如何对MICE插补得到的pooled GLM使用simulate函数开展数据模拟
优惠活动
大模型
产品
解决方案
定价
更多

如何对MICE插补得到的pooled GLM使用simulate函数开展数据模拟

MICE Pooled GLM 响应变量模拟实现方法

核心限制说明

pool()函数返回的mipo类多重插补合并结果对象,没有内置的simulate方法,无法直接像原生glm对象那样调用simulate()完成模拟。要完全对齐你给出的原生glmsimulate的行为,需要手动复现simulate.glm对二元logit模型的内置逻辑,再用合并后的系数完成计算。

原生simulate对二元logit模型的默认行为

对应你参考代码中simulate(glm3_ref)[,1]的实际执行逻辑:

  • 用模型的点估计系数计算每个观测的线性预测值eta = Xβ
  • 通过logit函数的逆变换(即plogis())把线性预测值转成事件发生概率p
  • 对每个观测,从成功概率为p的伯努利分布中抽取二元响应值,默认不引入参数本身的不确定性扰动

分步实现

  • 提取多重插补合并后的回归系数
# 从pool结果中获取合并点估计系数
pooled_coef <- coef(glm_pooled)
  • 构建和建模公式完全匹配的设计矩阵
    这里要注意严格对齐公式展开的结构(包括哑变量生成、交互项构造、无截距设置),避免维度不匹配:
# 取任意一个完成的插补数据集生成设计矩阵,和原始建模逻辑完全一致
X <- model.matrix(form3, data = complete(miceData, 1))
  • 按原生simulate逻辑生成模拟响应值
# 计算线性预测值
eta <- X %*% pooled_coef
# 转换为事件发生概率
p <- plogis(eta)
# 伯努利抽样生成模拟响应,格式和simulate输出保持一致
yNew <- data.frame(
  sim_1 = rbinom(n = length(p), size = 1, prob = p)
)

常见注意事项

  • 不要直接对glm_pooled调用simulate(),该函数仅识别原生glm类的存储结构,对mipo对象会抛出方法不存在的错误。
  • 因为你的模型公式带-1参数,设计矩阵本身不包含截距项,计算线性预测值时不要额外补充截距,否则会导致结果系统性偏倚。
  • 上述实现和参考代码的simulate行为完全等价:都是基于点估计计算概率后直接抽样,没有额外引入参数的随机扰动。如果后续需要把多重插补带来的参数不确定性纳入模拟,才需要基于Rubin规则的合并协方差矩阵,从多元正态分布中抽样回归系数再重复计算概率,这不属于默认simulate的行为范畴。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 01:45:09