在R中:计算精度/回忆曲线下的面积(AUPR)?

时间:2014-07-29 16:51:14

标签: r

假设我有两个矩阵:A表示标签矩阵,B表示A的相应预测概率矩阵。现在我想根据矩阵A和B计算AUPR(精确度/恢复曲线下面积)。对于常见的AUC (ROC曲线下面积),R中有很多包,比如ROCR,pROC,可以直接计算出AUC值,但是目前R中的哪些包可以计算出AUPR?或者你能帮助计算方法计算AUPR吗? 以下是两个示例matrics:

> pp
        [,1]    [,2]     [,3]    [,4]    [,5]     [,6]    [,7]
[1,] 0.01792 0.00155 -0.00140 0.00522 0.01320  0.22506 0.00454
[2,] 0.05883 0.11256  0.82862 0.12406 0.08298 -0.00392 0.30724
[3,] 0.00743 0.06357  0.14500 0.00213 0.00545  0.03452 0.11189
[4,] 0.02571 0.01460  0.01108 0.00494 0.01246  0.11880 0.05504
[5,] 0.02407 0.00961  0.00720 0.00382 0.01039  0.10974 0.04512

> ll
        D00040 D00066 D00067 D00075 D00088 D00094 D00105
hsa190       0      0      0      0      0      1      0
hsa2099      0      1      1      0      0      0      1
hsa2100      0      0      0      0      0      0      1
hsa2101      0      0      0      0      0      0      0
hsa2103      0      0      0      0      0      0      0

pp是真实标签ll矩阵的预测概率矩阵,而ll只是标签矩阵。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我首先将预测分数和类转换为矩阵中的向量。

有一个" PRROC"提供类似的生成ROC和PRC作为" ROCR"的功能的包,它也给出了PRC的AUC。

具体来说,我使用了来自" ROCR"的数据ROCR.simple。以包为例。

library(PRROC)
library(ROCR)
data("ROCR.simple")
scores <- data.frame(ROCR.simple$predictions, ROCR.simple$labels)
pr <- pr.curve(scores.class0=scores[scores$ROCR.simple.labels=="1",]$ROCR.simple.predictions,
             scores.class1=scores[scores$ROCR.simple.labels=="0",]$ROCR.simple.predictions,
             curve=T)

请注意,在此功能中,&#34; scores.class0 &#34;需要是正面类的分数(这有点令人困惑,因为我个人认为0为负数,1为正数)。所以我改变了0和1的顺序。

这样,PR曲线和AUC都保存在pr变量中。

pr

Precision-recall curve

Area under curve (Integral):
 0.7815038 

Area under curve (Davis & Goadrich):
 0.7814246 

Curve for scores from  0.005422562  to  0.9910964 
( can be plotted with plot(x) )

然后,您可以使用plot(pr)或使用ggplot:

绘制PRC
y <- as.data.frame(pr$curve)
ggplot(y, aes(y$V1, y$V2))+geom_path()+ylim(0,1)

得到的曲线与ROCR包的曲线相同。

enter image description here enter image description here