そのようなデータが与えられた場合:
#Cutpoint SN (1-PPV)
5 0.56 0.01
7 0.78 0.19
9 0.91 0.58
添付のような同様の結果を生成するRを使用してROC曲線をプロットするにはどうすればよいですか?
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
(最初の行)。
結果のプロットは次のようになります。
これは正確なファクシミリではなく、軸範囲のデフォルトを使用したプロット(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)
繰り返しますが、真のファクシミリではありませんが、近いです。