μ΄μ§ λ‘μ§μ€ν± νκ· λͺ¨λΈμ μμμ μΌλ‘ 곑μ μλ λ©΄μ (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 ν¨ν€μ§
pROC
ROC μΆμ μΉλ₯Ό λ§€λλ½κ² ν μ μκ³ (λ§€λλ¬μ΄ 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
λ΅λ³
- κ΄μΈ‘ κ°μ λν μ§μ ν κ°μΉκ° μμ΅λλ€.
- μ¬ν νλ₯ μ κ³μ° ν λ€μμ΄ νλ₯ λ‘ κ΄μΈ‘ κ°μ μμλ₯Ό λ§€ κΉλλ€.
P N
Sum of true ranksβ0.5PN(PN+1)PN(NβPN)