Closed jo1511 closed 3 years ago
Hi, the easiest way to do that is probably to just take the ROC curve values from the result of cutpointr and plot the ROC curve manually with ggplot. cutpointr returns all the necessary values. Maybe something like this?
library(cutpointr)
library(tidyverse)
cp <- cutpointr(suicide, dsi, suicide)
#> Assuming the positive class is yes
#> Assuming the positive class has higher x values
res_unnested <- cp %>%
unnest(cols = roc_curve)
annotation <- paste0("AUC: ", round(cp$AUC, 2), "\n",
"Cutpoint: ", round(cp$optimal_cutpoint, 2))
ggplot(res_unnested, aes(x = 1 - tnr, y = tpr)) +
xlab("1 - Specificity") +
ylab("Sensitivity") +
theme_bw() +
theme(aspect.ratio = 1) +
geom_line(color = "blue") +
geom_vline(xintercept = 1 - cp$specificity, linetype = 2) +
geom_hline(yintercept = cp$sensitivity, linetype = 2) +
annotate("text", x = 0.85, y = 0.05, label = annotation) +
ggtitle("ROC curve", "with custom styling and annotation")
Created on 2021-11-01 by the reprex package (v2.0.0)
Great, many thanks for your fast reply, everything worked well with my data!!!
Just one, probably easy question, if you don't mind. I used the youden metric with OptimalCutpoints and cutpointr and they gave the same results. However, when I used the MinValueSp metric with OptimalCutpoints I was not quite sure which metric to use in cutpointr. I tried spec_constrain and minimize_metric, but that did not give the same results.
Again sorry for my stupidity:-(
Jo1511
Hi, no problem. I think it is the other way around:
MinValueSp
in OptimalCutpoints
maximizes sensitivity given a minimum value of specificity given in something like control = control.cutpoints(valueSp = 0.8)
spec_constrain
in cutpointr
optimizes (depending on the chosen function for method
) the specificity given a minimum value of another metric, such as sensitivity. For example: constrain_metric = sensitivity, min_constrain = 0.8
If you want to maximize sensitivity given a minimum value for specificity in cutpointr
that would be something like:
cutpointr(suicide, dsi, suicide,
metric = sens_constrain,
method = maximize_metric,
pos_class = "yes", direction = ">=",
constrain_metric = specificity, min_constrain = 0.8)
Ok, got it, and worked well! Many thanks again, you made my day!
jo1511
Sorry, but I'm quite a newbie here and I don't know if this is really the right place to ask.
I wanted to just plot the ROC curve with the cutpoint and a vertival and horizontal line at the cutpoint. In addition, I wanted to change the appearance of the cutpoint and the lines (ROC, vline, hline) with regard to type, size/with and color. I also wanted to print the AUC value and the cutpoint values into the graph.
However, I failed and finally I don't have any idea what to do with the tibbles. Can anyone help me please!
Many thanks in advance!
Jo1511