앞서 본 ROC/AUC 분석에서 또 다른 중요한 기능은 최적의 cut off point를 찾는 것입니다. 예를 들어 비만이 당뇨의 위험 요인이라는 점은 잘 알려져 있지만, 그럼 어느 정도부터 위험한지 판별할 수 있는 최적의 기준점을 찾는 경우입니다. ROC 커브에서 cut off piont를 찾는 방법 중 가장 흔한 것이 Youden Index (Youden's J statistic) 입니다. 기본적으로 민감도 + 특이도 - 1이라는 매우 단순한 계산식을 통해 특이도와 민감도의 합이 최대가 되는 점을 구하는 것입니다. cut off point에 대한 설명은 아래 영상이 참조가 될 것 같습니다.
여기서는 pima 인디언에서 당뇨를 예측할 수 있는 최적의 BMI 값을 구해보겠습니다.
library(pROC)
library(mlbench)
data(PimaIndiansDiabetes)
pima <- pimaindiansdiabetes="" span="">->
pima<-subset pima="" pressure="">0)-subset>
pima<-subset mass="" pima="">0)-subset>
pima<-subset glucose="" pima="">0)-subset>
plot.roc(pima$diabetes, pima$mass ,print.auc=FALSE,
ci=FALSE, col="black",lty=2,
print.thres=TRUE)
plot.roc에는 여러 가지 기능이 있는데 그 가운데 하나가 cut off point (threshold)를 출력하는 기능입니다. print.thres=TRUE 로 지정해주면 됩니다.
ROC 커브에 표시되는 숫자의 의미는 Youden Index 법에 의한 최적의 cut off point (optimal cutoff point)와 특이도 (specificity), 민감도 (sensitivity) 입니다. 30.25를 기준으로 당뇨 위험도가 높다고 판단하는 것이 가장 유리하다는 것이죠. 하지만 이 경우 민감도는 높아도 특이도는 다소 낮은 문제가 있습니다. 기계적으로 optimal cut off point를 찾는 것은 여러 가지 문제가 있을 수 있어 신중을 기해야 합니다. 통상 논문에서 리뷰어가 따로 요구하지 않는 이상 먼저 제시하는 경우는 새로운 검사법에 대한 검증 같은 제한된 경우에서 일 것입니다.
plot.roc에는 좀 더 컬러풀한 값을 표시하거나 동시에 여러 개의 값을 표기하는 기능이 있습니다. 아래 예에서 참조할 수 있습니다.
plot.roc(mass, # roc를 계산한 value를 입력합니다.
col="red", # 선의 색상을 설정합니다.
print.auc=TRUE, # auc 값을 출력하도록 설정합니다.
max.auc.polygon=TRUE, # auc의 최대 면적을 출력하도록 설정합니다.
print.thres=TRUE, print.thres.pch=19, print.thres.col = "red", # 기준치(cut-off value)에 대한 출력, 포인트, 색상을 설정합니다.
auc.polygon=TRUE, auc.polygon.col="#D1F2EB") # 선 아래 면적에 대한 출력, 색상을 설정합니다.
물론 논문에 발표할 때는 꼭 필요하지 않은 컬러 이미지는 추가 게재료로 이어질 뿐이므로 그냥 가독성 좋은 흑백 이미지가 더 좋은 경우가 많습니다. 판단은 각자의 몫일 것이고 여기서는 옵션에 대해서만 추가 설명드립니다.
댓글
댓글 쓰기