如何用rms包contrast()获取fit.mult.impute系数及校正置信区间
多重插补回归结果的多重比较校正:获取同步置信区间的方法
问题背景
使用mice生成多重插补数据集,通过Hmisc包的fit.mult.impute()拟合回归并得到合并系数后,需要借助rms包的contrast()函数,利用conf.type="simultaneous"参数获取经多重比较校正的同步置信区间。但contrast()函数要求必填a和b参数,而需求是直接获取与fit.mult.impute()输出一致的系数及对应同步置信区间,无需针对预测变量做条件化设置。
复现代码
# 加载所需包 library(tidyverse) library(Hmisc) library(mice) library(rms) set.seed(1234) # 使用mtcars数据集 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 # 执行多重插补 ini <- mice(data = m, maxit = 30, seed = 1234) # 拟合多重插补回归 fmi <- fit.mult.impute( formula = mpg ~ cyl + disp + hp + drat + wt + qsec + vs + am + gear + carb, data = ini, xtrans = ini, n.impute = 5, fitter = Glm ) # 查看原回归系数 print(fmi)
解决方案:利用coefs参数获取同步置信区间
rms::contrast()提供了coefs参数,可直接指定要提取的系数索引,无需手动设置a和b参数,即可获取与原回归系数一致的同步置信区间:
# 获取所有系数的同步置信区间 syn_ci <- rms::contrast( fit = fmi, coefs = 1:length(coef(fmi)), conf.type = "simultaneous" ) # 查看结果 print(syn_ci) # 转换为数据框方便后续处理 syn_ci_df <- as.data.frame(syn_ci) print(syn_ci_df)
结果说明
- 输出的
Estimate列与fit.mult.impute()的Coef列完全一致 Lower和Upper列为经多重比较校正后的同步置信区间,比单变量置信区间更宽,符合多重比较校正的统计要求- 分类变量的水平(如
vs=1、gear=4)对应的系数会自动被纳入,无需额外设置
内容的提问来源于stack exchange,提问作者llewmills
相关产品推荐
相关产品推荐

