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

使用mice与semTools进行SEM缺失值插补后无法获取p值与拟合指数

解决SEM多重插补后标准化系数与拟合指标获取问题

问题本质

你遇到的是sem.mi()/runMI()返回的pooled模型对象不兼容lavaan通用函数的问题——普通summary()、fitMeasures()无法直接处理这类多重插补合并后的模型,需要用semTools专为MI设计的工具函数。

解决方案

1. 提取标准化系数

使用standardizedSolution.mi()(semTools专属方法)替代summary(standardized=TRUE):

# 针对runMI/sem.mi返回的pooled_model
std_results <- standardizedSolution.mi(pooled_model)
print(std_results)

该函数会输出合并后的标准化系数(含std.all/std.nox/std.lv等维度)、标准误、p值等完整统计量。

2. 获取模型拟合指标

用fitMeasures.mi()替代通用fitMeasures():

fit_stats <- fitMeasures.mi(pooled_model)
print(fit_stats)

此函数会合并15个插补数据集的拟合结果,返回CFI、TLI、RMSEA、SRMR等常用指标。

3. 整合非标准化与标准化输出

若需同屏查看两类系数,可组合基础summary和标准化结果:

# 非标准化系数汇总
summary(pooled_model)
# 标准化系数补充输出
cat("\n=== 标准化系数 ===\n")
print(std_results[, c("lhs", "op", "rhs", "est.ave", "std.all", "p.ave")])

4. 模拟数据集验证代码

以下完整流程可复现并验证解决方案:

library(mice)
library(semTools)
library(lavaan)

# 生成带缺失值的模拟SEM数据
set.seed(123)
dat <- simulateData("
  f1 =~ x1 + x2 + x3
  f2 =~ x4 + x5 + x6
  f1 ~~ f2
", sample.nobs = 200)
dat <- ampute(dat, prop = 0.2)$amputed # 加入20%缺失值

# 生成15个插补数据集
imp <- mice(dat, m = 15, printFlag = FALSE)

# 定义SEM模型
sem_model <- '
  f1 =~ x1 + x2 + x3
  f2 =~ x4 + x5 + x6
  f1 ~~ f2
'

# 运行多重插补SEM
pooled_model <- runMI(sem_model, data = imp, fun = "sem")

# 获取标准化系数
std_results <- standardizedSolution.mi(pooled_model)
# 获取拟合指标
fit_stats <- fitMeasures.mi(pooled_model)

# 查看结果
print(std_results)
print(fit_stats)

注意事项

  • 必须使用semTools中带.mi后缀的方法,这类方法专门适配多重插补后的pooled模型对象。
  • 确认runMI()传入的是mice生成的mids对象,而非手动拆分的数据集列表;若用sem.mi(),需确保输入的是插补数据集列表(complete(imp, "all"))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 13:32:03