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"(효율 또는 정확도 최대화);
  • "Minimax"(가장 빈번한 오류를 최소화 함);
  • "AUC"(AUC의 기능인 일치 성을 최대화);
  • "MaxDOR"(진단 확률 비율을 최대화);
  • "MaxKappa"(카파 지수를 최대화);
  • "MaxAccuracyArea"(정확도 영역을 최대화 함);
  • "MinErrorRate"(오류율 최소화);
  • "MinValueNPV"(부정 예측값에 대해 설정된 최소값);
  • "MinValuePPV"(양의 예측 값에 설정된 최소값);
  • "MinValueNPVPPV"(예측 값에 설정된 최소값);
  • "PROC01"(PROC 플롯과 포인트 (0,1) 사이의 거리를 최소화);
  • "NPVEqualPPV"(음의 예측값 = 양의 예측값);
  • "ValueDLR.Negative"(음 진단 가능성 비율에 대해 설정된 값);
  • "ValueDLR.Positive"(양의 진단 가능성 비율에 대해 설정된 값);
  • "MinPvalue"(마커와 컷 포인트를 사용하여 얻은 이진 결과 간의 연관성을 측정하는 통계적 카이 제곱 테스트와 관련된 p- 값을 최소화 함);
  • "ObservedPrev"(유병 유병률에 가장 가까운 값);
  • "MeanPrev"(진단 테스트 값의 평균에 가장 가까운 값);
  • "유병률 일치"(예측 유병률이 관찰 된 유병률과 실질적으로 동일한 값).

이제 각 상황에 가장 적합한 방법을 선택하는 작업이 줄어 들었습니다.

신뢰 구간을 결정하는 몇 가지 방법과 각 방법에 대한 자세한 설명을 포함하여 패키지 설명서에 설명 된 다른 많은 구성 옵션 이 있습니다.


18
수많은 방법은 컷오프의 임의성에 대한 표시입니다. 그리고 입력 변수에 컷오프를 사용하는 것은 전적으로 부적절하고 전체 예측 값에서 컷오프를 찾는 데만 적합하기 때문에 왜 그렇게 많은 노력을 기울 였는지 명확하지 않습니다. 손실 기능이있는 Bayes 최적 결정 규칙을 설정하면 모든 것이 처리됩니다. ROC 곡선, 감도 및 특이성과 같은 후진 확률, 입력 변수에 대한 컷오프 없음.
Frank Harrell

@FrankHarrell 이것에 대해 자세히 설명해 주시겠습니까? "손실 기능이있는 Bayes 최적 결정 규칙을 설정하면 모든 것이 처리됩니다." 이것에 대한 더 많은 문헌을 어디서 찾을 수 있습니까?
블랙 밀크

1
Bayes 최적의 결정과 적절한 채점 규칙에 관한 문헌을보십시오.
Frank Harrell

26

제 생각에는 여러 가지 차단 옵션이 있습니다. 민감도와 특이도의 가중치를 다르게 지정할 수 있습니다 (예를 들어, 특정 검사가 낮거나 그 반대 임에도 불구하고 고감도 검사를하는 것이 더 중요합니다).

민감도와 특이도가 동일한 중요성을 갖는 경우 컷오프를 계산하는 한 가지 방법은 ROC 곡선과 그래프의 왼쪽 상단 모서리 사이의 유클리드 거리를 최소화하는 값을 선택하는 것입니다.

다른 방법은 최대 값 (감도 + 특이도-1)을 컷오프로 사용하는 것입니다.

불행히도 교수 나 다른 통계 학자로부터이 두 가지 방법을 배웠기 때문에이 두 가지 방법에 대한 언급은 없습니다. 나는 후자의 방법을 'Youden 's index'[1])라고 언급 한 것을 들었다.

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


15

컷오프를 찾으려고 유혹에 저항하십시오. 사전에 지정된 유틸리티 / 손실 / 비용 기능이 없으면 최적의 의사 결정에 직면하여 컷오프가 발생합니다. 그리고 ROC 곡선은이 문제와 관련이 없습니다.


7

수학적으로 말하면 컷오프를 해결하기 위해 다른 조건이 필요합니다.

@Andrea의 요점을 "기본 문제에 대한 외부 지식 사용"으로 번역 할 수 있습니다.

예시 조건 :

  • 이 적용을 위해서는 감도> = x 및 / 또는 특이성> = y가 필요합니다.

  • 거짓 부정은 거짓 긍정적 인 것보다 10 배나 나쁜 것입니다. (이것은 이상적인 구석에 가장 가까운 지점을 수정하게합니다.)


1
최적의 결정을 내리려면 외부 지식이 필요합니다. 그러나 손실 함수는 위의 수량으로 표시되지 않으며, 최적의 결정은 손실 함수와 결합 된 개별 주제에 대한 예상 결과 확률에서 비롯됩니다 .
Frank Harrell

6

정확도 대 컷오프를 시각화합니다. ROCR 설명서에서 자세한 내용을 볼 수 있으며 동일한 내용의 멋진 프레젠테이션 을 읽을 수 있습니다 .

여기에 이미지 설명을 입력하십시오


1
소스 코드를 자세히 살펴보면이 패키지를 사용하고이 패키지의 설명서를 읽었습니다. 올바른 컷오프 포인트와 "회색 영역"을 결정하는 도구가 없습니다
Yuriy Petrovskiy

1
나는 코드를 확실히 읽었지만 "오른쪽 컷오프"와 같은 용어는 없지만 플롯 정확도 대 컷오프는 정확한 통찰력을 줄 수 있습니다. 이 플롯을 사용하면 최대 정확도를 위해 컷오프를 찾는 방법을 알아낼 수 있습니다.
Vladimir Chupakhin

2

더 중요한 점-이 곡선 뒤에는 데이터 포인트가 거의 없습니다. 감도 / 특이성 절충 방법을 결정할 때는 곡선과 그에 따른 컷오프 수를 부트 스트랩하는 것이 좋습니다. 예상 최고 컷오프에 많은 불확실성이 있음을 알 수 있습니다.


1
실험은 아직 진행 중이므로 더 많은 데이터 포인트를 얻을 것입니다. 방법론에 관심이 있습니다 (모든 데이터 포인트에 대해 동일하다고 생각합니다). 그리고 "회색 영역"을 결정하는 통계적 방법을 찾지 못했습니다.
Yuriy Petrovskiy 2018 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.