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
相关产品推荐
相关产品推荐

