統計ソフトRでROC曲線分析はどうやるか?

にほんブログ村 科学ブログ 数学へ

ROC曲線分析は、 病気の診断のための検査を 分析するために使われる。

真実の分類と、 真実の分類を見分ける検査結果を使って、 どのレベルより上だと病気とするか? 決める分析だ。

胃がんや大腸がんを見つけるには、 内視鏡をしないと見つけられないが、 簡単な血液検査で見つけたいとする。

血液検査の値がいくつのときに、 がんとがんではないかを一番クリアに 分けることができるか?

こういう問題に答えられる。

統計ソフトRでROC曲線を描いてみる

サンプルデータはこちらからダウンロードできる。

Windowsであれば、 Cドライブ直下にdataというフォルダを作りそこに保存する。

Epiというライブラリをインストールする。 一度インストールすれば、OK。

install.packages("Epi")

Epiというライブラリを呼び出す。 こちらは解析時毎回。

データをdatという名前で読み込む。 datの構造を確認する。

library(Epi)
dat <- read.table("C:/data/ROC-sample-dat.txt")
str(dat)
> str(dat)
'data.frame':   484 obs. of  2 variables:
 $ KTSND: int  15 13 16 4 18 29 15 15 11 6 ...
 $ SMK  : int  1 1 1 1 1 1 1 1 1 0 ...

KTSNDが検査の点数で、 SMKが真の分類。

plot="ROC"でROC曲線分析を指定。

ROC(test=dat$KTSND, stat=dat$SMK, plot="ROC")

KTSNDが11点のときが、 一番うまくわけている分岐点であると、 示している。

感度71.8% 特異度74.5% 陽性反応的中率27.3% 陰性反応的中率26.4%

AUCは0.798で、 この検査自体性能がいい証拠だ。

AUCがなるべく1に近いほうがいい。

正方形の面積が1だ。

右下をかなめとみて、 扇形がAUCで今回は約0.8だ。

違ったグラフも描ける。

感度、特異度、的中率を表示したグラフ。

plot="sp"は感度、特異度、的中率を表示する指定。

ROC(test=dat$KTSND, stat=dat$SMK, plot="sp")

Sensitivity(感度)とSpecificity(特異度)が交わるところが11点だ。

陽性反応的中率は最大でも49.8%までしか到達しないことがわかる。

 

参考リンク:

Epi: A package for statistical analysis in epidemiology

 

参考書籍: