多重插补

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

mi

堆叠插补数据并包含原始数据

Stata

mi convert flong

R 包:mice

mice::complete(imp, action = "long", include = TRUE)

固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。

另有 19 个示例及替代实现

描述多重插补元数据

Stata

mi describe

R 包: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 z

R 包: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 z

R 包:mice

mice::pool(with(imp, stats::glm(binary ~ x + z, family = stats::binomial())))

与 Stata 有差异 固定流程;请明确调整示例列名。先在对数优势尺度合并,再进行指数变换。

插补连续变量均值的Rubin合并

Stata

mi estimate: mean x

R 包: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 z

R 包:mice

mice::pool(with(imp, stats::glm(count ~ x + z, family = stats::poisson())))

与 Stata 有差异 固定流程;请明确调整示例列名。合并对数发生率系数;过度离散须另行评估。

线性回归系数的Rubin合并

Stata

mi estimate: regress y x z

R 包:mice

mice::pool(with(imp, stats::lm(y ~ x + z)))

与 Stata 有差异 固定流程;请明确调整示例列名。合并插补内及插补间方差;完整数据自由度须符合分析。

直接合并系数向量与协方差矩阵

Stata

mi estimate: regress y x z

R 包: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 1

R 包: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 predictors

R 包: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^2

R 包:mice

lapply(mice::complete(imp, action = "all"), function(d) transform(d, square = x^2))

固定流程;请明确调整示例列名。变换不参与插补预测时可在插补后派生;否则须在链中使用被动插补。

合并重复完整数据Wald检验

Stata

mi test x

R 包: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 z

R 包: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 varying

R 包: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数据格式。

检查每份插补数据的变量分布

Stata

mi xeq: summarize x

R 包:mice

lapply(mice::complete(imp, action = "all"), function(d) summary(d$x))

固定流程;请明确调整示例列名。R的mids元数据及存储结构不同于Stata的MI数据格式。