Получите оптимальный порог с чувствительностью не менее 75% с помощью pROC in R

У меня есть фрейм данных с двумя столбцами: score1, который равен numeric, и truth1, который равен boolean. Я хочу предсказать truth1, используя score1. Для этого мне нужна простая линейная модель, а затем я прошу хороший порог, то есть порог, который дает мне 75% чувствительности моей кривой ROC. Следовательно, я делаю:

roc_curve = roc(truth1 ~ score1 , data = my_data)
coords(roc=roc_curve, x = 0.75, input='sensitivity', ret='threshold')

Моя проблема в том, что координаты возвращают «NA», потому что чувствительность 0,75 не отображается на кривой ROC. Итак, вот мой вопрос: как я могу получить порог, который дает мне чувствительность не менее 0,75 с максимальной специфичностью?


person sweeeeeet    schedule 14.10.2015    source источник


Ответы (2)


Вариант 1: вы фильтруете результаты

my.coords <- coords(roc=roc_curve, x = "all", transpose = FALSE)
my.coords[my.coords$sensitivity >= .75, ]

Вариант 2: вы можете обмануть pROC, запросив частичную AUC от 75% до 100% чувствительности:

roc_curve = roc(truth1 ~ score1 , data = my_data, partial.auc = c(1, .75), partial.auc.focus="sensitivity")

Все методы pROC будут следовать этому запросу и давать результаты только в этой интересующей области:

coords(roc=roc_curve, x = "local maximas", ret='threshold', transpose = FALSE)
person Calimo    schedule 15.10.2015

Чтобы расширить отличный ответ Калимо, вот обобщающий фрагмент кода:

# Specify SENSITIVITY criteria to meet.
Sn.upper <- 1.0
Sn.lower <- 0.5

# Specify SPECIFICITY criteria to meet.
Sp.upper <- 1.0
Sp.lower <- 0.6

# Extract all coordinate values from the ROC curve.
my.coords <- coords(roc=auc, x = "all", transpose = FALSE)

# Identify and print all points on the ROC curve that meet the JOINT sensitivity AND specificity criteria.
my.coords[(my.coords$specificity >= Sp.lower & my.coords$specificity <= Sp.upper & 
            my.coords$sensitivity >= Sn.lower & my.coords$sensitivity <= Sn.upper),]

Пример вывода:

       threshold specificity sensitivity
all.46    10.950   0.5000000   0.7073171
all.47    11.080   0.5138889   0.7073171
all.48    11.345   0.5138889   0.6829268
all.49    11.635   0.5138889   0.6585366
all.50    11.675   0.5138889   0.6341463
all.51    11.700   0.5277778   0.6341463
all.52    11.725   0.5277778   0.6097561
all.53    11.850   0.5416667   0.6097561
all.54    12.095   0.5555556   0.6097561
person Rob    schedule 20.03.2018