You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求基于mice多重插补后glmer()混合效应逻辑回归的AUC获取方法

多重插补后混合效应逻辑回归模型的AUC计算方案

核心思路

由于psfmi暂不支持glmer模型的性能指标合并,我们需要手动在每个插补数据集上计算AUC,再通过Rubin规则合并跨插补的结果,步骤如下:

  1. 提取每个插补数据集对应的glmer模型
  2. 对每个模型计算预测概率与真实结果的AUC及标准误
  3. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 20:24:53