νƒœκ·Έ 보관물: roc

roc

μˆ˜λ™μœΌλ‘œ 곑선 μ•„λž˜ 면적 (AUC) λ˜λŠ” c- ν†΅κ³„λŸ‰μ„ κ³„μ‚°ν•˜λŠ” 방법 β€œμ •ν™•ν•œβ€λͺ¨λΈ λΆ„λ₯˜ 수λ₯Ό μ‹λ³„ν•˜κ³ 

이진 λ‘œμ§€μŠ€ν‹± νšŒκ·€ λͺ¨λΈμ˜ μˆ˜μž‘μ—…μœΌλ‘œ 곑선 μ•„λž˜ 면적 (AUC) λ˜λŠ” c- ν†΅κ³„λŸ‰μ„ κ³„μ‚°ν•˜λŠ” 데 관심이 μžˆμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄, μœ νš¨μ„± 검사 데이터 μ§‘ν•©μ—μ„œ 쒅속 λ³€μˆ˜μ— λŒ€ν•œ μ‹€μ œ κ°’, 보쑴 (1 = μœ μ§€; 0 = μœ μ§€λ˜μ§€ μ•ŠμŒ)은 λ‹€μŒκ³Ό 같은 λͺ¨ν˜•을 μ‚¬μš©ν•˜μ—¬ νšŒκ·€ 뢄석에 μ˜ν•΄ 생성 된 각 κ΄€μΈ‘μΉ˜μ˜ 예츑 보쑴 μƒνƒœλ₯Ό κ°–μŠ΅λ‹ˆλ‹€. ν›ˆλ ¨ μ„ΈνŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μž‘μ„±λ©λ‹ˆλ‹€ (0μ—μ„œ 1κΉŒμ§€).

μ €μ˜ 초기 생각은 β€œμ •ν™•ν•œβ€λͺ¨λΈ λΆ„λ₯˜ 수λ₯Ό μ‹λ³„ν•˜κ³  β€œμ •ν™•ν•œβ€κ΄€μΈ‘ 수λ₯Ό 총 κ΄€μΈ‘ 수둜 λ‚˜λˆ„μ–΄ c- ν†΅κ³„λŸ‰μ„ κ³„μ‚°ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. β€œμ •ν™•ν•œβ€κΈ°μ€€, κ΄€μΈ‘μΉ˜μ˜ μ‹€μ œ 보유 μƒνƒœκ°€ 1이고 예츑 된 보유 μƒνƒœκ°€> 0.5이면 β€œμ •ν™•ν•œβ€λΆ„λ₯˜μž…λ‹ˆλ‹€. λ˜ν•œ κ΄€μΈ‘μΉ˜μ˜ μ‹€μ œ 보유 μƒνƒœ = 0이고 예츑 된 보유 μƒνƒœκ°€ <0.5 인 경우 β€œμ •ν™•ν•œβ€λΆ„λ₯˜μ΄κΈ°λ„ν•©λ‹ˆλ‹€. 예츑 값이 0.5 일 λ•Œ β€œtie”가 λ°œμƒν•œλ‹€κ³  κ°€μ •ν•˜μ§€λ§Œ μœ νš¨μ„± 검사 데이터 μ„ΈνŠΈμ—μ„œ ν•΄λ‹Ή ν˜„μƒμ΄ λ°œμƒν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 반면, β€œμ •ν™•ν•˜μ§€ μ•Šμ€β€λΆ„λ₯˜λŠ” κ΄€μΈ‘μΉ˜μ˜ μ‹€μ œ 보유 μƒνƒœ = 1이고 예츑 된 보유 μƒνƒœκ°€ <0 인 κ²½μš°μž…λ‹ˆλ‹€. 5 λ˜λŠ” 결과의 μ‹€μ œ 보쑴 μƒνƒœκ°€ 0이고 예츑 보쑴 μƒνƒœκ°€> 0.5 인 경우. λ‚˜λŠ” TP, FP, FN, TN을 μ•Œκ³  μžˆμ§€λ§Œμ΄ 정보가 μ£Όμ–΄μ§€λ©΄ c 톡계λ₯Ό κ³„μ‚°ν•˜λŠ” 방법을 μ•Œμ§€ λͺ»ν•©λ‹ˆλ‹€.



λ‹΅λ³€

Hanley β€˜s & McNeil의 1982 λ…„ λ…Όλ¬Έ β€˜ ROC (μˆ˜μ‹ κΈ° λ™μž‘ νŠΉμ„±) 곑선 μ•„λž˜ μ˜μ—­μ˜ μ˜λ―Έμ™€ μ‚¬μš© β€˜μ„ μΆ”μ²œν•©λ‹ˆλ‹€.

예

λ‹€μŒκ³Ό 같은 μ§ˆλ³‘ μƒνƒœ 및 검사 κ²°κ³Ό ν‘œκ°€ μžˆμŠ΅λ‹ˆλ‹€ (예 : λ¬Όλ₯˜ λͺ¨λΈμ˜ μ˜ˆμƒ μœ„ν—˜μ— ν•΄λ‹Ή). 였λ₯Έμͺ½μ˜ 첫 번째 μˆ«μžλŠ” μ‹€μ œ μ§ˆλ³‘ μƒνƒœκ°€ β€˜μ •μƒβ€™μΈ ν™˜μžμ˜ 수이고 두 번째 μˆ«μžλŠ” μ‹€μ œ μ§ˆλ³‘ μƒνƒœκ°€ β€˜λΉ„μ •μƒβ€™ 인 ν™˜μžμ˜ μˆ˜μž…λ‹ˆλ‹€ .

(1) ν™•μ‹€νžˆ 정상 : 33/3
(2) μ•„λ§ˆ 정상 : 6/2
(3) μ˜μ‹¬μŠ€λŸ¬μš΄ : 6/2
(4) μ•„λ§ˆλ„ 비정상 : 11/11
(5) ν™•μ‹€νžˆ 비정상 : 2/33

λ”°λΌμ„œ 총 58 λͺ…μ˜ β€˜μ •μƒμ μΈβ€™ν™˜μžμ™€ ’51β€™μ˜ 비정상적인 ν™˜μžκ°€ μžˆμŠ΅λ‹ˆλ‹€. 예츑 λ³€μˆ˜κ°€ 1, β€˜μ •ν™•νžˆ 정상’인 경우 ν™˜μžλŠ” 일반적으둜 정상이며 (36 λͺ…μ˜ ν™˜μž 쀑 33 λͺ…에 λŒ€ν•΄ μ°Έ), 5 일 λ•Œ β€˜ν™•μ‹€νžˆ λΉ„μ •μƒμ μΈβ€™ν™˜μžλŠ” 일반적으둜 λΉ„μ •μƒμž…λ‹ˆλ‹€ ( 35 λͺ…μ˜ ν™˜μž), μ˜ˆμΈ‘μžκ°€ μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 2, 3 λ˜λŠ” 4 점의 ν™˜μžλ₯Ό μ–΄λ–»κ²Œ νŒλ‹¨ν•΄μ•Όν•©λ‹ˆκΉŒ? κ²°κ³Ό κ²€μ‚¬μ˜ 민감도와 νŠΉμ΄μ„±μ„ κ²°μ •ν•˜κΈ° μœ„ν•΄ ν™˜μžλ₯Ό 비정상 λ˜λŠ” μ •μƒμœΌλ‘œ νŒλ‹¨ν•˜κΈ° μœ„ν•΄ μ»·μ˜€ν”„λ₯Ό μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€.

감도와 νŠΉμ΄μ„±

λ‹€λ₯Έ μ»·μ˜€ν”„μ— λŒ€ν•œ μΆ”μ • 감도 및 νŠΉμ΄λ„λ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€ . (μ΄μ œλΆ€ν„°λŠ” β€˜λ―Όκ°λ„β€™μ™€ β€˜νŠΉμ΄μ„±β€™μ„ μž‘μ„±ν•˜μ—¬ κ°’μ˜ μΆ”μ • νŠΉμ„±μ„ μ•”μ‹œν•©λ‹ˆλ‹€.)

검사 결과에 상관없이 λͺ¨λ“  ν™˜μžλ₯Ό λΉ„μ •μƒμœΌλ‘œ λΆ„λ₯˜ν•˜κΈ° μœ„ν•΄ μ»·μ˜€ν”„λ₯Ό μ„ νƒν•˜λ©΄ (즉, μ»·μ˜€ν”„ 1+λ₯Ό μ„ νƒν•˜λ”λΌλ„) κ°λ„λŠ” 51/51 = 1μ΄λ©λ‹ˆλ‹€. νŠΉμ΄λ„λŠ” 0μž…λ‹ˆλ‹€. / 58 = 0. μ†Œλ¦¬κ°€ 잘 듀리지 μ•ŠμŠ΅λ‹ˆλ‹€.

이제 덜 μ—„κ²©ν•œ μ»·μ˜€ν”„λ₯Ό μ„ νƒν•˜κ² μŠ΅λ‹ˆλ‹€. 검사 κ²°κ³Όκ°€ 2 이상인 ν™˜μž 만 λΉ„μ •μƒμœΌλ‘œ λΆ„λ₯˜ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ 3 λͺ…μ˜ 비정상 ν™˜μžλ₯Ό κ·Έλ¦¬μ›Œν•˜κ³  48/51 = 0.94의 감도λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ μš°λ¦¬λŠ” 33/58 = 0.57의 훨씬 더 높은 νŠΉμ΄μ„±μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

이제 λ‹€μ–‘ν•œ μ»·μ˜€ν”„ (3, 4, 5,> 5)λ₯Ό μ„ νƒν•˜μ—¬μ΄ μž‘μ—…μ„ 계속할 수 μžˆμŠ΅λ‹ˆλ‹€. (λ§ˆμ§€λ§‰μœΌλ‘œ, μš°λ¦¬λŠ” κ°€λŠ₯ν•œ κ°€μž₯ 높은 μ‹œν—˜ μ μˆ˜κ°€ 5 인 κ²½μš°μ—λ„ ν™˜μžλ₯Ό λΉ„μ •μƒμœΌλ‘œ λΆ„λ₯˜ ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ .)

ROC 곑선

κ°€λŠ₯ν•œ λͺ¨λ“  μ»·μ˜€ν”„μ— λŒ€ν•΄μ΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  1μ—μ„œ νŠΉμ΄μ„±μ„ λΊ€ 민감도λ₯Ό ν”Œλ‘―ν•˜λ©΄ ROC 곑선이 λ‚˜νƒ€λ‚©λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 R μ½”λ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

# Data
norm     = rep(1:5, times=c(33,6,6,11,2))
abnorm   = rep(1:5, times=c(3,2,2,11,33))
testres  = c(abnorm,norm)
truestat = c(rep(1,length(abnorm)), rep(0,length(norm)))

# Summary table (Table I in the paper)
( tab=as.matrix(table(truestat, testres)) )

좜λ ₯은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

        testres
truestat  1  2  3  4  5
       0 33  6  6 11  2
       1  3  2  2 11 33

λ‹€μ–‘ν•œ 톡계λ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

( tot=colSums(tab) )                            # Number of patients w/ each test result
( truepos=unname(rev(cumsum(rev(tab[2,])))) )   # Number of true positives
( falsepos=unname(rev(cumsum(rev(tab[1,])))) )  # Number of false positives
( totpos=sum(tab[2,]) )                         # The total number of positives (one number)
( totneg=sum(tab[1,]) )                         # The total number of negatives (one number)
(sens=truepos/totpos)                           # Sensitivity (fraction true positives)
(omspec=falsepos/totneg)                        # 1 βˆ’ specificity (false positives)
sens=c(sens,0); omspec=c(omspec,0)              # Numbers when we classify all as normal

이λ₯Ό μ‚¬μš©ν•˜μ—¬ (μΆ”μ •) ROC 곑선을 그릴 수 μžˆμŠ΅λ‹ˆλ‹€.

plot(omspec, sens, type="b", xlim=c(0,1), ylim=c(0,1), lwd=2,
     xlab="1 βˆ’ specificity", ylab="Sensitivity") # perhaps with xaxs="i"
grid()
abline(0,1, col="red", lty=2)

AUC μˆ˜λ™ 계산

사닀리꼴 면적에 λŒ€ν•œ 곡식을 μ‚¬μš©ν•˜μ—¬ ROC 곑선 μ•„λž˜ 면적을 맀우 μ‰½κ²Œ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

height = (sens[-1]+sens[-length(sens)])/2
width = -diff(omspec) # = diff(rev(omspec))
sum(height*width)

κ²°κ³ΌλŠ” 0.8931711μž…λ‹ˆλ‹€.

일치 μΈ‘μ •

AUCλŠ” λ˜ν•œ 일치 μΈ‘μ •μœΌλ‘œ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. μš°λ¦¬λŠ” λͺ¨λ“  κ°€λŠ₯ν•œ 걸릴 경우 쌍 ν•˜λ‚˜κ°€ 정상이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” 비정상이닀 ν™˜μžλ₯Ό, μš°λ¦¬λŠ” (κ°€μž₯ 높은 (κ°€μž₯ β€˜λΉ„μ •μƒ λ³΄μ΄λŠ”β€™)의 ν…ŒμŠ€νŠΈ κ²°κ³Όκ°€ 비정상 ν•˜λ‚˜ λΉˆλ„λ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€ 그듀은 같은 κ°’μ΄μžˆλŠ” 경우, 우리 이것을 β€˜μŠΉλ¦¬μ˜ μ ˆλ°˜β€™μœΌλ‘œ μ„Έμ‹­μ‹œμ˜€).

o = outer(abnorm, norm, "-")
mean((o>0) + .5*(o==0))

닡은 λ‹€μ‹œ ROC 곑선 μ•„λž˜ 인 0.8931711μž…λ‹ˆλ‹€. 항상 κ·Έλ ‡μŠ΅λ‹ˆλ‹€.

일치의 κ·Έλž˜ν”½λ³΄κΈ°

Harrell이 그의 λ‹΅λ³€μ—μ„œ μ§€μ ν–ˆλ“―μ΄ 이것은 κ·Έλž˜ν”½μœΌλ‘œ ν•΄μ„λ©λ‹ˆλ‹€. y μΆ• 에 λŒ€ν•œ ν…ŒμŠ€νŠΈ 점수 (μœ„ν—˜ μΆ”μ •μΉ˜) 와 x μΆ• 에 λŒ€ν•œ μ‹€μ œ μ§ˆλ³‘ μƒνƒœ (μ—¬κΈ°μ„œ μ•½κ°„μ˜ μ§€ 터링이 있음)λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€.

plot(jitter(truestat,.2), jitter(testres,.8), las=1,
     xlab="True disease status", ylab="Test score")

이제 μ™Όμͺ½μ˜ 각 지점 ( β€˜μ •μƒβ€™ν™˜μž)κ³Ό 였λ₯Έμͺ½μ˜ 각 지점 ( β€˜λΉ„μ •μƒβ€™ν™˜μž) 사이에 선을 κ·Έλ¦¬κ² μŠ΅λ‹ˆλ‹€. μ–‘μ˜ 기울기λ₯Ό κ°€μ§„ μ„ μ˜ λΉ„μœ¨ (즉, 일치 쌍 의 λΉ„μœ¨ )은 일치 μ§€μˆ˜ (ν‰ν‰ν•œ 선은 ’50 % 일치 β€˜λ‘œ 계산)μž…λ‹ˆλ‹€.

동점 수 (λ™μΌν•œ μœ„ν—˜ 점수)둜 인해이 예제의 μ‹€μ œ 선을 μ‹œκ°ν™”ν•˜λŠ” 것은 μ•½κ°„ μ–΄λ ΅μ§€λ§Œ μ•½κ°„μ˜ μ§€ 터링과 투λͺ…성을 톡해 합리적인 ν”Œλ‘―μ„ 얻을 수 μžˆμŠ΅λ‹ˆλ‹€.

d = cbind(x_norm=0, x_abnorm=1, expand.grid(y_norm=norm, y_abnorm=abnorm))
library(ggplot2)
ggplot(d, aes(x=x_norm, xend=x_abnorm, y=y_norm, yend=y_abnorm)) +
  geom_segment(colour="#ff000006",
               position=position_jitter(width=0, height=.1)) +
  xlab("True disease status") + ylab("Test\nscore") +
  theme_light()  + theme(axis.title.y=element_text(angle=0))

μš°λ¦¬λŠ” λŒ€λΆ€λΆ„μ˜ 선이 μœ„μͺ½μœΌλ‘œ κΈ°μšΈμ–΄ 짐에 따라 일치 μ§€μˆ˜κ°€ λ†’μ•„μ§ˆ κ²ƒμž…λ‹ˆλ‹€. λ˜ν•œ 각 μœ ν˜•μ˜ κ΄€μΈ‘ μŒμ—μ„œ μ§€μˆ˜μ— λŒ€ν•œ 기여도λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έκ²ƒμ˜ λŒ€λΆ€λΆ„μ€ μœ„ν—˜ μ μˆ˜κ°€ 1 인 정상 ν™˜μžμ™€ μœ„ν—˜ μ μˆ˜κ°€ 5 (1-5 쌍) 인 비정상 ν™˜μžμ™€ 짝을 이루고 μžˆμ§€λ§Œ, 1-4 쌍과 4-5 μŒμ—μ„œλ„ μƒλ‹Ήνžˆ λ§ŽμŠ΅λ‹ˆλ‹€. 그리고 경사 μ •μ˜λ₯Ό 기반으둜 μ‹€μ œ 일치 μ§€μˆ˜λ₯Ό κ³„μ‚°ν•˜λŠ” 것은 맀우 μ‰½μŠ΅λ‹ˆλ‹€.

d = transform(d, slope=(y_norm-y_abnorm)/(x_norm-x_abnorm))
mean((d$slope > 0) + .5*(d$slope==0))

λŒ€λ‹΅μ€ λ‹€μ‹œ 0.8931711, 즉 AUCμž…λ‹ˆλ‹€.

Wilcoxon–Mann–Whitney ν…ŒμŠ€νŠΈ

일치 μΈ‘μ •κ³Ό Wilcoxon–Mann-Whitney ν…ŒμŠ€νŠΈ κ°„μ—λŠ” λ°€μ ‘ν•œ 관련이 μžˆμŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ ν›„μžλŠ” 일치 ν™•λ₯  (즉, κ°€μž₯ β€˜λΉ„μ •μƒμ μΈβ€™ν…ŒμŠ€νŠΈ κ²°κ³Ό λ₯Ό κ°–λŠ” μž„μ˜μ˜ 정상-비정상 쌍 μ—μ„œ 비정상 ν™˜μž μž„μ„ 확인)이 μ •ν™•νžˆ 0.5인지 ν…ŒμŠ€νŠΈν•©λ‹ˆλ‹€. ν…ŒμŠ€νŠΈ ν†΅κ³„λŸ‰μ€ μΆ”μ • 된 일치 μ„± ν™•λ₯ μ˜ κ°„λ‹¨ν•œ λ³€ν™˜ μΌλΏμž…λ‹ˆλ‹€.

> ( wi = wilcox.test(abnorm,norm) )
    Wilcoxon rank sum test with continuity correction

data:  abnorm and norm
W = 2642, p-value = 1.944e-13
alternative hypothesis: true location shift is not equal to 0

κ²€μ • ν†΅κ³„λŸ‰ ( W = 2642)은 일치 쌍의 수λ₯Ό κ³„μ‚°ν•©λ‹ˆλ‹€. κ°€λŠ₯ν•œ 쌍의 수둜 λ‚˜λˆ„λ©΄ κ°€μ‘± μˆ˜κ°€ μƒκΉλ‹ˆλ‹€.

w = wi$statistic
w/(length(abnorm)*length(norm))

예, ROC 곑선 μ•„λž˜ 인 0.8931711μž…λ‹ˆλ‹€.

보닀 μ‰¬μš΄ AUC 계산 방법 (R)

κ·ΈλŸ¬λ‚˜ 우리 μžμ‹ μ„ μœ„ν•΄ 인생을 더 νŽΈν•˜κ²Œν•©μ‹œλ‹€. 우리λ₯Ό μœ„ν•΄ μžλ™μœΌλ‘œ AUCλ₯Ό κ³„μ‚°ν•˜λŠ” λ‹€μ–‘ν•œ νŒ¨ν‚€μ§€κ°€ μžˆμŠ΅λ‹ˆλ‹€.

Epi νŒ¨ν‚€μ§€

이 EpiνŒ¨ν‚€μ§€λŠ” λ‹€μ–‘ν•œ 톡계 (AUC 포함)κ°€ 포함 된 λ©‹μ§„ ROC 곑선을 λ§Œλ“­λ‹ˆλ‹€.

library(Epi)
ROC(testres, truestat) # also try adding plot="sp"

pROC νŒ¨ν‚€μ§€

pROCROC μΆ”μ •μΉ˜λ₯Ό λ§€λ„λŸ½κ²Œ ν•  수 있고 (λ§€λ„λŸ¬μš΄ ROCλ₯Ό 기반으둜 AUC μΆ”μ •μΉ˜λ₯Ό 계산할 수 있기 λ•Œλ¬Έμ—) νŒ¨ν‚€μ§€ 도 μ’‹μ•„ν•©λ‹ˆλ‹€ .

(빨간색 선은 μ›λž˜ ROC이고 검은 색 선은 λ§€λ„λŸ½κ²Œ 된 ROCμž…λ‹ˆλ‹€. κΈ°λ³Έ 1 : 1 μ’…νš‘λΉ„μ— μœ μ˜ν•˜μ‹­μ‹œμ˜€. 감도와 νŠΉμ΄λ„λŠ” λͺ¨λ‘ 0-1 λ²”μœ„μ΄λ―€λ‘œμ΄λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€.)

ν‰ν™œ ROC 의 μΆ”μ • AUC λŠ” 0.9107이며 ν‰ν™œ ROC의 AUC 와 λΉ„μŠ·ν•˜μ§€λ§Œ μ•½κ°„ 더 ν½λ‹ˆλ‹€ (그림을 보면 μ™œ 더 큰지 μ‰½κ²Œ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€). (μ‹€μ œλ‘œ AUCλ₯Ό 계산할 μˆ˜μžˆλŠ” 고유 ν•œ ν…ŒμŠ€νŠΈ κ²°κ³Ό 값이 λ„ˆλ¬΄ μ μŠ΅λ‹ˆλ‹€).

rms νŒ¨ν‚€μ§€

ν•˜λ μ˜ rmsνŒ¨ν‚€μ§€λŠ” μ‚¬μš©ν•˜μ—¬ λ‹€μ–‘ν•œ κ΄€λ ¨ μš©μ–΄ 색인 톡계λ₯Ό 계산할 수 μžˆμŠ΅λ‹ˆλ‹€ rcorr.cens()κΈ°λŠ₯. C Indexκ·Έ 좜λ ₯은 AUC이닀 :

> library(rms)
> rcorr.cens(testres,truestat)[1]
  C Index
0.8931711

caTools νŒ¨ν‚€μ§€

λ§ˆμ§€λ§‰μœΌλ‘œ caToolsνŒ¨ν‚€μ§€μ™€ colAUC()κΈ°λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€. λ•Œλ‘œλŠ” 도움이 될 ?colAUC수 μžˆλŠ” λ‹€λ₯Έ νŒ¨ν‚€μ§€ (주둜 속도 및 닀차원 데이터 μž‘μ—… κΈ°λŠ₯ – μ°Έμ‘° )에 λΉ„ν•΄ λͺ‡ κ°€μ§€ μž₯점 이 μžˆμŠ΅λ‹ˆλ‹€ . κ·ΈλŸ¬λ‚˜ λ¬Όλ‘  μš°λ¦¬κ°€ λ°˜λ³΅ν•΄μ„œ 계산 ν•œ 것과 같은 λŒ€λ‹΅μ„ μ œκ³΅ν•©λ‹ˆλ‹€.

library(caTools)
colAUC(testres, truestat, plotROC=TRUE)
             [,1]
0 vs. 1 0.8931711

λ§ˆμ§€λ§‰ 단어

λ§Žμ€ μ‚¬λžŒλ“€μ΄ AUCκ°€ μ‹œν—˜μ΄ μ–Όλ§ˆλ‚˜ β€˜μ’‹μ€β€™μ§€λ₯Ό 말해 μ€€λ‹€κ³  μƒκ°ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 그리고 μ–΄λ–€ μ‚¬λžŒλ“€μ€ AUCκ°€ 검사가 ν™˜μžλ₯Ό μ˜¬λ°”λ₯΄κ²Œ λΆ„λ₯˜ ν•  ν™•λ₯ μ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. 그것은이닀 μ—†μŠ΅λ‹ˆλ‹€ . μœ„μ˜ μ˜ˆμ™€ κ³„μ‚°μ—μ„œ λ³Ό 수 μžˆλ“―μ΄ AUCλŠ” κ°€λŠ₯ν•œ 각 μ»·μ˜€ν”„λ§ˆλ‹€ ν•˜λ‚˜μ”© ν…ŒμŠ€νŠΈ νŒ¨λ°€λ¦¬ 에 λŒ€ν•΄ μ•Œλ €μ€λ‹ˆλ‹€ .

AUCλŠ” μ‹€μ œλ‘œ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ»·μ˜€ν”„λ₯Ό κΈ°μ€€μœΌλ‘œ κ³„μ‚°λ©λ‹ˆλ‹€. β€˜λ¬΄μ˜λ―Έν•œβ€™μ°¨λ‹¨ κ°’μ˜ 민감도와 νŠΉμ΄μ„±μ— 관심을 κ°€μ Έμ•Όν•˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? μ—¬μ „νžˆ AUCλŠ” (λΆ€λΆ„μ μœΌλ‘œ) κΈ°λ°˜μž…λ‹ˆλ‹€. (λ¬Όλ‘  AUCκ°€ 1에 맀우 κ°€κΉŒμš°λ©΄ 거의 λͺ¨λ“  κ°€λŠ₯ν•œ ν…ŒμŠ€νŠΈμ— 큰 차별 λ ₯이 있으며, μš°λ¦¬λŠ” λͺ¨λ‘ 맀우 행볡 ν•  κ²ƒμž…λ‹ˆλ‹€.)

AUC의 β€˜λ¬΄μž‘μœ„ 정상-λΉ„μ •μƒβ€™νŽ˜μ–΄ 해석은 ν›Œλ₯­ν•©λ‹ˆλ‹€ (예λ₯Ό λ“€μ–΄ 생쑴 λͺ¨λΈλ‘œ ν™•μž₯ 될 수 있으며, μ—¬κΈ°μ„œ κ°€μž₯ 높은 (μƒλŒ€) μœ„ν—˜μ΄μžˆλŠ” μ‚¬λžŒμ΄ κ°€μž₯ 빨리 μ‚¬λ§ν•˜λŠ”μ§€ 확인). κ·ΈλŸ¬λ‚˜ μ‹€μ œλ‘œλŠ” μ‚¬μš©ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€. 그것은 ν•˜λ‚˜λŠ” λ“œλ¬Έ κ²½μš°μž…λ‹ˆλ‹€ μ•Œκ³  ν•˜λ‚˜κ°€ ν•˜λ‚˜μ˜ κ±΄κ°•ν•˜κ³  ν•˜λ‚˜ , μ•„ν”ˆ μ‚¬λžŒμ„ 병 ν•˜λ‚˜μž…λ‹ˆλ‹€ μ‚¬λžŒμ„ μ•Œκ³ ν•˜μ§€ μ•ŠμœΌλ©°, μΉ˜λ£Œν•˜λŠ” κ·Έλ“€μ˜ κ²°μ •ν•΄μ•Όν•©λ‹ˆλ‹€. (μ–΄μ¨Œλ“  결정은 μ‰¬μš°λ―€λ‘œ μΆ”μ • μœ„ν—˜μ΄ κ°€μž₯ 높은 결정을 μ²˜λ¦¬ν•˜μ‹­μ‹œμ˜€.)

λ”°λΌμ„œ μ‹€μ œ ROC 곑선을 μ—°κ΅¬ν•˜λŠ” 것이 AUC μš”μ•½ 츑정법을 λ³΄λŠ” 것보닀 더 유용 ν•˜λ‹€κ³  생각 ν•©λ‹ˆλ‹€. 그리고 ROC λ₯Ό μ˜€νƒ (false positive) 및 μ˜€νƒ (false negative ) λΉ„μš© (μΆ”μ •μΉ˜) κ³Ό ν•¨κ»˜ 연ꡬ λŒ€μƒμ˜ κΈ°λ³Έ μš”μœ¨κ³Ό ν•¨κ»˜ μ‚¬μš©ν•˜λ©΄ μ–΄λ”˜κ°€μ— 갈 수 μžˆμŠ΅λ‹ˆλ‹€.

λ˜ν•œ AUCλŠ” ꡐ정이 μ•„λ‹Œ 차별 만 μΈ‘μ • ν•©λ‹ˆλ‹€. 즉, μœ„ν—˜ μ μˆ˜μ— 따라 두 μ‚¬λžŒ (ν•œ μ‚¬λžŒκ³Ό κ±΄κ°•ν•œ μ‚¬λžŒ)을 ꡬ별 ν•  수 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μΈ‘μ •ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ 관심 μžˆλŠ” μ ˆλŒ€ 값이 μ•„λ‹Œ μƒλŒ€ μœ„ν—˜ κ°’ (λ˜λŠ” 윌 μ½•μŠ¨-맨-νœ˜νŠΈλ‹ˆ ν…ŒμŠ€νŠΈ 해석 μ°Έμ‘°) 만 쑰사 ν•©λ‹ˆλ‹€ . 예λ₯Ό λ“€μ–΄, 각 μœ„ν—˜μ„ λ‚˜λˆ„λŠ” 경우 λ‘œμ§€μŠ€ν‹± λͺ¨λΈμ—μ„œ 2λ₯Ό μΆ”μ •ν•˜λ©΄ μ •ν™•νžˆ λ™μΌν•œ AUC (및 ROC)λ₯Ό μ–»κ²Œλ©λ‹ˆλ‹€.

μœ„ν—˜ λͺ¨λΈμ„ 평가할 λ•ŒλŠ” ꡐ정 도 맀우 μ€‘μš”ν•©λ‹ˆλ‹€. 이λ₯Ό κ²€μ‚¬ν•˜κΈ° μœ„ν•΄ μœ„ν—˜ 점수 (예 : 0.7)κ°€μžˆλŠ” λͺ¨λ“  ν™˜μžλ₯Ό μ‚΄νŽ΄λ³΄κ³  이듀 쀑 μ•½ 70 %κ°€ μ‹€μ œλ‘œ μ•„ν”ˆμ§€ ν™•μΈν•©λ‹ˆλ‹€. κ°€λŠ₯ν•œ λͺ¨λ“  μœ„ν—˜ μ μˆ˜μ— λŒ€ν•΄μ΄ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ‹­μ‹œμ˜€ (일뢀 μŠ€λ¬΄λ”© / 둜컬 νšŒκ·€ 뢄석 μ‚¬μš©). κ²°κ³Όλ₯Ό ν”Œλ‘―ν•˜λ©΄ κ·Έλž˜ν”½ 보정 μΈ‘μ • 값을 μ–»κ²Œ λ©λ‹ˆλ‹€.

와 λͺ¨λΈμ΄μžˆλŠ” 경우 λͺ¨λ‘ 쒋은 ꡐ정과 쒋은 차별, 당신은 쒋은 λͺ¨λΈμ„ κ°€μ§€κ³  μ‹œμž‘ν•©λ‹ˆλ‹€. πŸ™‚


λ‹΅λ³€

이 μ§ˆλ¬Έμ„ μ‚΄νŽ΄λ³΄μ‹­μ‹œμ˜€ : ROC 곑선 이해

ROC 곑선을 λ§Œλ“œλŠ” 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

ROC 곑선 그리기

μˆœμœ„ λΆ„λ₯˜ κΈ°κ°€ 처리 ν•œ 데이터 μ„ΈνŠΈ

  • 점수 κ°μ†Œμ— λŒ€ν•œ μˆœμœ„ ν…ŒμŠ€νŠΈ 예
  • μ—μ„œ μ‹œμž‘
    (0,0)


  • x


    • x

      1/pos


    • x

      1/neg

pos

neg

이 μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ λ‹€μŒ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ AUC ROCλ₯Ό μˆ˜λ™μœΌλ‘œ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€.

auc = 0.0
height = 0.0

for each training example x_i, y_i
  if y_i = 1.0:
    height = height + tpr
  else
    auc = auc + height * fpr

return auc

이 λ©‹μ§„ gif μ• λ‹ˆλ©”μ΄μ…˜ 그림은이 과정을 λͺ…ν™•ν•˜κ²Œ μ„€λͺ…ν•΄μ•Όν•©λ‹ˆλ‹€.

컀브 λ§Œλ“€κΈ°


λ‹΅λ³€

Karl의 κ²Œμ‹œλ¬Όμ—λŠ” ν›Œλ₯­ν•œ 정보가 많이 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μ§€λ‚œ 20 λ…„ λ™μ•ˆ λˆ„κ΅°κ°€μ˜ 생각을 쒋은 λ°©ν–₯으둜 λ°”κΎΈλŠ” ROC κ³‘μ„ μ˜ 예λ₯Ό 아직 보지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. κ²Έμ†ν•œ κ²¬ν•΄μ—μ„œ ROC κ³‘μ„ μ˜ μœ μΌν•œ κ°€μΉ˜λŠ” κ·Έ μ˜μ—­μ΄ 맀우 μœ μš©ν•œ 일치 ν™•λ₯ κ³Ό κ°™λ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. ROC 곑선 μžμ²΄λŠ” λ…μžκ°€ μ»·μ˜€ν”„λ₯Ό μ‚¬μš©ν•˜λ„λ‘ μœ ν˜Ήν•©λ‹ˆλ‹€.

c

Y=0,1

x

Y=1

y

Y=0

Y=1

n

R HmiscνŒ¨ν‚€μ§€ rcorr.censκΈ°λŠ₯의 경우 전체 κ²°κ³Όλ₯Ό μΈμ‡„ν•˜μ—¬ μžμ„Έν•œ 정보, 특히 ν‘œμ€€ 였λ₯˜λ₯Όλ³΄μ‹­μ‹œμ˜€.


λ‹΅λ³€

λ‹€μŒμ€ λ‹¨μˆœνžˆ 사닀리꼴 κ·œμΉ™μ„ μ‚¬μš©ν•˜μ—¬ ROC 곑선 μ•„λž˜ μ˜μ—­μ„ κ°€μ Έ μ™€μ„œ AUCλ₯Ό κ³„μ‚°ν•˜λŠ” μžμ—°μŠ€λŸ¬μš΄ λ°©λ²•μ˜ λŒ€μ•ˆμž…λ‹ˆλ‹€.

AUCλŠ” λ¬΄μž‘μœ„λ‘œ μƒ˜ν”Œλ§ 된 μ–‘μ„± κ΄€μΈ‘μΉ˜κ°€ λ¬΄μž‘μœ„λ‘œ μƒ˜ν”Œλ§ 된 μŒμ„± κ΄€μΈ‘μΉ˜λ³΄λ‹€ 예츑 ν™•λ₯  (μ–‘μˆ˜)이 클 ν™•λ₯ κ³Ό κ°™μŠ΅λ‹ˆλ‹€. 이 κΈ°λŠ₯을 μ‚¬μš©ν•˜λ©΄ μ–‘μ„± 및 μŒμ„± κ΄€μΈ‘ κ°’μ˜ μŒλ³„ 쑰합을 톡해 ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ AUCλ₯Ό 맀우 μ‰½κ²Œ 계산할 수 μžˆμŠ΅λ‹ˆλ‹€. ν‘œλ³Έ 크기가 λ„ˆλ¬΄ 큰 경우 κ΄€μΈ‘μΉ˜λ₯Ό λ¬΄μž‘μœ„λ‘œ ν‘œλ³Έ μΆ”μΆœ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. 펜과 쒅이λ₯Ό μ‚¬μš©ν•˜μ—¬ AUCλ₯Ό κ³„μ‚°ν•˜λ €λŠ” 경우 μƒ˜ν”Œμ΄ μ κ±°λ‚˜ μ‹œκ°„μ΄ λ§Žμ§€ μ•ŠμœΌλ©΄ 이것이 μ΅œμ„ μ˜ 방법이 아닐 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄ Rμ—μ„œ :

n <- 100L

x1 <- rnorm(n, 2.0, 0.5)
x2 <- rnorm(n, -1.0, 2)
y <- rbinom(n, 1L, plogis(-0.4 + 0.5 * x1 + 0.1 * x2))

mod <- glm(y ~ x1 + x2, "binomial")

probs <- predict(mod, type = "response")

combinations <- expand.grid(positiveProbs = probs[y == 1L],
        negativeProbs = probs[y == 0L])

mean(combinations$positiveProbs > combinations$negativeProbs)
[1] 0.628723

pROCνŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€ .

library(pROC)
auc(y, probs)
Area under the curve: 0.6287

λ¬΄μž‘μœ„ μƒ˜ν”Œλ§ μ‚¬μš© :

mean(sample(probs[y == 1L], 100000L, TRUE) > sample(probs[y == 0L], 100000L, TRUE))
[1] 0.62896

λ‹΅λ³€

  1. κ΄€μΈ‘ 값에 λŒ€ν•œ μ§„μ •ν•œ κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.
  2. 사후 ν™•λ₯ μ„ 계산 ν•œ λ‹€μŒμ΄ ν™•λ₯ λ‘œ κ΄€μΈ‘ κ°’μ˜ μˆœμœ„λ₯Ό λ§€ κΉλ‹ˆλ‹€.

  3. P

    N


    Sum of true ranksβˆ’0.5PN(PN+1)PN(Nβˆ’PN)


λ‹΅λ³€