Howto Plot ROC-кривая в R только с известной информацией SN / PPV / Cutoff - PullRequest
1 голос
/ 16 февраля 2012

Учитывая такие данные:

#Cutpoint         SN   (1-PPV)
5       0.56    0.01
7       0.78    0.19
9       0.91    0.58

Как я могу построить кривую ROC с R, которая дает аналогичный результат, как прилагается image?

Я знаю пакет ROCR, но он не требует такого ввода.

1 Ответ

4 голосов
/ 16 февраля 2012

Если вы просто хотите создать график (без этого глупого интерполяционного сплайна между точками), просто нанесите данные, которые вы предоставляете стандартным способом, добавляя точку в (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() устанавливает область построения, вообще не выполняя построение графика.Обратите внимание, что я заставляю график покрывать диапазон (0,1) по обеим осям.Вызов par() сообщает R для построения осей, которые охватывают диапазон данных - по умолчанию они расширяются на 4 процента диапазона по каждой оси.

Следующая строка, with(dat, lines(....)), рисует кривую ROC издесь мы добавляем и добавляем точки в точках (0,0) и (1,1), чтобы получить полную кривую.Здесь я использую type = "o", чтобы задать как точки, так и линии, наложенные, точки представлены символом 25, который позволяет заполнить его цветом, здесь черным.

Затем я добавляю метки к точкам, используя text(....);аргумент pos используется для позиционирования метки вдали от фактических координат построения.Я беру метки от объекта cutpoint во фрейме данных.

Вызов abline() рисует линию 1: 1 (здесь 0 и 1 означают перехват 0и наклон 1 соответственно.

Последняя строка сбрасывает параметры построения к значениям по умолчанию, которые мы сохранили в op до построения (в первой строке).

Полученный графиквыглядит следующим образом:

enter image description here

Это не точный факсимиле, и я предпочитаю график, использующий по умолчанию для диапазонов осей (добавление 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)

enter image description here

Опять же, не факсимиле, а близко.

...