RのROC曲線を使用して最適なカットオフポイントとその信頼区間を決定する方法は?


51

正常細胞と腫瘍細胞を区別するために使用できるテストのデータがあります。ROC曲線によると、この目的には適しています(曲線下面積は0.9):

ROC曲線

私の質問は:

  1. このテストのカットオフポイントと、読み取り値があいまいであると判断される信頼区間を決定する方法
  2. これを視覚化する最良の方法は何ですか(を使用ggplot2)?

グラフはROCRggplot2パッケージを使用してレンダリングされます:

#install.packages("ggplot2","ROCR","verification") #if not installed yet
library("ggplot2")
library("ROCR")
library("verification")
d <-read.csv2("data.csv", sep=";")
pred <- with(d,prediction(x,test))
perf <- performance(pred,"tpr", "fpr")
auc <-performance(pred, measure = "auc")@y.values[[1]]
rd <- data.frame(x=perf@x.values[[1]],y=perf@y.values[[1]])
p <- ggplot(rd,aes(x=x,y=y)) + geom_path(size=1)
p <- p + geom_segment(aes(x=0,y=0,xend=1,yend=1),colour="black",linetype= 2)
p <- p + geom_text(aes(x=1, y= 0, hjust=1, vjust=0, label=paste(sep = "", "AUC = ",round(auc,3) )),colour="black",size=4)
p <- p + scale_x_continuous(name= "False positive rate")
p <- p + scale_y_continuous(name= "True positive rate")
p <- p + opts(
            axis.text.x = theme_text(size = 10),
            axis.text.y = theme_text(size = 10),
            axis.title.x = theme_text(size = 12,face = "italic"),
            axis.title.y = theme_text(size = 12,face = "italic",angle=90),
            legend.position = "none",
            legend.title = theme_blank(),
            panel.background = theme_blank(),
            panel.grid.minor = theme_blank(), 
            panel.grid.major = theme_line(colour='grey'),
            plot.background = theme_blank()
            )
p

data.csvには次のデータが含まれます。

x;group;order;test
56;Tumor;1;1
55;Tumor;1;1
52;Tumor;1;1
60;Tumor;1;1
54;Tumor;1;1
43;Tumor;1;1
52;Tumor;1;1
57;Tumor;1;1
50;Tumor;1;1
34;Tumor;1;1
24;Normal;2;0
34;Normal;2;0
22;Normal;2;0
32;Normal;2;0
25;Normal;2;0
23;Normal;2;0
23;Normal;2;0
19;Normal;2;0
56;Normal;2;0
44;Normal;2;0

回答:


30

この質問に答えたすべての人に感謝します。特定の診断テストの背後にある目的に大きく依存する正しい答えや基準は存在しないことに同意します。

最後に、この種の分析でカットオフポイントを見つけることに特化したRパッケージOptimalCutpointsを見つけました。実際には、カットオフポイントを決定する方法がいくつかあります。

  • 「CB」(費用便益法)。
  • 「MCT」(誤分類コスト期間を最小化);
  • "MinValueSp"(特異性に設定された最小値);
  • "MinValueSe"(感度に設定された最小値);
  • "RangeSp"(特異性に設定された値の範囲);
  • "RangeSe"(感度に設定された値の範囲);
  • "ValueSp"(特異性に設定された値);
  • "ValueSe"(感度に設定された値);
  • "MinValueSpSe"(特異性と感度の最小値セット);
  • "MaxSp"(特異性を最大化);
  • 「MaxSe」(感度を最大化)。
  • "MaxSpSe"(感度と特異度を同時に最大化);
  • "Max-SumSpSe"(感度と特異度の合計を最大化します);
  • "MaxProdSpSe"(感度と特異度の積を最大化します);
  • "ROC01"(ROCプロットとポイント(0,1)間の距離を最小化します);
  • "SpEqualSe"(感度=特異性);
  • 「Youden」(Youdenインデックス);
  • 「MaxEfficiency」(効率または精度を最大化)。
  • 「ミニマックス」(最も頻繁なエラーを最小限に抑えます)。
  • 「AUC」(AUCの機能である一致を最大化します)。
  • 「MaxDOR」(診断オッズ比を最大化)。
  • "MaxKappa"(Kappaインデックスを最大化します);
  • "MaxAccuracyArea"(精度領域を最大化);
  • "MinErrorRate"(エラー率を最小化);
  • 「MinValueNPV」(負の予測値に設定された最小値)。
  • "MinValuePPV"(正の予測値に設定された最小値);
  • 「MinValueNPVPPV」(予測値に設定された最小値)。
  • "PROC01"(PROCプロットとポイント(0,1)間の距離を最小化します);
  • "NPVEqualPPV"(負の予測値=正の予測値);
  • "ValueDLR.Negative"(負の診断尤度比に設定された値);
  • "ValueDLR.Positive"(正の診断尤度比に設定された値);
  • 「MinPvalue」(マーカーとカットポイントを使用して得られたバイナリ結果との関連性を測定する統計的カイ2乗検定に関連するp値を最小化します)。
  • 「ObservedPrev」(観察された有病率に最も近い値)。
  • "MeanPrev"(診断テスト値の平均に最も近い値);
  • 「PrevalenceMatching」(予測される有病率が実際に観察される有病率と等しい値)。

したがって、タスクは各状況に最適な方法を選択するように絞り込まれています。

パッケージドキュメントには、信頼区間を決定するいくつかの方法や各方法の詳細な説明など、他の多くの構成オプションが記載されています。


18
メソッドの数が多いことは、カットオフの意性の表れです。また、入力変数にカットオフを使用することは完全に不適切であり、全体の予測値にカットオフを求める必要がある場合にのみ適切であるため、これに多くの労力が費やされる理由は明らかではありません。損失関数を使用してベイズ最適決定ルールを設定すると、すべてが処理されます。ROC曲線、感度や特異性などの逆方向の確率、入力変数のカットオフはありません。
フランクハレル

@FrankHarrellこれについて詳しく説明してもらえますか?「損失関数を使用してベイズ最適決定ルールを設定すると、すべてが処理されます。」これに関する文献はどこで入手できますか?
ブラックミルク14

1
ベイズの最適な決定と適切なスコアリングルールに関する文献を参照してください。
フランクハレル

26

私の意見では、複数のカットオフオプションがあります。感度と特異度に異なる重み付けをする場合があります(たとえば、特定のテストが低いことを意味する場合でも、高感度のテストを行うことが重要な場合があります。逆の場合も同様です)。

感度と特異度の重要性が同じ場合、カットオフを計算する1つの方法は、ROC曲線とグラフの左上隅の間のユークリッド距離を最小化する値を選択することです。

別の方法は、カットオフとして最大化する値(感度+特異度-1)を使用することです。

残念ながら、教授や他の統計学者からこれらの2つの方法を学んだので、これらの2つの方法については言及していません。私は後者の方法を「Youden's index」と呼んでいるだけです[1])。

[1] https://en.wikipedia.org/wiki/Youden%27s_J_statistic


15

カットオフを見つける誘惑に抵抗します。事前に指定されたユーティリティ/損失/コスト関数がない限り、最適な意思決定に直面してカットオフが発生します。また、ROC曲線はこの問題とは無関係です。


7

数学的に言えば、カットオフを解決するには別の条件が必要です。

@Andreaのポイントは、「根本的な問題に関する外部の知識を使用する」に翻訳できます。

条件の例:

  • このアプリケーションでは、感度> = x、および/または特異性> = yが必要です。

  • 偽陰性は偽陽性と同じ10倍悪いです。(これにより、理想的なコーナーに最も近いポイントを変更できます。)


1
最適な決定を下すには外部の知識が必要であることはまさに正しい。しかし、損失関数は上記の量に関しては述べられておらず、最適な決定は、損失関数と組み合わされた個々の被験者の結果の予測確率に基づいています。
フランクハレル

6

精度とカットオフを視覚化します。詳細については、ROCRのドキュメントをご覧ください。また、非常に優れたプレゼンテーションもご覧いただけます。

ここに画像の説明を入力してください


1
ソースコードをよく見ると、このパッケージを使用し、このパッケージのドキュメントを読んでいた。適切なカットオフポイントと「グレーゾーン」を決定するツールがありません
ユーリーペトロフスキー

1
私は間違いなくあなたのコードを読みましたが、「正しいカットオフ」という用語はありませんが、プロット精度対カットオフは正しい洞察を与えてくれます。そして、このプロットを使用すると、最高の精度を得るためにカットオフを見つける方法を見つけることができます。
ウラジミールチュパキン

2

さらに重要なこと-この曲線の背後にはデータポイントがほとんどありません。感度と特異性のトレードオフをどのように行うかを決定する際には、カーブと結果のカットオフ数をブートストラップすることを強くお勧めします。推定される最適なカットオフには多くの不確実性があることに気付くかもしれません。


1
実験はまだ進行中であるため、より多くのデータポイントを取得します。方法論に興味があります(データポイントの数に関係なく同じです)。そして、「グレーゾーン」を決定する統計的方法を見つけられませんでしたが、そのようなタイプのテストで広く使用されています。
ユーリーペトロフスキー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.