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

SAS生成的多重插补数据集导入R后的识别与分析方法

SAS生成多重插补数据集导入R后的操作指南

报错原因说明

as.mids函数来自mice包,默认要求输入的长格式插补数据必须包含.imp=0的原始未插补数据子集,而SAS导出的插补数据集通常仅包含.imp=1到.imp=25的插补后样本,缺少原始数据子集,因此触发报错。

报错解决方法

方法1:补充原始数据后转mids对象(推荐)

如果你保留了插补前的原始未插补数据集,可按如下步骤处理:

# 加载依赖包
library(foreign)
library(mice)

# 读取原始未插补数据集
original_df <- read.spss("你的原始未插补数据路径.sav", use.value.label=TRUE, to.data.frame=TRUE)
# 给原始数据添加插补标识,.imp=0对应原始未插补子集
original_df$X_Imputation_ <- 0

# 合并原始数据与已读取的25份插补数据
full_long_df <- rbind(original_df, df)

# 转换为mids对象,此时不会报错
analysis_final <- as.mids(long = full_long_df, .imp = "X_Imputation_", .id = "survyid")

方法2:无需原始数据,用mitml包处理

如果找不到原始未插补数据集,可改用mitml包识别插补数据集,跳过原始数据要求:

library(mitml)
# 按插补批次拆分数据,生成单份插补数据集的列表
imp_list <- split(df, df$X_Imputation_)
# 转换为mitml可识别的插补对象
analysis_final <- as.mitml.list(imp_list)

插补数据集分析与结果汇总

基于mice包(对应方法1生成的analysis_final)

# 对每一份插补数据集运行glm模型,替换为你实际的模型公式
fit <- with(data = analysis_final, exp = glm(因变量 ~ 自变量1 + 自变量2, family = 你需要的分布族))
# 基于Rubin规则合并所有插补数据集的模型结果
pooled_fit <- pool(fit)
# 查看合并后的系数、标准误、p值等统计量
summary(pooled_fit)

基于mitml包(对应方法2生成的analysis_final)

# 对每一份插补数据集运行glm模型
fit <- with(analysis_final, glm(因变量 ~ 自变量1 + 自变量2, family = 你需要的分布族))
# 基于Rubin规则合并结果
pooled_fit <- testModels(fit, method = "Rubin")
# 查看汇总结果
summary(pooled_fit)

注意事项

  • 运行模型前需确认所有插补数据集中的变量类型、因子水平完全一致,避免模型运行报错
  • 两种方法的结果合并均遵循多重插补的标准统计规则,结果可直接用于后续报告
  • 如需运行线性模型、生存分析、混合效应模型等其他类型模型,仅需替换glm为对应建模函数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 16:09:03