将mice生成的多重插补数据集传入fit.mult.impute时遇错求助
多重插补数据集分析:fit.mult.impute报错解决及替代方案
问题背景
在Cross Validated的帖子中,Frank Harrell建议使用Hmisc包的fit.mult.impute()函数处理mice包生成的多重插补数据集,再传入rms包的contrast()函数实现多重比较的置信区间同步校正。但运行代码时出现以下错误:
Error in fitter(formula, data = completed.data, ...) : could not find function "fitter"
复现代码
library(tidyverse) library(Hmisc) library(mice) library(rms) set.seed(1234) m <- mtcars # 随机替换值为NA m %>% mutate(across(.cols = everything(), .fns = ~ifelse(test = runif(length(.x))>0.1, yes = .x, no = NA))) -> m # 创建因子变量 m %>% mutate(across(.cols = c(gear, vs), .fns = ~factor(.x))) -> m # 执行多重插补 mice(data = m, maxit = 30, seed = 1234) -> ini # 原报错代码 fit.mult.impute(formula = mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb, data = ini, xtrans = ini, n.impute = 5, fitter = "lm") -> fmi
报错原因分析
fitter参数类型错误:fit.mult.impute()要求fitter传入函数对象(如lm),而非字符串(如"lm")。data参数传递错误:data需要传入原始含缺失值的数据集,而非mice生成的插补对象;xtrans才是指定mice插补结果的参数。- 插补数量匹配问题:
n.impute需与mice()生成的插补数据集数量一致(默认生成5个,可通过ini$m查看)。
解决方法:修正fit.mult.impute()调用
调整参数后即可正常运行:
# 修正后的fit.mult.impute调用 fit.mult.impute(formula = mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb, data = m, # 传入原始数据集 xtrans = ini, # 传入mice插补对象 n.impute = ini$m, # 匹配插补数量 fitter = lm) -> fmi # 执行同步置信区间校正 rms::contrast(fit = fmi, conf.type = "simultaneous")
替代方案:使用mice原生流程实现
若仍存在兼容问题,可采用mice原生的with()+pool()流程拟合模型,再结合rms工具处理:
# 在插补数据集上拟合rms的lrm模型 fit_list <- with(ini, expr = lrm(mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb)) # 合并插补模型结果 pooled_fit <- pool(fit_list) # 循环生成各插补数据集的contrast结果 contrasts_list <- lapply(1:ini$m, function(i) { complete_data <- complete(ini, action = i) fit <- lrm(mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb, data = complete_data) contrast(fit, conf.type = "simultaneous") }) # 用Rubin规则合并contrast结果 pooled_contrasts <- mice::pool(contrasts_list) summary(pooled_contrasts)
会话信息
R version 4.2.2 (2022-10-31 ucrt) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows 10 x64 (build 22621) Matrix products: default locale: [1] LC_COLLATE=English_Australia.utf8 LC_CTYPE=English_Australia.utf8 [3] LC_MONETARY=English_Australia.utf8 LC_NUMERIC=C [5] LC_TIME=English_Australia.utf8 attached base packages: [1] stats graphics grDevices utils datasets methods base other attached packages: [1] rms_6.3-0 SparseM_1.81 Hmisc_4.7-1 Formula_1.2-4 survival_3.4-0 lattice_0.20-45 [7] miselect_0.9.0 naniar_1.0.0 magrittr_2.0.3 haven_2.5.1 mice_3.14.0 lubridate_1.9.2 [13] forcats_1.0.0 stringr_1.5.1 dplyr_1.1.2 purrr_1.0.1 readr_2.1.4 tidyr_1.3.0 [19] tibble_3.2.1 ggplot2_3.5.1 tidyverse_2.0.0 loaded via a namespace (and not attached): [1] viridis_0.6.2 viridisLite_0.4.2 splines_4.2.2 latticeExtra_0.6-30 [5] norm_1.0-10.0 pillar_1.9.0 backports_1.4.1 quantreg_5.94 [9] glue_1.6.2 visdat_0.6.0 digest_0.6.29 RColorBrewer_1.1-3 [13] checkmate_2.1.0 sandwich_3.0-2 colorspace_2.0-3 htmltools_0.5.3 [17] Matrix_1.4-1 pkgconfig_2.0.3 broom_1.0.4 mvtnorm_1.1-3 [21] scales_1.3.0 jpeg_0.1-9 tzdb_0.3.0 MatrixModels_0.5-0 [25] timechange_0.2.0 htmlTable_2.4.1 generics_0.1.3 farver_2.1.1 [29] ellipsis_0.3.2 TH.data_1.1-1 withr_3.0.1 nnet_7.3-17 [33] cli_3.6.1 deldir_1.0-6 polspline_1.1.20 fansi_1.0.3 [37] nlme_3.1-159 MASS_7.3-58.1 foreign_0.8-82 tools_4.2.2 [41] data.table_1.14.2 hms_1.1.2 multcomp_1.4-20 lifecycle_1.0.4 [45] interp_1.1-3 munsell_0.5.1 cluster_2.1.4 compiler_4.2.2 [49] rlang_1.1.0 grid_4.2.2 rstudioapi_0.14 htmlwidgets_1.5.4 [53] base64enc_0.1-3 labeling_0.4.3 codetools_0.2-18 gtable_0.3.5 [57] R6_2.5.1 zoo_1.8-10 gridExtra_2.3 knitr_1.40 [61] fastmap_1.1.0 utf8_1.2.2 stringi_1.7.8 Rcpp_1.0.9 [65] vctrs_0.6.2 rpart_4.1.16 png_0.1-7 tidyselect_1.2.1 [69] xfun_0.32
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

