【发布时间】: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)。我确实做了一些研究(尽管可能是事后),我发现了这篇文章:
我查看了 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上方的最后一行之后分配了一个变量,这给了我一个 ROCRperformance对象,以及所需的平均 ROC 图。不幸的是,我现在意识到我不能使用roc.test,因为它不是prediction对象。欢迎任何其他建议... -
你有没有看过这个答案:stackoverflow.com/questions/11467855/… 或这个hopstat.wordpress.com/2014/12/19/… 我没有使用 ROCR 库,所以我无法提供更多建议
-
@Dave2e - 你一定很喜欢这个关于 SO 的问题已经被投票了 16 次并且完全是 RTFM,而我问的是一些程序化的东西,这让我老实说难住了,我被否决了。不管怎样,谢谢!我(现在)非常精通
ROCR的用法。只是它没有做我需要它做的事情。更糟糕的是,pROC只接受一个roc对象进行统计测试,它本身需要原始预测和参考数据。我会坚持到底。span> -
@Prophet60091 你有没有找到解决办法?我希望能够为各个 ROC 曲线提取数据框,因此如果您能指导我,我将不胜感激。