如何使用ROCR提取平均ROC曲线预测?

时间:2016-04-24 23:14:08

标签: r roc

ROCR中的R库提供了绘制平均ROC曲线的能力(从ROCR reference manual开始):

library(ROCR)
library(ROCR)
data(ROCR.xval)
# plot ROC curves for several cross-validation runs (dotted
# in grey), overlaid by the vertical average curve and boxplots
# showing the vertical spread around the average.
data(ROCR.xval)
pred <- prediction(ROCR.xval$predictions, ROCR.xval$labels)
perf <- performance(pred,"tpr","fpr")
plot(perf,col="grey82",lty=3)
plot(perf,lwd=3,avg="vertical",spread.estimate="boxplot",add=TRUE)

Averaged ROC plot with boxplot

可爱。不幸的是,似乎没有能力将平均ROC曲线本身作为对象/数据帧等获得。用于进一步的统计测试(例如,使用pROC)。我确实做过一些研究(尽管可能是事后),我发现了这篇文章:

Global variables in R

我查看了ROCR的代码,显示了以下几行,用于将结果传递给绘图:

performance_plots.R,(从第451行开始)

## compute average curve
 perf.avg <- perf.sampled
 perf.avg@x.values <- list( rowMeans( data.frame( perf.avg@x.values)))
 perf.avg@y.values <- list(rowMeans( data.frame( perf.avg@y.values)))
 perf.avg@alpha.values <- list( alpha.values )

所以,使用我在这里查找的trace函数(General suggestions for debugging in R):

trace(.performance.plot.horizontal.avg, edit=TRUE)

我在上面列出的行后面的performance_plots.R添加了以下行:

perf.rocr.avg <<- perf.avg # note the double `<<`

一个可怕的黑客,但它可以正常,因为我可以毫无问题地绘制perf.rocr.avg。不幸的是,在使用pROC时,我无法比较我的平均ROC曲线,因为它需要pROC roc个对象。这很好,但问题是pROC roc对象需要创建原始预测和参考数据。据我所知,ROCR是对ROC曲线本身进行平均而不是预测,所以我似乎无法从ROCR得到我想要的东西。

有没有办法根据ROCR创建的平均ROC曲线对预测进行逆向工程?

1 个答案:

答案 0 :(得分:0)

我遇到了与您相同的问题。在我看来,ROCR软件包生成的平均ROC只是分配了数值,而缺少其他统计属性(例如置信区间)。这意味着使用平均ROC进行统计可能没有意义,这就是为什么roc对象无法通过PRoc包中的(tpr,fpr)列表生成的原因。但是,我找到了一篇论文来解决这个问题,即平均ROC之间的比较。标题为“相关接收机工作特性曲线下的平均面积:基于广义两样本Wilcoxon统计的非参数方法”。希望对您有所帮助。