如何使用 ROCR 提取平均 ROC 曲线预测?
Posted
技术标签:
【中文标题】如何使用 ROCR 提取平均 ROC 曲线预测?【英文标题】:How to extract average ROC curve predictions using ROCR? 【发布时间】:2016-08-18 05:14:51 【问题描述】:R
中的 ROCR
库提供绘制平均 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)
可爱。不幸的是,似乎无法将平均 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 `<<`
一个可怕的 hack,但它可以正常工作,因为我可以毫无问题地绘制 perf.rocr.avg
。不幸的是,当使用 pROC
时,我无法比较我的平均 ROC 曲线,因为它需要一个 pROC
roc
对象。这很好,但问题是 pROC
roc
对象需要原始预测和参考数据来创建。据我所知,ROCR
正在平均 ROC 曲线本身而不是预测,所以我似乎无法从 ROCR
中得到我想要的。
有没有办法对ROCR
创建的平均 ROC 曲线的预测进行逆向工程?
【问题讨论】:
您是否查看过 predict 命令是否适用于 ROC? @Dave2e - 我有,但我没有取得太大进展。我在perf.avg.rocr <<- perf.avg
上方的最后一行之后分配了一个变量,这给了我一个 ROCR performance
对象,以及所需的平均 ROC 图。不幸的是,我现在意识到我不能使用roc.test
,因为它不是prediction
对象。欢迎任何其他建议...
你有没有看过这个答案:***.com/questions/11467855/… 或这个hopstat.wordpress.com/2014/12/19/… 我没有使用 ROCR 库,所以我无法提供更多建议
@Dave2e - 你一定很喜欢这个关于 SO 的问题已经被投票了 16 次并且完全是 RTFM,而我问的是一些程序化的东西,这让我老实说难住了,我被否决了。不管怎样,谢谢!我(现在)非常精通ROCR
的用法。只是它没有做我需要它做的事情。更糟糕的是,pROC
只接受一个roc
对象进行统计测试,它本身需要原始预测和参考数据。我会坚持到底。span>
@Prophet60091 你有没有找到解决办法?我希望能够为各个 ROC 曲线提取数据框,因此如果您能指导我,我将不胜感激。
【参考方案1】:
我遇到了和你一样的问题。在我看来,ROCR 包生成的平均 ROC 只是分配了数值,而其他统计属性(例如置信区间)则缺乏。这意味着平均 ROC 的统计数据可能没有意义,这就是为什么不能通过 PROc 包中的 (tpr, fpr) list 生成 roc 对象的原因。但是,我找到了一篇论文来解决这个问题,即平均 ROC 之间的比较。标题是“相关接收器操作特征曲线下的平均面积:基于广义双样本 Wilcoxon 统计的非参数方法”。我希望这会有所帮助。
【讨论】:
其实我实现了那篇论文中提出的方法,结果看起来是合理的。如果您的目标是在平均 ROC 之间进行统计检验,这是一个不错的选择。以上是关于如何使用 ROCR 提取平均 ROC 曲线预测?的主要内容,如果未能解决你的问题,请参考以下文章