kdymtの日記

個人的なメモです。誤りがあれば指摘して頂けるとありがたいです。

ROC曲線を描く

Rの練習を兼ねて「血中Cペプチド値で1年後のインスリン使用の有無を予測する」という時のROC曲線を描いてみる。
ROCRパッケージを使う。

install.packages("ROCR")
library(ROCR)

# インスリン治療導入が必要かどうかを判定する時の血中CペプチドのROC曲線を描く。
# インスリン導入必要(0)とインスリン導入不要(1)であった人100人ずつ集めてきたとする。
n1 <- n2 <- 100

# ここではガンマ分布でCペプチドの練習用データを作成する
# 血中Cペプチドの分布
sh <- c(2, 10)
ra <- c(4, 6)
for(i in 1:2){
  curve(dgamma(x, shape = sh[i], ra = ra[i]), from = 0, to = 10, col =i, add = T, ylab = "probability", main = "serum C-peptide")
}
legend("topright", legend=c("insulin", "oral"), col=1:2, lty=1)

# 1年後インスリン使用群、不使用群のCペプチド値のデータを作成
ins <- rgamma(n = n1, sh[1], ra[1])
ora <- rgamma(n = n2, sh[2], ra[2])

pred <- prediction(predictions = c(ins, ora), labels = c(rep(0, n1), rep(1, n2)))
perf <- performance(pred, "tpr", "fpr")
plot(perf)

# aucを計算する
auc. <- performance(pred,"auc")  # performance関数に引数"auc"を入れる
auc <- as.numeric(auc.@y.values) # auc.の中からy.valuesを取り出して数値データに
auc

f:id:kddtan:20180714175508p:plain
f:id:kddtan:20180714175532p:plain

参考)
RでのROC解析:ROCRパッケージを使ったROC曲線とAUCの求め方 | K-Lab
[https://mumu.jpn.ph/forest/computer/2017/03/29/8279/:title=[R]{ROCR}チュートリアル | Dr.Clover's Computer Clinic]


久しぶりにRを使った。徐々にできることを増やしていきたい。
今後
・今回ROCRを使ったが、pROCの方ができることが多そう
・異なる判別器のAUCの差の検定
・ロジスティック回帰などの多変量解析からのROC
・カットオフ値の設定方法