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

如何使用`blavaan`处理缺失数据?贝叶斯SEM缺失值处理实践问询

blavaan 贝叶斯SEM缺失值处理最优实践

所有方案均基于*缺失随机(MAR)*假设,这也是FIML、多重插补等主流缺失值处理方法的通用前提。

方案1:优先选择JAGS后端(零额外预处理成本)

  • 直接保留数据中的NA值,调用bsem()时指定参数backend = "jags"即可
  • 底层逻辑:JAGS会自动将缺失值作为额外的模型参数进行抽样,属于开发者推荐的「缺失值与模型联合建模」方案,效果等价于lavaan的missing = "FIML",不需要做任何额外的数据处理。

方案2:必须使用Stan后端时的两种落地方法

方法A:使用blavaan内置全信息似然方案

  • 该方案的似然逻辑与lavaan FIML完全一致,效果有理论保障
  • 预处理操作步骤:
    1. 统计所有样本的缺失数据模式,按模式对样本排序,提升Stan的计算效率
    2. 为每个样本生成观测变量的位置索引,标记哪些变量是有观测值的
    3. 将处理后的数据、索引参数一同传入bsem(),指定backend = "stan"即可

开发者官方说明:我们的Stan模型采用“全信息”似然法(如Wothke 2000),该似然函数与lavaan等采用最大似然估计的SEM软件处理缺失数据时所用的似然函数完全一致。使用该方案时向Stan传输前的数据预处理环节会增加额外工作量:需要对每个样本的观测值建立索引,同时按缺失数据模式对样本排序以提升计算效率。理论上Stan也可直接对缺失值进行抽样(即“插补”),但目前该功能暂未实现。

方法B:前置多重插补

  • 如果不想自己写预处理代码,可以先使用mice、Amelia等包对原始数据做多重插补,生成5-10套完整的插补数据集
  • 对每套插补数据集分别运行bsem(),最后按照贝叶斯参数合并规则合并多套模型的结果即可,可靠性与前两种方案无显著差异。

不推荐的操作

  • 除了列表删除外,也不推荐使用单值插补(比如均值插补、中位数插补),会低估参数标准误,影响结果可靠性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:27:01