Пакет pROC R с настраиваемыми значениями отсечки?

Могу ли я использовать некоторые заранее заданные значения отсечки (пороги) для построения кривой ROC с помощью пакета pROC? Например, могу ли я ввести контрольные значения / значения наблюдений и свои собственные пороговые точки, где рассчитывать соответствующую чувствительность и специфичность?


person Vish    schedule 17.07.2014    source источник
comment
Из комментариев, которые вы оставили в моем ответе, похоже, что то, что вы спрашиваете, НЕ является кривой ROC. Кривая ROC выходит за все пороги. Если вы ограничите пороги, ваша кривая больше не будет ROC. Так что перефразируйте свой вопрос.   -  person Calimo    schedule 11.08.2014
comment
Кроме того, для меня не имеет никакого смысла, какого черта ты хочешь делать, вероятно, потому что твой вопрос слишком конкретен. Если вы расскажете нам немного больше о причине вашего выбора, возможно, появится лучший ответ.   -  person Calimo    schedule 11.08.2014


Ответы (2)


Взгляните на ?plot.roc.

Допустим, у вас есть:

my.cutoff <- 0.6

Тогда вы сможете:

library(pROC)
data(aSAH)
plot.roc(aSAH$outcome, aSAH$s100b, print.thres = my.cutoff)
person Calimo    schedule 17.07.2014
comment
Большое спасибо за ваш ответ. Но я хочу чего-то другого, чем это. Я не знаю, как pROC выбирает пороги для расчета чувствительности и специфичности. Однако я хочу рассчитать их по указанным мной пороговым значениям. Например, roc (case = mycases, control = mycontrols, ...); здесь есть способ указать мои собственные пороговые значения? - person Vish; 18.07.2014
comment
@Vish Я использовал 0.6, но вы можете указать любое отсечение в my.cutoff, вы также можете передать вектор отсечки. - person Calimo; 19.07.2014
comment
@ Виш, чем еще я могу помочь? - person Calimo; 23.07.2014
comment
Еще раз большое спасибо за внимание. Однако я хочу использовать свои собственные пороги для построения кривой ROC. Например, roc (case = mycases, control = mycontrols, Thresholds = c (0.6, 1, 1.5, 1.8). Затем функция создает кривую ROC и AUC, учитывая ТОЛЬКО указанные пороговые значения. Я думаю, это невозможно с пакетом pROC. Это так? Большое спасибо. - person Vish; 08.08.2014
comment
@Vish Вы не можете сгенерировать кривую ROC только с несколькими порогами: это больше не ROC. - person Calimo; 11.08.2014

Это больше не кривая ROC

Чтобы ответить на ваши комментарии в моем другом ответе (но не ответить на ваш вопрос, на который нельзя ответить, как я прокомментировал выше), я могу дать вам способ делать то, что вы, кажется, хотите. Пожалуйста, ни при каких обстоятельствах НЕ называйте это кривой ROC: это не так! Пожалуйста, придумайте описательное название самостоятельно, в зависимости от цели этого упражнения (которую вы никогда не объясняли).

Вы можете делать то, что вам кажется, косвенно, с pROC: вы вычисляете ROC для всех порогов, извлекаете нужные координаты и используете функцию трапеции для завершения.

library(pROC)
data(aSAH)
my.cutoff <- c(0.6, 1, 1.5, 1.8)
roc.obj <- roc(aSAH$outcome, aSAH$s100b)
like.coordinates <- coords(roc.obj, c(-Inf, sort(my.cutoff), Inf), input="threshold", ret=c("specificity", "sensitivity"))

Теперь вы можете отобразить результаты как:

plot(like.coordinates$specificity, like.coordinates$sensitivity, xlim=c(1, 0), type="l")

И вычислите AUC, например, с помощью функции trapz в пакете caTools:

library(caTools)
trapz(like.coordinates$specificity, like.coordinates$sensitivity)

Еще раз, вы НЕ построили кривую ROC, и вычисленная вами AUC НЕ является кривой ROC.

person Calimo    schedule 11.08.2014