Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: sweeeeeetОтветов: 2

У меня есть фрейм данных с двумя столбцами: 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 с максимальной специфичностью?

rrocproc-r-package

Ответы

Ответ 1 · рейтинг 12 · Calimo

Вариант 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)

Ответ 2 · рейтинг 2 · Rob

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

# 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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы