如何在一张图中叠加绘制多个tidymodels ROC曲线?
叠加多个tidymodels模型的ROC曲线
要在同一张图中叠加展示多个模型的ROC曲线,核心思路是先合并各模型的ROC曲线原始数据,再用ggplot统一绘制,具体步骤如下:
步骤1:生成各模型的ROC曲线数据
确保你用yardstick::roc_curve()函数生成每个模型的ROC曲线数据框(而非直接用autoplot()生成的ggplot对象)。假设你已经有两个模型的预测结果框preds1和preds2,其中包含真实标签列(比如truth)和预测概率列(比如.pred_class):
library(tidymodels) library(tidyverse) # 生成模型1的ROC曲线数据 roc1 <- roc_curve(preds1, truth = truth, estimate = .pred_class) # 生成模型2的ROC曲线数据 roc2 <- roc_curve(preds2, truth = truth, estimate = .pred_class)
步骤2:合并并标记ROC数据
为每个模型的ROC数据添加标识列,再合并成一个数据框:
roc_combined <- bind_rows( roc1 %>% mutate(model = "模型A"), roc2 %>% mutate(model = "模型B") )
步骤3:绘制叠加ROC曲线
用ggplot基于合并后的数据绘制曲线,自动按模型标识区分颜色:
ggplot(roc_combined, aes(x = 1 - specificity, y = sensitivity, color = model)) + geom_line(linewidth = 1) + # 绘制ROC曲线 geom_abline(lty = 2, color = "gray50") + # 添加对角线参考线 labs( x = "假阳性率 (1 - 特异性)", y = "真阳性率 (敏感性)", title = "多模型ROC曲线对比", color = "模型名称" ) + theme_minimal()
补充说明
- 如果需要添加更多模型,只需重复步骤1和2,在
bind_rows中加入对应模型的ROC数据即可。 - 若你已经有
autoplot()生成的ggplot对象,也可以通过ggplot_build(plot)$data提取其中的曲线数据,再按上述方法合并绘制,但直接使用roc_curve()生成的原始数据更简洁可控。
内容的提问来源于stack exchange,提问作者Fredrik Nylén
相关产品推荐
相关产品推荐

