给定这样的数据:

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

我如何用r绘制ROC曲线的R,产生相似的结果,例如附件 image?

我知道ROCR软件包,但不需要这种输入。

有帮助吗?

解决方案

如果您只想创建图(没有点之间的愚蠢的插值样条),则只需以标准方式绘制您给出的数据,准备点(0,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

再次,不是真正的传真,而是关闭。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top