Tidymodels ROC 曲线叠加在一张图中

Fre*_*son 3 plot r ggplot2 roc tidymodels

我有几条 tidymodels /parsnip 模型性能的 ROC 曲线,我想在一个图中相互展示以进行视觉比较:

roc1 <- structure(list(.threshold = c(-Inf, 0.188422381048697, 0.23446542423272, 
0.241282102642437, 0.259726705912688, 0.29097010004365, 0.309897370938121, 
0.33607659920306, 0.348797482584728, 0.371543061749991, 0.37849110465008, 
0.403024193339376, 0.408074451522232, 0.425203432699806, 0.43288528993523, 
0.437168077386449, 0.441435377101706, 0.454812465942723, 0.46890082819098, 
0.469324015885685, 0.471191285258535, 0.473285736958109, 0.484067175067965, 
0.501634453233048, 0.502895404815678, 0.505260074955513, 0.509400496728661, 
0.512826032440735, 0.514474796037162, 0.520894854910534, 0.52482313756493, 
0.544137627333669, 0.546168394598085, 0.555557692971751, 0.562118235565918, 
0.564565992908277, 0.572138872116962, 0.5792082477202, 0.611888118194463, 
0.621908020887883, 0.623655143605973, 0.629887735979754, 0.632025630132792, 
0.636193886667259, 0.638203230744601, 0.646775289308722, 0.655148011873394, 
0.658581199234482, 0.658707835285112, 0.66292920495746, 0.6753497980617, 
0.691520083977918, 0.702288194696498, 0.704440842146043, 0.724494989785773, 
0.735933141947951, 0.756427437462373, 0.785412673453098, 0.831367501773009, 
0.831554130258554, 0.840204698487284, 0.845340108802608, 0.876022993703215, 
Inf), specificity = c(0, 0, 0.032258064516129, 0.0645161290322581, 
0.0645161290322581, 0.0967741935483871, 0.129032258064516, 0.129032258064516, 
0.161290322580645, 0.193548387096774, 0.193548387096774, 0.193548387096774, 
0.225806451612903, 0.258064516129032, 0.290322580645161, 0.290322580645161, 
0.32258064516129, 0.354838709677419, 0.387096774193548, 0.419354838709677, 
0.419354838709677, 0.451612903225806, 0.483870967741935, 0.483870967741935, 
0.516129032258065, 0.548387096774194, 0.548387096774194, 0.580645161290323, 
0.612903225806452, 0.645161290322581, 0.67741935483871, 0.709677419354839, 
0.741935483870968, 0.741935483870968, 0.774193548387097, 0.774193548387097, 
0.806451612903226, 0.806451612903226, 0.806451612903226, 0.806451612903226, 
0.806451612903226, 0.838709677419355, 0.870967741935484, 0.903225806451613, 
0.903225806451613, 0.903225806451613, 0.903225806451613, 0.903225806451613, 
0.935483870967742, 0.935483870967742, 0.935483870967742, 0.935483870967742, 
0.935483870967742, 0.935483870967742, 0.935483870967742, 0.935483870967742, 
0.935483870967742, 0.967741935483871, 0.967741935483871, 0.967741935483871, 
0.967741935483871, 0.967741935483871, 1, 1), sensitivity = c(1, 
1, 1, 1, 0.967741935483871, 0.967741935483871, 0.967741935483871, 
0.935483870967742, 0.935483870967742, 0.935483870967742, 0.903225806451613, 
0.870967741935484, 0.870967741935484, 0.870967741935484, 0.870967741935484, 
0.838709677419355, 0.838709677419355, 0.838709677419355, 0.838709677419355, 
0.838709677419355, 0.806451612903226, 0.806451612903226, 0.806451612903226, 
0.774193548387097, 0.774193548387097, 0.774193548387097, 0.741935483870968, 
0.741935483870968, 0.741935483870968, 0.741935483870968, 0.741935483870968, 
0.741935483870968, 0.741935483870968, 0.709677419354839, 0.709677419354839, 
0.67741935483871, 0.67741935483871, 0.645161290322581, 0.612903225806452, 
0.580645161290323, 0.548387096774194, 0.548387096774194, 0.548387096774194, 
0.548387096774194, 0.516129032258065, 0.483870967741935, 0.451612903225806, 
0.419354838709677, 0.419354838709677, 0.387096774193548, 0.354838709677419, 
0.32258064516129, 0.290322580645161, 0.258064516129032, 0.225806451612903, 
0.193548387096774, 0.161290322580645, 0.161290322580645, 0.129032258064516, 
0.0967741935483871, 0.0645161290322581, 0.032258064516129, 0.032258064516129, 
0)), row.names = c(NA, -64L), class = c("roc_df", "tbl_df", "tbl", 
"data.frame"))

roc2 <- structure(list(.threshold = c(-Inf, 0.0245984712423484, 0.121359017107949, 
0.131072467658401, 0.142248180262002, 0.174718439839678, 0.186916847379931, 
0.201009592052324, 0.22775174549186, 0.233526160778895, 0.262848143155423, 
0.264050217774797, 0.280373668552781, 0.318011582323291, 0.318415193615979, 
0.329677324840282, 0.332589869970795, 0.339279045424934, 0.343146750627027, 
0.353999488644325, 0.368451302959133, 0.380400224499851, 0.382454452762277, 
0.387062370281751, 0.393182115314023, 0.393942285912218, 0.418142612859788, 
0.426440582209129, 0.452588553274978, 0.459406359267247, 0.471789781353249, 
0.476437840648499, 0.481147689631958, 0.494148755506595, 0.50035514010351, 
0.516695603414928, 0.51932448457916, 0.536527945784835, 0.536615025486866, 
0.542606209540814, 0.543066468916496, 0.562444219672172, 0.572886238497103, 
0.586135648758854, 0.626768607043579, 0.635986798762828, 0.714237639219088, 
0.718157054370763, 0.718478906730787, 0.71953633689243, 0.72332752547398, 
0.763008637891503, 0.769443642633516, 0.778224306662079, 0.78130877496054, 
0.78670422452828, 0.805606648241308, 0.809151343060367, 0.823674749878456, 
0.846195668614513, 0.864965529937434, 0.905789535975976, 0.923548842376265, 
Inf), specificity = c(0, 0, 0.032258064516129, 0.0645161290322581, 
0.0967741935483871, 0.129032258064516, 0.161290322580645, 0.193548387096774, 
0.225806451612903, 0.258064516129032, 0.258064516129032, 0.258064516129032, 
0.258064516129032, 0.290322580645161, 0.32258064516129, 0.354838709677419, 
0.387096774193548, 0.387096774193548, 0.419354838709677, 0.419354838709677, 
0.419354838709677, 0.451612903225806, 0.483870967741935, 0.483870967741935, 
0.516129032258065, 0.548387096774194, 0.548387096774194, 0.548387096774194, 
0.580645161290323, 0.580645161290323, 0.580645161290323, 0.612903225806452, 
0.645161290322581, 0.67741935483871, 0.709677419354839, 0.709677419354839, 
0.709677419354839, 0.709677419354839, 0.741935483870968, 0.741935483870968, 
0.774193548387097, 0.806451612903226, 0.806451612903226, 0.838709677419355, 
0.838709677419355, 0.838709677419355, 0.870967741935484, 0.870967741935484, 
0.870967741935484, 0.870967741935484, 0.903225806451613, 0.903225806451613, 
0.903225806451613, 0.935483870967742, 0.935483870967742, 0.935483870967742, 
0.935483870967742, 0.935483870967742, 0.935483870967742, 0.967741935483871, 
0.967741935483871, 1, 1, 1), sensitivity = c(1, 1, 1, 1, 1, 1, 
1, 1, 1, 1, 0.967741935483871, 0.935483870967742, 0.903225806451613, 
0.903225806451613, 0.903225806451613, 0.903225806451613, 0.903225806451613, 
0.870967741935484, 0.870967741935484, 0.838709677419355, 0.806451612903226, 
0.806451612903226, 0.806451612903226, 0.774193548387097, 0.774193548387097, 
0.774193548387097, 0.741935483870968, 0.709677419354839, 0.709677419354839, 
0.67741935483871, 0.645161290322581, 0.645161290322581, 0.645161290322581, 
0.645161290322581, 0.645161290322581, 0.612903225806452, 0.580645161290323, 
0.548387096774194, 0.548387096774194, 0.516129032258065, 0.516129032258065, 
0.516129032258065, 0.483870967741935, 0.483870967741935, 0.451612903225806, 
0.419354838709677, 0.419354838709677, 0.387096774193548, 0.354838709677419, 
0.32258064516129, 0.32258064516129, 0.290322580645161, 0.258064516129032, 
0.258064516129032, 0.225806451612903, 0.193548387096774, 0.161290322580645, 
0.129032258064516, 0.0967741935483871, 0.0967741935483871, 0.0645161290322581, 
0.0645161290322581, 0.032258064516129, 0)), row.names = c(NA, 
-64L), class = c("roc_df", "tbl_df", "tbl", "data.frame"))
Run Code Online (Sandbox Code Playgroud)

我可以用 绘制一个autoplot(),但我找不到一种方法来相互叠加,类似于这样的例子。

关于如何显示多个 ROC 曲线以便可以比较它们而不并排呈现它们(例如使用ggarrange)的任何想法?

Qui*_*ten 5

@Limey,已经在评论中给出了一个很好的选择。另一种选择可能是起诉geom_path。首先,您必须绑定数据框并给它们命名以便稍后为它们着色。这是一些可重现的代码:

library(ggplot2)
library(dplyr)

roc1 %>%
  mutate(name = "roc1") %>%
  bind_rows(., roc2 %>% mutate(name = "roc2")) %>%
  ggplot(aes(x = 1 - specificity, y = sensitivity, color = name)) +
  geom_path() +
  geom_abline(lty = 3) 
Run Code Online (Sandbox Code Playgroud)

创建于 2023 年 10 月 31 日,使用reprex v2.0.2