用ROCR和pROC绘制R中的ROC

Pas*_*cal 20 r roc

我正在绘制ROC并测量部分AUC作为生态位模型质量的度量.当我在R工作时,我正在使用ROCR和pROC包.我会选择一个使用,但就目前而言,我只是想看看它们是如何表现的,以及是否能更好地满足我的需求.

令我困惑的一件事是,在绘制ROC时,轴如下:

ROCR

x axis: 'true positive rate' 0 -> 1
y axis: 'false positive rate', 0 -> 1
Run Code Online (Sandbox Code Playgroud)

PROC

x axis: 'sensitivity' 0 -> 1
y axis: 'specificity' 1 -> 0. 
Run Code Online (Sandbox Code Playgroud)

但如果我使用两种方法绘制ROC,它们看起来完全相同.所以我只想确认一下:

true positive rate = sensitivity

false positive rate = 1 - specificity.
Run Code Online (Sandbox Code Playgroud)

这是一个可重复的例子:

obs<-rep(0:1, each=50)
pred<-c(runif(50,min=0,max=0.8),runif(50,min=0.3,max=0.6))
plot(roc(obs,pred))

ROCRpred<-prediction(pred,obs)
plot(performance(ROCRpred,'tpr','fpr'))
Run Code Online (Sandbox Code Playgroud)

Jim*_* M. 13

为了证实,你是对的,真正的阳性率=敏感性和假阳性率= 1 - 特异性.在您的示例中,从ROCR包中绘制ROCR性能对象的组件的顺序是关键.在最后一行中,第一个性能指标,真阳性率,'tpr'绘制在y轴上measure = 'tpr',第二个性能指标,假阳性率,绘制在x轴上x.measure = 'fpr'

plot(performance(ROCRpred, measure = 'tpr', x.measure = 'fpr'))
Run Code Online (Sandbox Code Playgroud)


小智 11

只是说,pROC如果您在绘图代码中包含以下内容,则对于包:

plot(roc(obs,pred), legacy.axes = TRUE)
Run Code Online (Sandbox Code Playgroud)

然后你最终得到一个反转的x轴.


小智 5

我所知道的:

TPR = sensitivity = TP/(TP/FN) -> y axis: [0, 1]

FPR = 1 - specificity = 1 - (TN/(FP+TN)) -> x axis: [0, 1]
Run Code Online (Sandbox Code Playgroud)

但是,当图表显示x轴的特异性(真实负率)时,范围是[1,0].

在这两种情况下,图表都是相同的.

您可以检查它在这里 的维基百科页面.