假设我有两个矩阵: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
只是标签矩阵。
提前致谢。
答案 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:
y <- as.data.frame(pr$curve)
ggplot(y, aes(y$V1, y$V2))+geom_path()+ylim(0,1)
得到的曲线与ROCR包的曲线相同。