Exemplos de uso da curva ROC

X1 = c(29,30,31,31,32,29,30,31,32,33)
X2 = c(62,83,74,88,68,41,74,21,50,33)
Y = c(0,0,0,0,0,1,1,1,1,1)
dados = data.frame(X1,X2,Y)
show(dados)
##    X1 X2 Y
## 1  29 62 0
## 2  30 83 0
## 3  31 74 0
## 4  31 88 0
## 5  32 68 0
## 6  29 41 1
## 7  30 74 1
## 8  31 21 1
## 9  32 50 1
## 10 33 33 1

O pacote glm2 ajusta modelos lineares generalizados usando a mesma especificação de modelo que a função base glm, mas com um método de ajuste padrão modificado. O método fornece maior estabilidade para modelos que podem falhar em convergir usando glm.

library(glm2); library(rsq)
ajuste = glm2(Y ~ X1+X2, data = dados, family = binomial(link = "logit"))
summary(ajuste)
## 
## Call:
## glm2(formula = Y ~ X1 + X2, family = binomial(link = "logit"), 
##     data = dados)
## 
## Deviance Residuals: 
##      Min        1Q    Median        3Q       Max  
## -1.17660  -0.54685  -0.07997   0.30993   1.88216  
## 
## Coefficients:
##              Estimate Std. Error z value Pr(>|z|)
## (Intercept)  7.941953  24.469012   0.325    0.746
## X1           0.009833   0.770999   0.013    0.990
## X2          -0.132726   0.081249  -1.634    0.102
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 13.8629  on 9  degrees of freedom
## Residual deviance:  6.7789  on 7  degrees of freedom
## AIC: 12.779
## 
## Number of Fisher Scoring iterations: 6
rsq(ajuste)
## [1] 0.5603035

Curva ROC

A curva AUC - ROC é uma medida de desempenho para os problemas de classificação em várias configurações de limite. ROC é uma curva de probabilidade e AUC representa o grau ou medida de separabilidade. Diz o quanto o modelo é capaz de distinguir entre as classes. Quanto maior a AUC, melhor será o modelo em prever 0 classes como 0 e 1 classe como 1. Por analogia, quanto maior a AUC, melhor será o modelo em distinguir entre pacientes com a doença e sem doença.

A curva ROC é traçada com TPR contra FPR onde TPR está no eixo y e FPR está no eixo x.

library(ROSE)
roc.curve(dados$Y, fitted(ajuste), col=2, lwd=2, lty=2)

## Area under the curve (AUC): 0.880

Um modelo excelente tem AUC próximo de 1, o que significa que tem uma boa medida de separabilidade. Um modelo pobre tem um AUC próximo a 0, o que significa que ele tem a pior medida de separabilidade. Na verdade, significa que está retribuindo o resultado. Ele está prevendo 0s como 1s e 1s como 0s. E quando AUC é 0,5, significa que o modelo não tem capacidade de separação de classes de qualquer espécie.