web-dev-qa-db-ja.com

ROCRとpROCを使用してRでROCをプロットする

私はROCをプロットし、生態学的ニッチモデルの品質の指標として部分的なAUCを測定しています。 Rで作業しているので、ROCRとpROCパッケージを使用しています。どちらを使用するかを決めますが、今のところは、それらがどのように機能するか、そして1つが私のニーズをよりよく満たすかどうかを確認したかっただけです。

私を混乱させる1つのことは、ROCをプロットするとき、軸は次のとおりであるということです。

[〜#〜] rocr [〜#〜]

x axis: 'true positive rate' 0 -> 1
y axis: 'false positive rate', 0 -> 1

pROC

x axis: 'sensitivity' 0 -> 1
y axis: 'specificity' 1 -> 0. 

しかし、両方の方法を使用してROCをプロットすると、同じように見えます。だから私はそれを確認したいだけです:

true positive rate = sensitivity

false positive rate = 1 - specificity.

再現可能な例を次に示します。

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'))
20
Pascal

確認するために、あなたはその真陽性率=感度と偽陽性率= 1-特異度で正しいです。この例では、ROCRパッケージからROCRパフォーマンスオブジェクトのコンポーネントをプロットする順序が重要です。最後の行では、最初のパフォーマンス測定値である真陽性率 'tpr'がy軸にプロットされていますmeasure = 'tpr'そして2番目のパフォーマンス測定値である偽陽性率がx軸にプロットされますx.measure = 'fpr'

plot(performance(ROCRpred, measure = 'tpr', x.measure = 'fpr'))
13
Jim M.

言うまでもなく、プロットコードに以下を含めると、pROCパッケージの場合:

plot(roc(obs,pred), legacy.axes = TRUE)

次に、x軸が逆になります。

11
PharmR

私の知る限りでは:

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

FPR = 1 - specificity = 1 - (TN/(FP+TN)) -> x axis: [0, 1]

ただし、グラフがx軸に特異度(真の負の率)を示している場合、範囲は[1、0]です。

どちらの場合も、グラフは同じです。

あなたはそれをチェックすることができます ここ ウィキペディアのページで。

5
angelous