如何仅使用已知的SN / PPV /截止信息绘制R中的ROC曲线

时间:2012-02-16 09:01:36

标签: r curve roc

鉴于此类数据:

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

如何用R生成ROC曲线,产生类似于的结果 附上image

我知道ROCR包但不接受这样的输入。

1 个答案:

答案 0 :(得分:4)

如果你只是想创建绘图(没有点之间没有那么傻的插值样条),那么只需绘制你用标准方式给出的数据,在(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行(此处为01分别表示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

同样,不是真正的传真,而是接近。