医療統計コラム

File 2. ROC曲線は、こんなふうに描かれます

医学論文や学会のポスター発表で、ROC曲線とカットオフ値を記載しているものをよく見かけるかと思います。
実際ROC曲線は、診断法がどれぐらい有用なのかを知るときに使われ、曲線下の面積(AUC)によって定量化されます。

さらに、この値以上は”陽性”だと診断する閾値をどのように設定するかによって感度と特異度は変化していくので、陽性と陰性を分ける最適なカットオフ値を見つけることが重要になってきます。
そこで今回は、JMPでそもそもROC曲線はどのような方法で描かれているか、カットオフ値はどのように求めているのかについて解説します。

JMPでは、ロジスティック回帰、パーティション、判別分析などのプラットフォームでROC曲線を描くことができますが、以下は、[二変量の関係]でロジスティック回帰を行ったときに、オプションとして追加できるROC曲線についての説明です。

図1のデータテーブルは、糖尿病陽性の患者(=1)と糖尿病陰性の患者(=0)のヘモグロビンA1c (以下HbA1c) を測定し、HbA1cを疾患の診断としたときの、糖尿病の陽性と陰性を分けるカットオフ値を求めたいとします。

JMPでは、ROC曲線の下に出力されるROCテーブルを参照すると、カットオフ値を確認できます。

今回の例のように、診断の値(HbA1c)が1つの場合、ROC曲線は次の操作で描くことができます。

ROC曲線の描画

  1. [分析]→[二変量の関係]を選択し、[Y,目的変数]に「糖尿病」(名義尺度)、[X, 説明変数]に「HbA1c」(連続尺度)を指定し、[OK] をクリックします。
  2. レポート左上の赤い三角ボタン()から [ROC曲線]を選択します。
  3. 陽性の水準として「1」を選択し、[OK]をクリックします。

この操作で、図2のROC曲線を描くことができます。
ROC曲線は縦軸に感度、横軸に(1-特異度)をプロットし、折れ線で結んだものです。

左下に表示されているAUCはArea Under Curve の略であり、曲面下の面積を示します。
良い診断であれば、AUCの値は大きくなります。

ROC曲線の下にあるレポート「ROCテーブル」には、ROC曲線を描くための情報が記載されています(図3)。

このテーブルでは「感度 – (1 – 特異度)」 を計算し、この値が最も大きい行にアスタリスクがついています。この行のXの値がカットオフ値になります。

この例では、「感度 – (1 – 特異度)」の最も大きな値は 0.625です。このときのXの値は7.6となるので、7.6が糖尿病陽性と陰性を分ける最適なカットオフ値ということになります。

注意:
カットオフ値の決め方は他にも提唱されていますが、JMPでは上記のように「感度 – (1 – 特異度)」を最大にする方法を採用しており、この方法はYouden Indexと呼ばれています。

ROC曲線はロジスティック回帰の予測確率が関係してくる

ROC曲線はどのような原理で描かれるのでしょうか?
これはロジスティック回帰の予測能力と関連してきます。

ロジスティック回帰により推定された式で、各患者の陽性となる予測確率を計算できますが、

「陽性」と予測する確率が高い患者が本当に陽性であれば、予測能力が高い!

といった、何となく当たり前のことをROC曲線にて表すことになります。

二変量の関係でロジスティックモデルをあてはめましたので、あてはめに関するレポートを見てみましょう。

レポート「パラメータ推定値」(図4)には、推定したパラメータ推定値が表示されます。

 

これより、糖尿病陽性(Y=1)の確率をpとしたとき、ロジスティック回帰によるモデル式は、次のように記述できます。

個々の患者のHbA1cの値がわかれば、この式を変形することにより、糖尿病陽性となる予測確率(p)が計算できます。

JMPでは、ロジスティックのあてはめのレポート左上にある赤い三角ボタン()から[確率の計算式の保存]を選択すると、データテーブルにこの予測確率を保存できます(図5)。

データテーブルにいくつかの列が作成されますが、ここでは糖尿病陽性である予測確率を示す「確率[1]」を参照します。
たとえば1行目の HbA1cの値は 10.2ですが、これを上述のロジスティック回帰の式にあてはめてpの値を計算すると、およそ0.949となります。

列「確率[1」」を値の大きい順、つまり糖尿病陽性と予測する確率が高い順に並べ替えてみます。

JMPでは列「確率[1]」を選択し、右クリックメニューから[並べ替え]→[降順]を選択します。

図6は、並べ替えたデータテーブルです。
確率が一番高いのは1行目の0.969、確率が一番低いのは16行目の0.081です。

では、図6のテーブルを1行目から順に参照し、ROC曲線を描いてみます。

スタート地点の座標は、原点である(0,0) です。

データテーブルの1行目にある列「糖尿病」の値は1です。

1行目の患者を糖尿病陽性と予測した確率は0.969と高く、実際の「糖尿病」の値は1となっているので糖尿病陽性です。
つまり、先に記載した「陽性」と予測する確率が高い患者が本当に陽性であれば、予測能力が高い!に該当することになります。

列「糖尿病」の値が1(陽性)であれば、上に1つ移動させます。
最初は原点なので、原点から上方向に1つ移動させます。

2行目から4行目の「糖尿病」の値も1です。そのため、さらに上に3つ移動させます。

これより1行目から4行目までで、上へ4つ移動したことになります。図7は、ここまでの軌跡です。

5行目の「糖尿病」の値は0(陰性)です。このときは、右へ1つ移動させます。

6、7行目の「糖尿病」の値は1(陽性)です。そのため、上へ2つ移動させます。

8行目の「糖尿病」の値は0(陰性)です。 そのため、右へ1つ移動させます。

図8は、ここまでの軌跡です。

9行目と10行目をみると、どちらの行も糖尿病陽性の確率は0.305と等しくなっています。
しかし9行目の糖尿病の値は1であり、10行目の糖尿病の値は0です。
これより1つ上に移動し、1つ右に移動しますので、合わせると右上に移動することになります。

図9は、ここまでの軌跡です。


その後の行についても同様に考え、点を移動させていくと、最終的に図10のROC曲線が描かれます。

「陽性」と予測する確率が高い患者が本当に陽性である、「陰性」と予測する確率が高い患者が本当に陰性である状況では、点は原点から真上の(0,1)に向かって進み、その後、右方向の(1,1)に向かって進むことになります。
このときのAUCの値は1となります。

感度、特異度の計算とカットオフ値

今度はカットオフ値を理解するために、次の図11を見てみましょう。この図は[グラフビルダー]で描いています。

このグラフは、糖尿病陽性(=1)、糖尿病陰性(=0)ごとに、HbA1cの値をY軸にプロットしたものです(点はランダムにずらしてプロット)。
グラフ上にあるオレンジ色の点線は、陽性か陰性かを判断する境界値であり、ここでは、先ほどJMPで求めたカットオフ値である7.6に引いています。

つまり、HbA1cが7.6以上であれば糖尿病陽性、7.6未満であれば糖尿病陰性と判断します。

すると、診断結果と実際の値とで、次の分割表集計を実行できます。

  • 青色の点:HbA1cが7.6以上で糖尿病陽性の患者(真陽性)
  • 赤色の点:HbA1cが7.6未満で糖尿病陽性の患者(偽陰性)

 

  • 緑色の点:HbA1cが7.6以上で糖尿病陰性の患者(偽陽性) 
  • 紫色の点:HbA1cが7.6未満で糖尿病陰性の患者(真陰性)

なので、次のような集計表が作成できます。

 診断結果
糖尿病陽性(1)糖尿病陰性(0)
実際の値糖尿病陽性(1)62
糖尿病陰性(0)17

 

「感度 – (1 – 特異度)」 を計算するということは、真陽性率(陽性を正しく予測する確率)から偽陽性率(陰性を誤って陽性と予測する確率)を引き算することになり、この値が最大になるところが最適なカットオフ値としています。

この表から、ROC曲線の縦軸である感度、横軸である(1-特異度)を次のように計算します。

感度 = 真陽性  / (真陽性 + 偽陰性) = 6 / (6 + 2) = 0.75

1 - 特異度 = 1 - 真陰性 / (偽陽性 + 真陰性) = 1 - 7 / (1 + 7) = 0.125

これより、感度 – (1 – 特異度)= 0.75 – 0.125 = 0.625 と計算できます。

 

ROC曲線を描いてみませんか?

本コラムに記載のROC曲線を描けるデータをこちらからダウンロードいただけます。
30日間JMPを試用できる「JMPトライアル版」と合わせて、ぜひお試しください。

JMPを使ってみよう

全機能を30日間無料で試用可能!

今すぐダウンロード

      ROC曲線を描いてみませんか?

上記「JMPトライアル版」とこちらのサンプルデータを使うと、本コラム記載のROC曲線を描けます!

お問い合わせ