R语言ROC分析不使用pROC等包如何计算AUC置信区间
无pROC依赖的AUC置信区间计算实现
你不需要安装pROC等专用ROC扩展包,基于现有代码已经使用的ROCR包函数,搭配Bootstrap自助法即可完成AUC置信区间计算。
核心逻辑
- 对测试集做和原样本量一致的有放回重采样
- 每次重采样后复用现有AUC计算逻辑得到采样子集的AUC值
- 重复采样1000~2000次得到AUC的经验分布
- 取分布的对应分位数作为置信区间上下限,95%置信区间对应2.5%、97.5%分位点
可直接嵌入的代码
在你原有代码生成score和actual.class对象后,加入以下代码即可:
# Bootstrap参数设置 set.seed(123) # 固定随机种子保证结果可复现 boot_reps <- 1000 # 重采样次数,可按需提升至2000提高稳定性 boot_auc_vec <- c() test_sample_n <- length(actual.class) for (i in 1:boot_reps) { # 生成有放回抽样索引 samp_idx <- sample(1:test_sample_n, size = test_sample_n, replace = TRUE) samp_score <- score[samp_idx] samp_label <- actual.class[samp_idx] # 跳过仅含单一类别的无效采样 if (length(unique(samp_label)) < 2) next # 复用原有逻辑计算采样AUC samp_pred <- prediction(samp_score, samp_label) samp_auc <- performance(samp_pred, "auc") boot_auc_vec[i] <- unlist(slot(samp_auc, "y.values")) } # 清理无效采样产生的缺失值 boot_auc_vec <- na.omit(boot_auc_vec) # 计算95%置信区间,调整probs参数可修改置信水平,如90%CI取c(0.05, 0.95) auc_95ci <- quantile(boot_auc_vec, probs = c(0.025, 0.975))
计算完成后你可以直接将CI结果追加到原有的all_res结果矩阵中,参考代码:
all_res <- c(all_res, "AUC_95CI_L" = round(auc_95ci[1],4), "AUC_95CI_U" = round(auc_95ci[2],4))
使用说明
- 重采样次数不建议低于1000次,次数越高置信区间估计越稳定,对应运行耗时也会增加
- 必须设置随机种子,否则每次运行得到的置信区间会存在小幅波动,不利于结果复现
- 该实现仅依赖R基础函数和你现有代码已经在使用的ROCR包,不需要额外安装任何专用ROC分析包
内容的提问来源于stack exchange,提问作者Kodex
相关产品推荐
相关产品推荐

