1

鉴于这样的数据:

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

如何用 R 绘制 ROC 曲线,产生与附件类似的结果图片

我知道 ROCR 包,但它不需要这样的输入。

4

1 回答 1

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 线(此处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)

在此处输入图像描述

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

于 2012-02-16T11:05:12.770 回答