Regressão logística para prever probabilidades

Aprendizado Supervisionado em R: Regressão

Nina Zumel and John Mount

Win-Vector LLC

Prevendo probabilidades

  • Prever se um evento ocorre (sim/não): classificação
  • Prever a probabilidade de um evento ocorrer: regressão
  • Regressão linear: prevê valores em [$-\infty$, $\infty$]
  • Probabilidades: limitadas ao intervalo [0,1]
    • Por isso, chamaremos de não linear
Aprendizado Supervisionado em R: Regressão

Exemplo: prevendo Distrofia Muscular de Duchenne (DMD)

  • desfecho: has_dmd entradas: CK, H
Aprendizado Supervisionado em R: Regressão

Um modelo de regressão linear

model <- lm(has_dmd ~ CK + H, 
            data = train)

test$pred <- predict(
    model, 
    newdata = test
)

resultado: has_dmd $\in$ {0,1}

  • 0: FALSE
  • 1: TRUE

O modelo prevê valores fora do intervalo [0:1]

Aprendizado Supervisionado em R: Regressão

Regressão logística

$$ log(\frac{p}{1-p}) = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + ... $$

glm(formula, data, family = binomial)
  • Modelo linear generalizado
  • Supõe entradas aditivas, lineares no log-odds: $log( p/(1-p) )$
  • family: descreve a distribuição de erro do modelo
    • regressão logística: family = binomial
Aprendizado Supervisionado em R: Regressão

Modelo de DMD

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
  • resultado: duas classes, p.ex., $a$ e $b$
  • o modelo retorna $Prob(b)$
    • Recomendação: 0/1 ou FALSE/TRUE
Aprendizado Supervisionado em R: Regressão

Interpretando modelos de regressão logística

model
Call:  glm(formula = has_dmd ~ CK + H, family = binomial, data = train)

Coefficients:
(Intercept)           CK            H  
  -16.22046      0.07128      0.12552  

Degrees of Freedom: 86 Total (i.e. Null);  84 Residual
Null Deviance:       110.8 
Residual Deviance: 45.16     AIC: 51.16
Aprendizado Supervisionado em R: Regressão

Prevendo com um modelo glm()

predict(model, newdata, type = "response")
  • newdata: por padrão, dados de treino
  • Para obter probabilidades: use type = "response"
    • Por padrão: retorna log-odds
Aprendizado Supervisionado em R: Regressão

Modelo de DMD

model <- glm(has_dmd ~ CK + H, data = train, family = binomial)
test$pred <- predict(model, newdata = test, type = "response")

Aprendizado Supervisionado em R: Regressão

Avaliando um modelo logístico: pseudo-$R^2$

$$ R^2 = 1 - \frac{RSS}{SS_{Tot}} $$

$$ pseudo R^2 = 1 - \frac{deviance}{null.deviance} $$

  • Deviance: análogo à variância (RSS)
  • Null deviance: similar a $SS_{Tot}$
  • pseudo R^2: deviance explicada
Aprendizado Supervisionado em R: Regressão

Pseudo-$R^2$ nos dados de treino

Usando broom::glance()

glance(model) %>% 
  summarize(pR2 = 1 - deviance/null.deviance)
   pseudoR2
1 0.5922402

Usando sigr::wrapChiSqTest()

wrapChiSqTest(model)
"... pseudo-R2=0.59 ..."
Aprendizado Supervisionado em R: Regressão

Pseudo-$R^2$ nos dados de teste

# Dados de teste
test %>% 
  mutate(pred = predict(model, newdata = test, type = "response")) %>%
  wrapChiSqTest("pred", "has_dmd", TRUE)

Argumentos:

  • data frame
  • nome da coluna de predição
  • nome da coluna de desfecho
  • valor-alvo (evento de interesse)
Aprendizado Supervisionado em R: Regressão

O gráfico de ganho (Gain Curve)

GainCurvePlot(test, "pred","has_dmd", "DMD model on test")

Aprendizado Supervisionado em R: Regressão

Vamos praticar!

Aprendizado Supervisionado em R: Regressão

Preparing Video For Download...