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

pROC包中roc.test()输出的AUC估计值与roc()函数原始结果不一致的原因探究

为什么roc对象和roc.test()输出的AUC不一致?

嘿,这个问题其实是pROC包的roc.test()在处理相关ROC曲线(基于同一组样本的不同预测指标)时的默认行为导致的,我帮你梳理清楚:

核心原因:样本集被自动筛选了

当你用roc.test()比较两条相关的ROC曲线时,它会自动只保留同时拥有两个预测变量(SOFA1和SOFA7)有效观测值的样本——简单说就是剔除了那些SOFA1或SOFA7存在缺失值的样本。

看你的数据就能发现差异:

  • 单独构建roc1时用了26个存活样本 + 18个死亡样本 = 44个样本,AUC为0.7692
  • 单独构建roc2时用了26个存活样本 + 2个死亡样本 = 28个样本,AUC为0.9327

而roc.test()计算时用的是这两个样本集的交集(同时有SOFA1和SOFA7数据的样本),样本量比28个还要少(或刚好一致),这直接导致了AUC结果的变化——你看到的roc.test里的0.9615就是roc1在这个子集上的AUC,而非原来44个样本的结果。

另外要注意:roc2的死亡样本只有2个,这么小的样本量计算出来的AUC可靠性极低,解读时一定要谨慎!

怎么让两者的AUC一致?

如果你想让roc.test()使用和单独构建ROC曲线时完全相同的样本集,需要手动先筛选出完整的样本对,再重新构建ROC曲线并比较:

# 先筛选同时有SOFA1和SOFA7数据的样本
complete_subset <- cData$`<60`[!is.na(cData$`<60`$SOFA1) & !is.na(cData$`<60`$SOFA7), ]

# 用筛选后的样本构建ROC曲线
roc1 <- roc(complete_subset$resule, complete_subset$SOFA1)
roc2 <- roc(complete_subset$resule, complete_subset$SOFA7)

# 再进行曲线比较
roc.test(roc1, roc2)

这时候你再查看roc对象和roc.test的输出,AUC值就会完全一致了。

内容的提问来源于stack exchange,提问作者dbcoffee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 09:09:08