求基于mice多重插补后glmer()混合效应逻辑回归的AUC获取方法
多重插补后混合效应逻辑回归模型的AUC计算方案
核心思路
由于psfmi暂不支持glmer模型的性能指标合并,我们需要手动在每个插补数据集上计算AUC,再通过Rubin规则合并跨插补的结果,步骤如下:
- 提取每个插补数据集对应的
glmer模型 - 对每个模型计算预测概率与真实结果的AUC及标准误
- 用Rubin规则合并所有插补集的AUC估计值与方差
示例代码
1. 加载依赖包并拟合模型
library(mice) library(lme4) library(pROC) library(mitml) # 假设已完成多重插补得到mids_data,拟合模型 model <- with(mids_data, glmer(outcome ~ var1 + var2 + (1|randomeffect), family = binomial, control=glmerControl(optimizer="bobyqa")))
2. 逐插补集计算AUC
# 提取所有插补数据集的模型结果 models <- complete(model, "all") # 存储每个插补集的AUC和标准误 auc_df <- data.frame(auc = numeric(length(models)), se = numeric(length(models))) for (i in seq_along(models)) { mod <- models[[i]] # 获取边际预测概率(不包含随机效应,若要包含随机效应则加re.form=NULL) pred_probs <- predict(mod, type = "response") # 获取真实结局变量 true_y <- mod@frame$outcome # 计算AUC及标准误(这里用delong方法,也可选择bootstrap) roc_obj <- roc(true_y, pred_probs) auc_df$auc[i] <- auc(roc_obj) auc_df$se[i] <- se(roc_obj, method = "delong") }
3. 用Rubin规则合并结果
m <- nrow(auc_df) # 合并后的AUC估计值 pooled_auc <- mean(auc_df$auc) # 内部方差(插补集内的平均方差) within_var <- mean(auc_df$se^2) # 插补间方差 between_var <- var(auc_df$auc) # 总方差(Rubin规则公式) total_var <- within_var + between_var + between_var/m # 合并后的标准误 pooled_se <- sqrt(total_var) # 输出结果 cat(sprintf("合并后AUC: %.3f\n", pooled_auc)) cat(sprintf("标准误: %.3f\n", pooled_se)) cat(sprintf("95%%置信区间: [%.3f, %.3f]\n", pooled_auc - 1.96*pooled_se, pooled_auc + 1.96*pooled_se))
(可选)用mitml包自动合并
# 转换为mitml兼容格式 mitml_obj <- as.mitml.result(model) # 定义AUC计算函数 calc_auc <- function(mod) { pred <- predict(mod, type = "response") true_y <- mod@frame$outcome roc_res <- roc(true_y, pred) return(data.frame(AUC = auc(roc_res), AUC_SE = se(roc_res))) } # 自动合并结果 pooled_result <- testEstimates(mitml_obj, fun = calc_auc, var.comp = TRUE) print(pooled_result)
关键注意事项
- 预测类型选择:
predict(glmer)默认输出边际预测概率(不考虑随机效应),若需基于个体随机效应的条件预测,需添加参数re.form=NULL,两种预测的AUC含义不同,需根据研究目标选择。 - 模型收敛性:需确保每个插补集的
glmer模型都收敛,可通过checkConv(mod)检查,避免因模型不收敛导致AUC结果偏差。 - 标准误计算方法:
pROC::se()支持delong、bootstrap等多种方法,默认是bootstrap,可根据数据量选择合适的方法。
内容的提问来源于stack exchange,提问作者jstack
相关产品推荐
相关产品推荐

