既知のSN/PPV/カットオフ情報のみでRでROC曲線をプロットする方法

StackOverflow https://stackoverflow.com/questions/9308227

  •  25-10-2019
  •  | 
  •  

質問

そのようなデータが与えられます:

#Cutpoint         SN   (1-PPV)
5       0.56    0.01
7       0.78    0.19
9       0.91    0.58

添付のような同様の結果を生成するRでROC曲線をプロットするにはどうすればよいですか image?

Rocrパッケージは知っていますが、そのような入力は必要ありません。

役に立ちましたか?

解決

プロットを作成したい場合(ポイント間の愚かな補間スプラインなし)、標準的な方法で与えたデータをプロットし、(0,0)でポイントを準備し、(1,1)にポイントを追加して、曲線のエンドポイント。

## your data with different labels
dat <- data.frame(cutpoint = c(5, 7, 9),
                  TPR = c(0.56, 0.78, 0.91),
                  FPR = c(0.01, 0.19, 0.58))

## plot version 1    
op <- par(xaxs = "i", yaxs = "i")
plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)
par(op)

コードを説明するには: 最初 plot() コールは、プロットをまったく行うことなく、プロット領域をセットアップします。両方の軸の範囲(0,1)をカバーするようにプロットを強制することに注意してください。 par() コールは、データの範囲をカバーする軸をプロットするようにRを指示します。デフォルトは、各軸の範囲の4%を拡張します。

次の行、 with(dat, lines(....)) ROC曲線を描画すると、ここでは(0,0)と(1,1)にポイントを加えて追加して、完全な曲線を与えます。ここで使用します type = "o" 両方のポイントとラインをオーバープロットするために、ポイントは文字25で表され、ここで黒く色で満たされます。

次に、ポイントにラベルを追加します text(....); pos 引数は、実際のプロット座標からラベルを離すために使用されます。私はからラベルを取ります cutpoint データフレーム内のオブジェクト。

abline() コールは1:1行を描画します(ここで 0, 、 と 1 の傍受を意味します 0 の斜面 1 それぞれ。

最終行は、保存したデフォルトにプロットパラメーターをリセットします op プロットする前(最初の行)。

結果のプロットは次のようになります:

enter image description here

それは正確なファクシミリではなく、私は軸範囲のデフォルトを使用したプロットを好む(4%を追加):

plot(TPR ~ FPR, data = dat, xlim = c(0,1), ylim = c(0,1), type = "n")
with(dat, lines(c(0, FPR, 1), c(0, TPR, 1), type = "o", pch = 25, bg = "black"))
text(TPR ~ FPR, data = dat, pos = 3, labels = dat$cutpoint)
abline(0, 1)

enter image description here

繰り返しますが、真のファクシミリではなく、近い。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top