多重插补
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
mi
堆叠插补数据并包含原始数据
Stata
mi convert flongR 包:mice
mice::complete(imp, action = "long", include = TRUE)固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。
另有 19 个示例及替代实现
描述多重插补元数据
Stata
mi describeR 包:mice
list(imputations = imp$m, missing_by_variable = imp$nmis, methods = imp$method)固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。
合并估计及90%区间
Stata
mi estimate, level(90): regress y x zR 包:mice
summary(mice::pool(with(imp, stats::lm(y ~ x + z))), conf.int = TRUE, conf.level = .90)与 Stata 有差异 固定流程;请明确调整示例列名。使用mice的合并小样本自由度规则。
合并Logistic回归系数
Stata
mi estimate: logit binary x zR 包:mice
mice::pool(with(imp, stats::glm(binary ~ x + z, family = stats::binomial())))与 Stata 有差异 固定流程;请明确调整示例列名。先在对数优势尺度合并,再进行指数变换。
插补连续变量均值的Rubin合并
Stata
mi estimate: mean xR 包:mice
{ completed <- mice::complete(imp, "all"); Q <- vapply(completed, function(d) mean(d$x), numeric(1)); U <- vapply(completed, function(d) stats::var(d$x) / nrow(d), numeric(1)); mice::pool.scalar(Q, U, n = nrow(data), k = 1) }与 Stata 有差异 固定流程;请明确调整示例列名。明确指定插补内均值方差和完整数据样本量。
合并Poisson回归系数
Stata
mi estimate: poisson count x zR 包:mice
mice::pool(with(imp, stats::glm(count ~ x + z, family = stats::poisson())))与 Stata 有差异 固定流程;请明确调整示例列名。合并对数发生率系数;过度离散须另行评估。
线性回归系数的Rubin合并
Stata
mi estimate: regress y x zR 包:mice
mice::pool(with(imp, stats::lm(y ~ x + z)))与 Stata 有差异 固定流程;请明确调整示例列名。合并插补内及插补间方差;完整数据自由度须符合分析。
直接合并系数向量与协方差矩阵
Stata
mi estimate: regress y x zR 包:mitools
{ fits <- lapply(mice::complete(imp, "all"), function(d) stats::lm(y ~ x + z, data = d)); mitools::MIcombine(lapply(fits, stats::coef), lapply(fits, stats::vcov)) }与 Stata 有差异 固定流程;请明确调整示例列名。低层Rubin合并替代流程;小样本须明确自由度假设。
提取第一个完整数据集
Stata
mi extract 1R 包:mice
mice::complete(imp, 1)固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。
二元Logistic链式方程插补
Stata
mi impute chained (logit) category (pmm, knn(5)) x z = y, add(3)R 包:mice
mice::mice(data, m = 3, maxit = 3, method = methods, seed = 131, donors = 5L, printFlag = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。插补前设定分类变量类型并匹配模型族;跨软件随机抽样不同。
无序分类链式方程插补
Stata
mi impute chained (mlogit) category (pmm, knn(5)) x z = y, add(3)R 包:mice
mice::mice(data, m = 3, maxit = 3, method = methods, seed = 131, donors = 5L, printFlag = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。插补前设定分类变量类型并匹配模型族;跨软件随机抽样不同。
有序分类链式方程插补
Stata
mi impute chained (ologit) category (pmm, knn(5)) x z = y, add(3)R 包:mice
mice::mice(data, m = 3, maxit = 3, method = methods, seed = 131, donors = 5L, printFlag = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。插补前设定分类变量类型并匹配模型族;跨软件随机抽样不同。
自定义插补预测矩阵
Stata
mi impute chained (pmm, knn(5)) x z = y, add(3) // restrict predictorsR 包:mice
{ predictors <- mice::make.predictorMatrix(data); predictors["x", "z"] <- 0; mice::mice(data, m = 3, maxit = 3, predictorMatrix = predictors, seed = 132, donors = 5L, printFlag = FALSE) }固定流程;请明确调整示例列名。针对逐变量插补模型的流程;不能由Stata语法自动推断R预测矩阵。
链式方程插补方法:pmm
Stata
mi impute chained (pmm, knn(5)) x z = y, add(3) rseed(108)R 包:mice
mice::mice(data, m = 3, maxit = 3, method = "pmm", seed = 108, donors = 5L, printFlag = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。插补算法和随机抽样不同,须明确预测矩阵和各变量模型类型。
链式方程插补方法:norm
Stata
mi impute chained (regress) x z = y, add(3) rseed(108)R 包:mice
mice::mice(data, m = 3, maxit = 3, method = "norm", seed = 108, printFlag = FALSE)与 Stata 有差异 固定流程;请明确调整示例列名。插补算法和随机抽样不同,须明确预测矩阵和各变量模型类型。
在每份完整数据中一致构造非线性变量
Stata
mi passive: generate square = x^2R 包:mice
lapply(mice::complete(imp, action = "all"), function(d) transform(d, square = x^2))固定流程;请明确调整示例列名。变换不参与插补预测时可在插补后派生;否则须在链中使用被动插补。
合并重复完整数据Wald检验
Stata
mi test xR 包:mice
{ full <- with(imp, stats::lm(y ~ x + z)); reduced <- with(imp, stats::lm(y ~ z)); mice::D1(full, reduced) }D1合并系数估计与协方差矩阵,实施与Stata的mi test相应的多变量MI Wald检验。须统一系数顺序和完整数据自由度;D2合并检验统计量,属于不同规则。
合并多变量Wald比较
Stata
mi test x zR 包:mice
{ full <- with(imp, stats::lm(y ~ x + z)); reduced <- with(imp, stats::lm(y ~ 1)); mice::D1(full, reduced) }与 Stata 有差异 固定流程;请明确调整示例列名。D1合并嵌套模型Wald信息;系数顺序必须一致。
识别插补间取值变化的变量
Stata
mi varyingR 包:mice
vapply(imp$imp, function(z) if (nrow(z)) any(apply(z, 1, function(v) length(unique(v)) > 1)) else FALSE, logical(1))固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。