如何将已多重插补数据集转为mice可识别格式以分插补项运行回归?
解决方法:分插补项运行回归并适配mice工作流
方法一:直接分组跑回归并转换为mira对象(推荐)
无需将数据集转换成mids格式,直接按impID分组拟合回归,再转为mice可识别的mira对象,就能用mice工具处理结果:
library(dplyr) library(mice) # 按插补ID分组,为每个插补数据集单独拟合回归模型 model_list <- data %>% group_by(impID) %>% do(model = lm(x ~ y + z, data = .)) %>% pull(model) # 转换为mice兼容的mira对象 mira_result <- as.mira(model_list) # 查看每个插补的回归结果 summary(mira_result) # 合并5次插补的回归结果(遵循mice标准合并逻辑) pooled_result <- pool(mira_result) summary(pooled_result)
方法二:将现有数据集转换为mids对象
如果需要完全适配mice的原生mids格式,可按以下步骤操作:
- 构建原始缺失数据集:识别每个
clientID中未被插补的变量(值无变化的变量),将被插补的变量设为NA:
original_data <- data %>% group_by(clientID) %>% summarize( x = if(n_distinct(x) > 1) NA else first(x), y = if(n_distinct(y) > 1) NA else first(y), z = if(n_distinct(z) > 1) NA else first(z) )
- 整理插补值矩阵:为每个有缺失的变量,整理出5次插补的结果矩阵:
# 整理x变量的插补值矩阵 imp_x <- data %>% filter(clientID %in% original_data$clientID[is.na(original_data$x)]) %>% arrange(clientID, impID) %>% tidyr::pivot_wider(names_from = impID, values_from = x) %>% select(-clientID) %>% as.matrix() # 整理y变量的插补值矩阵 imp_y <- data %>% filter(clientID %in% original_data$clientID[is.na(original_data$y)]) %>% arrange(clientID, impID) %>% tidyr::pivot_wider(names_from = impID, values_from = y) %>% select(-clientID) %>% as.matrix() # 组合成mice要求的imp列表结构 imp_list <- list(x = imp_x, y = imp_y)
- 创建mids对象:
mids_obj <- mice::make.mids(data = original_data, imp = imp_list, m = 5) # 现在可使用mice的with函数运行回归 regs <- with(mids_obj, lm(x ~ y + z)) summary(regs)
内容的提问来源于stack exchange,提问作者Jerrry
相关产品推荐
相关产品推荐

