Howto Clyt Roc Curve в R с только известной информацией SN/PPV/Sutoff
Вопрос
Приведены такие данные:
#Cutpoint SN (1-PPV)
5 0.56 0.01
7 0.78 0.19
9 0.91 0.58
Как я могу построить кривую ROC с помощью R, которые дают такой же результат, как прикрепленный ?
Я знаю пакет ROCR, но это не требует такого вклада.
Решение
Если вы просто хотите создать график (без этого глупого интерполяционного сплайна между точками), то просто постройте данные, которые вы даете стандартным способом, подготовив точку на (0,0) и добавив один в (1,1), чтобы дать Конечные точки кривой.
## your data with different labels
dat <- data.frame(cutpoint = c(5, 7, 9),
TPR = c(0.56, 0.78, 0.91),
FPR = c(0.01, 0.19, 0.58))
## plot version 1
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)
Чтобы объяснить код: Первый plot()
Call устанавливает регион построения, не делая заговора вообще. Обратите внимание, что я заставляю график покрыть диапазон (0,1) по обеим осям. А par()
Call сообщает R оси, которые охватывают диапазон данных - по умолчанию расширяет их на 4 процента от диапазона на каждой оси.
Следующая строка, with(dat, lines(....))
рисует кривую ROC, и здесь мы предпочитаем и добавляем точки в (0,0) и (1,1), чтобы дать полную кривую. Здесь я использую type = "o"
Чтобы дать переполненные точки, так и линии, точки представлены символом 25, который позволяет заполнить его цветом, здесь черный.
Затем я добавляю этикетки в точки, используя text(....)
; а pos
Аргумент используется для определения метки от фактических координат построения построения. Я беру этикетки из cutpoint
объект в кадре данных.
А abline()
вызов рисует линию 1: 1 (здесь 0
, а также 1
означать перехват 0
И наклон 1
соответственно.
Последняя строка сбрасывает параметры построения по умолчанию, которые мы сохранили op
Перед графиком (в первой строке).
Полученный сюжет выглядит так:
Это не точное факсимиле, и я предпочитаю график, используя по умолчанию для диапазонов оси (добавление 4 процента):
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
Опять же, не настоящий факсимильный, но близкий.