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

如何编写函数从mice的mids对象正确提取缺失信息占比(FMI)?

问题根源

你的函数错误在于:

  1. 直接提取了原始未插补数据dsn$data[, as.character(pars$varname)],而非每个插补后的数据集;
  2. 在with(dsn, lm(var2use ~1))中,var2use是外部环境的变量,没有在每个插补数据集的环境内解析,导致所有插补模型都用了同一组原始数据,插补间变异b为0,最终FMI等统计量完全错误。

正确实现方法

需要让lm表达式在每个插补数据集的环境中正确解析目标变量,以下两种方法都可以实现:

方法1:动态构建公式字符串

get_fmi <- function(dsn, varname) {
  # 将变量名转为字符串
  var_str <- as.character(substitute(varname))
  # 动态构建公式并在每个插补数据集上拟合
  fit <- with(dsn, lm(formula(paste(var_str, "~ 1"))))
  # 合并结果
  pool(fit)
}

方法2:使用substitute传递表达式

get_fmi <- function(dsn, varname) {
  # 构建针对目标变量的lm表达式
  fit_expr <- substitute(lm(y ~ 1), list(y = substitute(varname)))
  # 在每个插补数据集上执行表达式
  fit <- with(dsn, eval(fit_expr))
  # 合并结果
  pool(fit)
}

验证结果

调用函数:

get_fmi(imp, chl)

输出与手动计算完全一致:

Class: mipo    m = 5 
         term m estimate     ubar       b       t dfcom       df       riv    lambda       fmi
1 (Intercept) 5  192.944 65.01424 5.91888 72.1169    24 19.10544 0.1092477 0.0984881 0.1800528

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:05:23