class: center, middle, inverse, title-slide # Introdução aos Modelos Lineares ## com códigos em R ###
### Maio de 2022 --- # Agenda .pull-left[ - O que é e quando usar - Parâmetro vs estimador - Teste de Hipóteses e valor-p - Interpretação dos parâmetros - Desempenho: EQM, EPR, AUC, Confusion Matrix - Outliers - Regressão Linear Múltipla - Preditores Categóricos - Transformações Não Lineares dos Preditores - Interações - Multicolinearidade - Fazendo Predições - Regressão Logística ] .pull-right[ #### Tópicos para próximos passos - Limitações da Regressão Linear - Sobreajuste (overfitting) - Regularização - LASSO e Seleção de Preditores - Validação Cruzada - Frameworks de Machine Learning ] --- # Ciência de dados <img src="static/img/ciclo-ciencia-de-dados.png" style = "display: block; margin-left: auto; margin-right: auto;" width = 70%> --- # Referências .pull-left[ <a href = "https://static1.squarespace.com/static/5ff2adbe3fe4fe33db902812/t/6062a083acbfe82c7195b27d/1617076404560/ISLR%2BSeventh%2BPrinting.pdf"> <img src="static/img/islr.png" style=" display: block; margin-left: auto; margin-right: auto;"></img> </a> ] .pull-right[ <a href = "https://web.stanford.edu/~hastie/Papers/ESLII.pdf"> <img src="static/img/esl.jpg" width = 44% style=" display: block; margin-left: auto; margin-right: auto;"></img> </a> ] --- # Referências .pull-left[ <a href = "https://r4ds.had.co.nz/"> <img src="static/img/r4ds.png" style=" display: block; margin-left: auto; margin-right: auto;"></img> </a> ] .pull-right[ <a href = "https://www.tmwr.org/"> <img src="static/img/tidymodels.png" width = 55% style=" display: block; margin-left: auto; margin-right: auto;"></img> </a> ] --- ## Referências - [Aprendizagem de Máquinas: Uma Abordagem Estatística (Rafael Izbicki e Thiago Mendonça, 2020)](http://www.rizbicki.ufscar.br/AME.pdf) - [Introduction to Statistical Learning (Hastie, et al)](https://hastie.su.domains/ISLR2/ISLRv2_website.pdf) - [Ciência de Dados: Fundamentos e Aplicações](https://curso-r.github.io/main-regressao-linear/referencias/Ci%C3%AAncia%20de%20Dados.%20Fundamentos%20e%20Aplica%C3%A7%C3%B5es.%20Vers%C3%A3o%20parcial%20preliminar.%20maio%20Pedro%20A.%20Morettin%20Julio%20M.%20Singer.pdf) --- class: middle, center, inverse # Introdução --- # Motivação Somos consultores e fomos contratados para dar conselhos para uma empresa aumentar as suas vendas. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-2-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Jornal tem mais retorno do que as demais mídias? Quantas vendas terão se eu investir X em jornais? --- # Motivação Somos consultores e fomos contratados para dar conselhos para uma empresa aumentar as suas vendas. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-3-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Jornal tem mais retorno do que as demais mídias? Quantas vendas terão se eu investir X em jornais? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-4-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-5-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-6-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-7-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-8-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Motivação - outro exemplo Somos da área de inadimplência e precisamos agir para assessorar clientes em situação iminente de atraso. Obtivemos o seguinte banco de dados <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-9-1.png" style="display: block; margin: auto;" /> * PERGUNTA: Qual tipo de contrato é o que me traz mais risco? --- # Modo - Regressão e Classificação Existem dois principais tipos de problemas em modelagem estatística: .pull-left[ ## Regressão __Y__ é uma variável contínua. - Volume de vendas - Peso - Temperatura - Valor de Ações ] .pull-right[ ## Classificação __Y__ é uma variável categórica. - Fraude/Não Fraude - Pegou em dia/Não pagou - Cancelou assinatura/Não cancelou - Gato/Cachorro/Cavalo/Outro ] --- # Exemplo de reta de regressão <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-11-1.png" style="display: block; margin: auto;" /> --- # Exemplos de regressão logística <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-13-1.png" style="display: block; margin: auto;" /> --- # Definições e Nomenclaturas ### A tabela por trás (do excel, do sql, etc.) <table> <thead> <tr> <th style="text-align:left;"> midia </th> <th style="text-align:right;"> investimento </th> <th style="text-align:right;"> vendas </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> TV </td> <td style="text-align:right;"> 220.3 </td> <td style="text-align:right;"> 24.7 </td> </tr> <tr> <td style="text-align:left;"> newspaper </td> <td style="text-align:right;"> 25.6 </td> <td style="text-align:right;"> 5.3 </td> </tr> <tr> <td style="text-align:left;"> newspaper </td> <td style="text-align:right;"> 38.7 </td> <td style="text-align:right;"> 18.3 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 42.3 </td> <td style="text-align:right;"> 25.4 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 43.9 </td> <td style="text-align:right;"> 22.3 </td> </tr> <tr> <td style="text-align:left;"> TV </td> <td style="text-align:right;"> 139.5 </td> <td style="text-align:right;"> 10.3 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 11.0 </td> <td style="text-align:right;"> 7.2 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 1.6 </td> <td style="text-align:right;"> 6.9 </td> </tr> </tbody> </table> --- # Definições e Nomenclaturas * `\(X_1\)`, `\(X_2\)`, ..., `\(X_p\)`: variáveis explicativas (ou variáveis independentes ou *features* ou preditores). - `\(\boldsymbol{X} = {X_1, X_2, \dots, X_p}\)`: conjunto de todas as *features*. * __Y__: variável resposta (ou variável dependente ou *target*). * __Ŷ__: valor **esperado** (ou predição ou estimado ou *fitted*). * `\(f(X)\)` também é conhecida também como "Modelo" ou "Hipótese". ## No exemplo: - `\(X_1\)`: `midia` - indicadador de se a propaganda é para jornal, rádio, ou TV. - `\(X_2\)`: `investimento` - valor do orçamento * __Y__: `vendas` - qtd vendida --- # Definições e Nomenclaturas ### **Observado** *versus* **Esperado** - __Y__ é um valor **observado** (ou verdade ou *truth*) - __Ŷ__ é um valor **esperado** (ou predição ou estimado ou *fitted*). - __Y__ - __Ŷ__ é o resíduo (ou erro) Por definição, `\(\hat{Y} = f(x)\)` que é o valor que a função `\(f\)` retorna. <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-15-1.png" width="750" style="display: block; margin: auto;" /> --- # Definições e Nomenclaturas ### A tabela por trás depois das predições <table> <thead> <tr> <th style="text-align:left;"> midia </th> <th style="text-align:right;"> investimento </th> <th style="text-align:right;"> vendas </th> <th style="text-align:right;"> regressao_linear </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> TV </td> <td style="text-align:right;"> 220.3 </td> <td style="text-align:right;"> 24.7 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 17.8 </td> </tr> <tr> <td style="text-align:left;"> newspaper </td> <td style="text-align:right;"> 25.6 </td> <td style="text-align:right;"> 5.3 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 13.8 </td> </tr> <tr> <td style="text-align:left;"> newspaper </td> <td style="text-align:right;"> 38.7 </td> <td style="text-align:right;"> 18.3 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 14.4 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 42.3 </td> <td style="text-align:right;"> 25.4 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 15.0 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 43.9 </td> <td style="text-align:right;"> 22.3 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 15.1 </td> </tr> <tr> <td style="text-align:left;"> TV </td> <td style="text-align:right;"> 139.5 </td> <td style="text-align:right;"> 10.3 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 13.6 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 11.0 </td> <td style="text-align:right;"> 7.2 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 13.4 </td> </tr> <tr> <td style="text-align:left;"> radio </td> <td style="text-align:right;"> 1.6 </td> <td style="text-align:right;"> 6.9 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 12.9 </td> </tr> </tbody> </table> --- # Outro Exemplo: Classificação ### A tabela por trás (do excel, do sql, etc.) <table> <thead> <tr> <th style="text-align:left;"> tipo_de_contrato </th> <th style="text-align:right;"> valor_da_parcela </th> <th style="text-align:right;"> atrasou </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> padrao </td> <td style="text-align:right;"> 2692 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1245 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> price </td> <td style="text-align:right;"> 2369 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1571 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> padrao </td> <td style="text-align:right;"> 2349 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1652 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> price </td> <td style="text-align:right;"> 2840 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 924 </td> <td style="text-align:right;"> 0 </td> </tr> </tbody> </table> --- # Outro Exemplo: Classificação * `\(X_1\)`, `\(X_2\)`, ..., `\(X_p\)`: variáveis explicativas (ou variáveis independentes ou *features* ou preditores). - `\(\boldsymbol{X} = {X_1, X_2, \dots, X_p}\)`: conjunto de todas as *features*. * __Y__: variável resposta (ou variável dependente ou *target*). * __Ŷ__: valor **esperado** (ou predição ou score ou *fitted*). * `\(f(X)\)` também é conhecida também como "Modelo" ou "Hipótese". ## No exemplo: - `\(X_1\)`: `tipo_de_contrato` - flags de se o contrato é padrao, price, ou revol. - `\(X_2\)`: `valor_da_parcela` - Valor da parcela do financiamento. * __Y__: `atrasou` - indicador de atraso maior que 30 dias na parcela. --- # Outro Exemplo: Classificação ### **Observado** *versus* **Esperado** - __Y__ é um valor **observado** (ou rótulo ou target ou verdade ou *truth*) - __Ŷ__ é um valor **esperado** (ou score ou probabilidade predita). - __log(Ŷ)__ ou __log(1-Ŷ)__ é o resíduo (ou erro) Por definição, `\(\hat{Y} = f(x)\)` que é o valor que a função `\(f\)` retorna. <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-18-1.png" width="750" style="display: block; margin: auto;" /> --- # Outro Exemplo: Classificação ### A tabela por trás depois das predições <table> <thead> <tr> <th style="text-align:left;"> tipo_de_contrato </th> <th style="text-align:right;"> valor_da_parcela </th> <th style="text-align:right;"> atrasou </th> <th style="text-align:right;"> regressao_logistica </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> padrao </td> <td style="text-align:right;"> 2692 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.98 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1245 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.26 </td> </tr> <tr> <td style="text-align:left;"> price </td> <td style="text-align:right;"> 2369 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.98 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1571 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.71 </td> </tr> <tr> <td style="text-align:left;"> padrao </td> <td style="text-align:right;"> 2349 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.88 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 1652 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.80 </td> </tr> <tr> <td style="text-align:left;"> price </td> <td style="text-align:right;"> 2840 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 1.00 </td> </tr> <tr> <td style="text-align:left;"> revol </td> <td style="text-align:right;"> 924 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;font-weight: bold;color: purple !important;"> 0.05 </td> </tr> </tbody> </table> --- # Por que ajustar uma f? * Predição * Inferência ## Predição Em muitas situações X está disponível facilmente mas, Y não é fácil de descobrir. (Ou mesmo não é possível descobrí-lo). Queremos que `\(\hat{Y} = \hat{f}(X)\)` seja uma boa estimativa (preveja bem o futuro). Neste caso não estamos interessados em como é a estrutura `\(\hat{f}\)` desde que ela apresente predições boas para `\(Y\)`. Por exemplo: * Meu cliente vai atrasar a fatura no mês que vem? --- # Por que ajustar uma f? * Predição * Inferência ## Inferência Em inferência estamos mais interessados em entender a relação entre as variáveis explciativas `\(X\)` e a variável resposta `\(Y\)`. Por exemplo: * A droga é eficaz para o tratamento da doença X? * **Quanto que é** o impacto nas vendas para cada real investido em TV? Neste material focaremos em **inferência**. --- # Por que ajustar uma f? <img src="static/img/usos_do_ml.png" style="display: block; margin-left: auto; margin-right: auto;" width=80%></img> --- class: letra ## O que é e quando usar .pull-left[ ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ### Exemplo: $$ dist = \beta_0 + \beta_1speed $$ ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-20-1.png" style="display: block; margin: auto;" /> ] .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 61 (Simple Linear Regression). ] --- ## O que é e quando usar .pull-left[ ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ### Exemplo: $$ dist = \beta_0 + \beta_1speed $$ ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-21-1.png" style="display: block; margin: auto;" /> ] .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 61 (Simple Linear Regression). ] --- ## O que é e quando usar .pull-left[ ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ### Exemplo: $$ dist = \beta_0 + \beta_1speed $$ ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-22-1.png" style="display: block; margin: auto;" /> ] --- ## O que é e quando usar .pull-left[ ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ] .pull-right[ ] ```r # ajuste de uma regressão linear simples no R *melhor_reta <- lm(dist ~ speed, data = cars) melhor_reta ``` ``` ## ## Call: ## lm(formula = dist ~ speed, data = cars) ## ## Coefficients: ## (Intercept) speed ## -17.579 3.932 ``` --- ## Métricas - "Melhor reta" segundo o quê? Queremos a reta que **erre menos**. Exemplo de medida de erro: **R**oot **M**ean **S**quared **E**rror. $$ RMSE = \sqrt{\frac{1}{N}\sum(y_i - \hat{y_i})^2} $$ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-24-1.png" style="display: block; margin: auto;" /> --- ## Métricas - "Melhor reta" segundo o quê? Queremos a reta que **erre menos**. Exemplo de medida de erro: **R**oot **M**ean **S**quared **E**rror. $$ RMSE = \sqrt{\frac{1}{N}\sum(y_i - (\hat{\beta_0} + \hat{\beta_1}x))^2} $$ Ou seja, nosso **objetivo** é ## Encontrar `\(\hat{\beta}_0\)` e `\(\hat{\beta}_1\)` que nos retorne o ~menor~ RMSE. --- ## Qual o valor ótimo para `\(\beta_0\)` e `\(\beta_1\)`? No nosso exemplo, a nossa **HIPÓTESE** é de que $$ dist = \beta_0 + \beta_1speed $$ Então podemos escrever o Erro Quadrático Médio como $$ EQM = \frac{1}{N}\sum(y_i - \hat{y_i})^2 = \frac{1}{N}\sum(y_i - \color{red}{(\hat{\beta}_0 + \hat{\beta}_1speed)})^2 $$ Com ajuda do Cálculo é possível mostrar que os valores ótimos para `\(\beta_0\)` e `\(\beta_1\)` são `\(\hat{\beta}_1 = \frac{\sum(x_i - \bar{x})(y_i - \bar{y})}{\sum(x_i - \bar{x})^2}\)` `\(\hat{\beta}_0 = \bar{y} - \hat{\beta}_1\bar{x}\)` .letrinha[ Já que vieram do EQM, eles são chamados de **Estimadores de Mínimos Quadrados**. ```r # lembrete: exercício 2 do script! ``` ] --- class: letra ## Depois de estimar... $$ \hat{y} = \hat{\beta}_0 + \hat{\beta}_1x $$ ### Exemplo: $$ \hat{dist} = \hat{\beta}_0 + \hat{\beta}_1speed $$ Colocamos um `\(\hat{}\)` em cima dos termos para representar "estimativas". Ou seja, `\(\hat{y}_i\)` é uma estimativa de `\(y_i\)`. .letrinha[ No nosso exemplo, - `\(\hat{\beta}_0\)` é uma estimativa de `\(\beta_0\)` e vale `-17.579`. - `\(\hat{\beta}_1\)` é uma estimativa de `\(\beta_1\)` e vale `3.932`. - `\(\hat{dist}\)` é uma estimativa de `\(dist\)` e vale `-17.579 + 3.932 x speed`. ```r # Exercício: se speed for 15 m/h, quanto que # seria a distância dist esperada? ``` ] --- class: letra ## Curiosidade - Método numérico Podemos encontrar a reta que **erre menos** por meio de algoritmos numéricos. Exemplo: Modelo de regressão linear `\(f(x) = \beta_0 + \beta_1 x\)`. <img src="static/img/0_D7zG46WrdKx54pbU.gif" style="position: fixed; width: 60%; "> .footnote[ Fonte: [https://alykhantejani.github.io/images/gradient_descent_line_graph.gif](https://alykhantejani.github.io/images/gradient_descent_line_graph.gif) ] --- ## Métricas - (Spoiler de Regressão Logística) Na regressão logística a estratégia é a mesma. Queremos a curva que **erre menos**. Exemplo: Modelo de regressão logística `\(f(x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x)}}\)`. .pull-left[ <img src="static/img/gif_reg_logistica_otimizacao.gif" style="position: fixed; width: 35%; "> ] .pull-right[ Medida de Erro da Logística: `$$D = \frac{-1}{N}\sum[y_i \log\hat{y_i} + (1 - y_i )\log(1 - \hat{y_i})]$$` Em que `$$\hat{y}_i = f(x_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_i)}}$$` ] --- ## Teste de Hipóteses e valor-p Exemplo: relação entre População Urbana e Assassinatos. .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-27-1.png" style="display: block; margin: auto;" /> Modelo proposto: `$$y = \beta_0 + \beta_1 x$$` ] .pull-right-letrinha[ Hipótese do pesquisador: > "Assassinatos não estão relacionados com a proporção de população urbana de uma cidade." Tradução da hipótese em termos matemáticos: $$ H_0: \beta_1 = 0 \space\space\space\space\space vs \space\space\space\space H_a: \beta_1 \neq 0 $$ Se a hipótese for verdade, então o `\(\beta_1\)` deveria ser zero. Porém, os dados disseram que `\(\hat{\beta}_1 = 0.02\)`. #### 0.02 é diferente de 0.00? ] --- class: letrinha ## 0.02 é diferente de 0.00? Saída do R .letrinha[ ``` ## ## Call: ## lm(formula = Murder ~ UrbanPop, data = USArrests) ## ## Residuals: ## Min 1Q Median 3Q Max ## -6.537 -3.736 -0.779 3.332 9.728 ## ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 6.41594 2.90669 2.207 0.0321 * *## UrbanPop 0.02093 0.04333 0.483 0.6312 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## Residual standard error: 4.39 on 48 degrees of freedom ## Multiple R-squared: 0.00484, Adjusted R-squared: -0.01589 ## F-statistic: 0.2335 on 1 and 48 DF, p-value: 0.6312 ``` ] --- class: letra ## 0.02 é diferente de 0.00? Conceito importante: Os estimadores ( `\(\hat{\beta}_0\)` e `\(\hat{\beta}_1\)` no nosso caso) têm distribuições de probabilidade. ### Simulação de 1000 retas (ajustadas com dados diferentes). ![distrib_params](static/img/combined_gif.gif) --- ## 0.02 é diferente de 0.00? Conceito importante: Os estimadores ( `\(\hat{\beta}_0\)` e `\(\hat{\beta}_1\)` no nosso caso) têm distribuições de probabilidade. ### A Teoria Assintótica nos fornece o seguinte resultado: .pull-left[ `\(t = \frac{\hat{\beta_1} - \beta_1}{\hat{\sigma}_{\beta_1}} \overset{\text{a}}{\sim} t(N - 2)\)` #### Em que `\(\hat{\sigma}_{\beta_1} = \sqrt{\frac{EQM}{\sum(x_i - \bar{x})^2}}\)` Usamos essas distribuições assintóticas para testar as hipóteses. ] .pull-right[ <div style="width:200px; height:100px"> <img src="static/img/dnorm_params.png"> </div> ] --- ## 0.02 é diferente de 0.00? Conceito importante: Os estimadores ( `\(\hat{\beta}_0\)` e `\(\hat{\beta}_1\)` no nosso caso) têm distribuições de probabilidade. ### A Teoria Assintótica nos fornece o seguinte resultado: .pull-left[ `\(t = \frac{\hat{\beta_1} - \beta_1}{\hat{\sigma}_{\beta_1}} \overset{\text{a}}{\sim} t(N - 2)\)` #### Em que `\(\hat{\sigma}_{\beta_1} = \sqrt{\frac{EQM}{\sum(x_i - \bar{x})^2}}\)` Usamos essas distribuições assintóticas para testar as hipóteses. ] .pull-right[ No nosso exemplo, a hipótese é `\(H_0: \beta_1 = 0\)`, então `$$t = \frac{0.02 - 0}{0.04} = 0.48$$` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-29-1.png" style="display: block; margin: auto;" /> ] --- ## 0.02 é diferente de 0.00? .letrinha[ Então agora podemos tomar decisão! Se a estimativa cair muito distante da distribuição t da hipótese 0, decidimos por **rejeitá-la**. Caso contrário, decidimos por **aceitá-la** como verdade. ] ![testes_t_estrelas](static/img/testes_t_estrelas.png) .letrinha[ ``` ## NO R: ## Coefficients: ## Estimate Std. Error t value Pr(>|t|) ## (Intercept) 6.41594 2.90669 2.207 0.0321 * ## UrbanPop 0.02093 0.04333 0.483 0.6312 ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ``` ] --- ## Interpretação dos parâmetros .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-31-1.png" style="display: block; margin: auto;" /> $$ y = \color{darkgblue}{\beta_0} + \color{darkgreen}{\beta_1}x $$ ] .pull-right-letrinha[ ### Interpretações matemáticas `\(\color{darkgblue}{\beta_0}\)` é o lugar em que a reta cruza o eixo Y. `\(\color{darkgreen}{\beta_1}\)` é a derivada de Y em relação ao X. É quanto Y varia quando X varia em 1 unidade. ### Interpretações estatísticas `\(\color{darkgblue}{\beta_0}\)` é a distância percorrida esperada quando o carro está parado (X = 0). `\(\color{darkgreen}{\beta_1}\)` é o efeito médio na distância por variar 1 ml/h na velocidade do carro. ] --- ## Teste de Hipóteses e valor-p ### Exercício 3 do script: No R, use a função `summary(melhor_reta)` (ver slide 9) para decidir se `speed` está associado com `dist`. Descubra o valor-p associado. lembrete: o banco de dados se chama `cars`. ### Exercício 4 do script: Interprete o parâmetro `\(\beta_1\)`. --- ## Intervalo de confiança para `\(\beta_1\)` #### Intervalo de 95% `$$[\hat{\beta} - 1,96 * \hat{\sigma}_{\beta_1}, \hat{\beta} + 1,96 * \hat{\sigma}_{\beta_1}]$$` #### Intervalo de 90% `$$[\hat{\beta} - 1,64 * \hat{\sigma}_{\beta_1}, \hat{\beta} + 1,64 * \hat{\sigma}_{\beta_1}]$$` #### Intervalo de 1 - `\(\alpha\)`% `$$[\hat{\beta}_1 - q_{\alpha} * \hat{\sigma}_{\beta_1}, \hat{\beta} + q_{\alpha} * \hat{\sigma}_{\beta_1}]$$` em que `\(q_\alpha\)` é o quantil da `\(Normal(0, 1)\)`. .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 66 (Assessing the Accuracy of the Model). ] --- ## O modelo está bom? ### EQM e EPR ERP significa *E*rro *P*adrão dos *R*esíduos e é definido como $$ EPR = \frac{\sum(y_i - \hat{y_i})^2}{N - 2} = \frac{SQR}{N - 2} $$ O **2** no denominador decorre do fato de termos **2 parâmetros** para estimar no modelo. - Se `\(y_i = \hat{y}_i \space\space\space \rightarrow \color{green}{EPR = 0 \downarrow}\)` - Se `\(y_i >> \hat{y}_i \rightarrow \color{red}{EPR = alto \uparrow}\)` - Se `\(y_i << \hat{y}_i \rightarrow \color{red}{EPR = alto \uparrow}\)` Problema: Como sabemos se o EPR é grande ou pequeno? .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 68 (Assessing the Accuracy of the Model). ] --- ## O modelo está bom? ### R-quadrado ( `\(R^2\)` ) $$ R^2 = 1 - \frac{\sum(y_i - \color{salmon}{\hat{y_i}})^2}{\sum(y_i - \color{royalblue}{\bar{y}})^2} = 1 - \frac{\color{salmon}{SQR}}{\color{royalblue}{SQT}} $$ .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-32-1.png" style="display: block; margin: auto;" /> ] .pull-right[ `\(R^2 \approx 1 \rightarrow \color{salmon}{SQR} << \color{royalblue}{SQT}\)`. `\(R^2 \approx 0 \rightarrow \color{salmon}{reta} \text{ em cima da } \color{royalblue}{reta}\)`. Problema do `\(R^2\)` é que ele sempre aumenta conforme novos preditores vão sendo incluídos. ] .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 68 (Assessing the Accuracy of the Model). ] --- ## O modelo está bom? ### R-quadrado ajustado $$ R^2 = 1 - \frac{\color{salmon}{SQR}}{\color{royalblue}{SQT}}\frac{\color{royalblue}{N-1}}{\color{salmon}{N-p}} $$ Em que `\(p\)` é o número de parâmetros do modelo (no caso da regressão linear simples, `\(p = 2\)`). ```r # lembrete: exercícios 5 e 6 do script! ``` --- ## Outliers <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-34-1.png" style="display: block; margin: auto;" /> Resíduo = `\(y_i - \hat{y}_i\)` (observado - esperado). .letrinha[ ```r # lembrete: faça o exercício 7 do script ``` Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 96 (Outliers). ] --- ## Outliers <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-36-1.png" style="display: block; margin: auto;" /> Resíduo = `\(y_i - \hat{y}_i\)` (observado - esperado). .letrinha[ ```r # lembrete: faça o exercício 7 do script ``` ] .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 96 (Outliers). ] --- ## Outliers <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-38-1.png" style="display: block; margin: auto;" /> .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 96 (Outliers). ] --- ## Outliers <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-39-1.png" style="display: block; margin: auto;" /> .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 96 (Outliers). ] --- ## Outliers ### Distância de Cook .pull-left-letrinha[ A distância de Cook mede o efeito de excluir uma dada observação. `$$D_i = \frac{\sum_{j=1}^{n}(\hat{y}_j - \hat{y}_{j(i)})^2}{p EQM}$$` ```r modelo <- lm(dist ~ speed, data = cars) plot(modelo) cooks.distance(modelo) ``` ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-41-1.png" style="display: block; margin: auto;" /> ] .footnote[ Ver [Distância de Cook na Wikipedia](https://pt.wikipedia.org/wiki/Dist%C3%A2ncia_de_Cook). ] --- ## Outliers ### Diagnóstico - Visualização univariada (histograma, boxplot); - Comparação do valor com o desvio padrão; - Distância de Cook ### Tratamentos - Transformações log(), etc; - Categorização; - Remover os valores extremos (raramente boa ideia); --- class: letra # Regressão Linear Múltipla .pull-left[ ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ### Exemplo: $$ dist = \beta_0 + \beta_1speed $$ ```r ### No R: lm(dist ~ speed, data=cars) ``` ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-43-1.png" style="display: block; margin: auto;" /> .letrinha[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 61 (Simple Linear Regression). ] ] --- class: letra # Regressão Linear Múltipla .pull-left[ ### Regressão Linear Múltipla $$ y = \beta_0 + \beta_1x_1 + \dots + \beta_px_p $$ ### Exemplo: $$ mpg = \beta_0 + \beta_1wt + \beta_2disp $$ ```r ### No R: lm(mpg ~ wt + disp, data=mtcars) ``` ] .pull-right[
] --- class: letra ## Regressão Linear Múltipla ### Regressão Linear Simples $$ y = \beta_0 + \beta_1x $$ ### Regressão Linear Múltipla $$ y = \beta_0 + \beta_1x_1 + \beta_2x_2 + \dots + \beta_px_p $$ ```r # ajuste de uma regressão linear múltipla no R *modelo_boston <- lm(medv ~ lstat + age, data = Boston) summary(modelo_boston) # Estimate Std.Error t value Pr(>|t|) # (Intercept) 33.22 0.73 45.4 < 2e-16 *** # lstat -1.03 0.04 -21.4 < 2e-16 *** # age 0.03 0.01 2.8 0.00491 ** ``` --- ## Preditores Categóricos ### Preditor com apenas 2 categorias Tamanho das nadadeiras de pinguins são diferentes entre os sexos? <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-47-1.png" style="display: block; margin: auto;" /> ```r summary(lm(flipper_length_mm ~ sex, data = penguins)) # Coefficients: # Estimate Std. Error t value Pr(>|t|) # (Intercept) 197.364 1.057 186.792 < 2e-16 *** # sexmale 7.142 1.488 4.801 2.39e-06 *** ``` --- ## Preditores Categóricos ### Preditor com apenas 2 categorias Tamanho das nadadeiras de pinguins são diferentes entre os sexos? <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-49-1.png" style="display: block; margin: auto;" /> $$ y_i = \beta_0 + \beta_1x_i \space\space\space\space\space\space \text{em que}\space\space\space\space\space\space x_i = \Bigg\\{\begin{array}{ll}1&\text{se a i-ésimo animal for }\texttt{female}\\\\ 0&\text{se a i-ésimo animal for } \texttt{male}\end{array} $$ .letrinha[ ```r # lembrete: exercícios 8, 9 e 10 do script! ``` Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 84 (Predictors with Only Two Levels). ] --- ## Preditores Categóricos ### Preditor com 3 ou mais categorias .pull-left-letrinha[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-51-1.png" style="display: block; margin: auto;" /> ```r summary(lm(flipper_length_mm ~ species, data = penguins)) # Estimate Std. Error t value Pr(>|t|) # (Intercept) 189.9536 0.5405 351.454 < 2e-16 *** # speciesChinstrap 5.8699 0.9699 6.052 3.79e-09 *** # speciesGentoo 27.2333 0.8067 33.760 < 2e-16 *** ``` ] .pull-right[ Modelo `$$y_i = \beta_0 + \beta_1x_{1i} + \beta_2x_{2i}$$` Em que `\(x_{1i} = \Bigg \{ \begin{array}{ll} 1 & \text{se for }\texttt{Chinstrap}\\0&\text{caso contrário}\end{array}\)` `\(x_{2i} = \Bigg \{ \begin{array}{ll} 1 & \text{se for }\texttt{Gentoo}\\0&\text{caso contrário}\end{array}\)` ] --- ## Preditores Categóricos ### Preditor com 3 ou mais categorias "One hot enconding" ou "Dummies" ou "Indicadores". <table> <thead> <tr> <th style="text-align:left;"> species </th> <th style="text-align:right;"> (Intercept) </th> <th style="text-align:right;"> speciesChinstrap </th> <th style="text-align:right;"> speciesGentoo </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> Adelie </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Chinstrap </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Gentoo </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> Adelie </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Gentoo </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 1 </td> </tr> <tr> <td style="text-align:left;"> Adelie </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Adelie </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Chinstrap </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 1 </td> <td style="text-align:right;"> 0 </td> </tr> </tbody> </table> --- ## Preditores Categóricos ### Preditor com 3 ou mais categorias Interpretação dos parâmetros: `\(y_{i} = \left\{ \begin{array}{ll} \beta_0 & \text{se for }\texttt{Adelie}\\ \beta_0 + \beta_1&\text{se for } \texttt{Chinstrap}\\ \beta_0 + \beta_2&\text{se for } \texttt{Gentoo}\end{array}\right.\)` ```r # interprete cada um dos três parâmetros individualmente. # lembrete: exercício 11 do script! ``` --- ## Transformações Não Lineares dos Preditores ### Exemplo: log .pull-left[ Modelo real: `\(y = 10 + 0.5log(x)\)` ] .pull-right[ Modelo proposto: `\(\small y = \beta_0 + \beta_1log(x)\)` ] <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-56-1.png" style="display: block; margin: auto;" /> Outras transformações comuns: raíz quadrada, polinômios, Box-Cox, ... .letrinha[ ```r # lembrete: exercício 13 do script! ``` ] --- ## Transformações Não Lineares dos Preditores ### Exemplo: log .pull-left[ Modelo real: `\(y = 10 + 0.5log(x)\)` ] .pull-right[ Modelo proposto: `\(\small y = \beta_0 + \beta_1log(x)\)` ] <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-58-1.png" style="display: block; margin: auto;" /> Outras transformações comuns: raíz quadrada, polinômios, Box-Cox, ... ```r # lembrete: exercício 13 do script! ``` --- ## Transformações Não Lineares dos Preditores ### Gráfico de Resíduos <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-60-1.png" style="display: block; margin: auto;" /> --- ## Transformações Não Lineares dos Preditores ### Exemplo: Regressão Polinomial .pull-left-letrinha[ Modelo real: `\(y = 500 + 0.4(x-10)^3\)` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-61-1.png" style="display: block; margin: auto;" /> ] .pull-right-letrinha[ Modelo proposto: `\(y = \beta_0 + \beta_1x + \beta_2x^2 + \beta_3x^3\)` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-62-1.png" style="display: block; margin: auto;" /> ] .letrinha[ ```r # lembrete: exercício 14 do script! ``` ] --- ## Transformações Não Lineares dos Preditores ### Exemplo: Regressão Polinomial .pull-left-letrinha[ Modelo real: `\(y = 500 + 0.4(x-10)^3\)` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-64-1.png" style="display: block; margin: auto;" /> ] .pull-right-letrinha[ Modelo proposto: `\(y = \beta_0 + \beta_1x + \beta_2x^2 + \beta_3x^3\)` <table class="table" style="font-size: 16px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:right;"> y </th> <th style="text-align:right;"> x </th> <th style="text-align:right;"> x2 </th> <th style="text-align:right;"> x3 </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;"> 456.5 </td> <td style="text-align:right;"> 5.3 </td> <td style="text-align:right;"> 28.2 </td> <td style="text-align:right;"> 149.7 </td> </tr> <tr> <td style="text-align:right;"> 492.5 </td> <td style="text-align:right;"> 7.4 </td> <td style="text-align:right;"> 55.4 </td> <td style="text-align:right;"> 412.2 </td> </tr> <tr> <td style="text-align:right;"> 548.4 </td> <td style="text-align:right;"> 11.5 </td> <td style="text-align:right;"> 131.3 </td> <td style="text-align:right;"> 1503.9 </td> </tr> <tr> <td style="text-align:right;"> 758.7 </td> <td style="text-align:right;"> 18.2 </td> <td style="text-align:right;"> 329.9 </td> <td style="text-align:right;"> 5993.0 </td> </tr> <tr> <td style="text-align:right;"> 444.7 </td> <td style="text-align:right;"> 4.0 </td> <td style="text-align:right;"> 16.3 </td> <td style="text-align:right;"> 65.6 </td> </tr> <tr> <td style="text-align:right;"> 748.3 </td> <td style="text-align:right;"> 18.0 </td> <td style="text-align:right;"> 322.8 </td> <td style="text-align:right;"> 5800.8 </td> </tr> <tr> <td style="text-align:right;"> 820.5 </td> <td style="text-align:right;"> 18.9 </td> <td style="text-align:right;"> 357.0 </td> <td style="text-align:right;"> 6744.3 </td> </tr> </tbody> </table> ] .letrinha[ ```r # lembrete: exercício 14 do script! ``` ] --- ## Transformações Não Lineares dos Preditores ### Gráfico de Resíduos <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-67-1.png" style="display: block; margin: auto;" /> --- ## Interações Interação entre duas variáveis explicativas: `Species` e `Sepal.Length` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-68-1.png" height="330" style="display: block; margin: auto;" /> --- ## Interações Modelo proposto (Matemático): Seja `y = Sepal.Width` e `x = Sepal.Length`, `$$\small \begin{array}{l} y = \beta_0 + \beta_1x\end{array}$$` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-69-1.png" height="260" style="display: block; margin: auto;" /> Modelo proposto (em R): `Sepal.Width ~ Sepal.Length` ```r # lembrete: exercícios 14 ao 17 do script! ``` --- ## Interações Modelo proposto (Matemático): Seja `y = Sepal.Width` e `x = Sepal.Length`, `$$\small \begin{array}{l} y = \beta_0 + \beta_1x + \beta_2I_{versicolor} + \beta_3I_{virginica}\end{array}$$` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-71-1.png" height="260" style="display: block; margin: auto;" /> Modelo proposto (em R): `Sepal.Width ~ Sepal.Length + Species` ```r # lembrete: exercícios 14 ao 17 do script! ``` --- ## Interações Modelo proposto (Matemático): Seja `y = Sepal.Width` e `x = Sepal.Length`, `$$\small \begin{array}{l} y = \beta_0 + \beta_1x + \beta_2I_{versicolor} + \beta_3I_{virginica} + \beta_4\color{red}{xI_{versicolor}} + \beta_5\color{red}{xI_{virginica}}\end{array}$$` <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-73-1.png" height="260" style="display: block; margin: auto;" /> Modelo proposto (em R): `Sepal.Width ~ Sepal.Length * Species` ```r # lembrete: exercícios 14 ao 17 do script! ``` --- ## Heterocedasticidade <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-75-1.png" style="display: block; margin: auto;" /> --- ## Heterocedasticidade <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-76-1.png" style="display: block; margin: auto;" /> --- ## Heterocedasticidade <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-77-1.png" style="display: block; margin: auto;" /> --- ## Heterocedasticidade ### Problema - O estimador `\(\hat{\sigma}_{\beta_1} = \sqrt{\frac{EQM}{\sum(x_i - \bar{x})^2}}\)` deixa de ter as melhores propriedades. Poderíamos ter conclusões estranhas para `\(\beta_1\)`. ### Diagnóstico - Visualização dos resíduos; - Testes formais (Breuch-Pagan, White, etc) ### Tratamentos - Transformações na variável resposta. log(y), sqrt(y), 1/y, etc; - Mínimos Quadrados Ponderados/Generalizados --- ## Multicolinearidade .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-78-1.png" style="display: block; margin: auto;" /> ] .pull-right[ Modelo 1: sem colineares <table class="table" style="font-size: 13px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> <th style="text-align:left;"> std.error </th> <th style="text-align:right;"> statistic </th> <th style="text-align:right;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> -173.41 </td> <td style="text-align:left;"> <span style=" color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;text-align: r;">43.83</span> </td> <td style="text-align:right;"> -3.96 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Limit </td> <td style="text-align:right;"> 0.17 </td> <td style="text-align:left;"> <span style=" color: white !important;padding-right: 4px; padding-left: 4px; background-color: darkred !important;text-align: r;">0.01</span> </td> <td style="text-align:right;"> 34.50 </td> <td style="text-align:right;"> 0 </td> </tr> <tr> <td style="text-align:left;"> Age </td> <td style="text-align:right;"> -2.29 </td> <td style="text-align:left;"> <span style=" color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;text-align: r;">0.67</span> </td> <td style="text-align:right;"> -3.41 </td> <td style="text-align:right;"> 0 </td> </tr> </tbody> </table> Modelo 2: com colineares <table class="table" style="font-size: 13px; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="text-align:left;"> term </th> <th style="text-align:right;"> estimate </th> <th style="text-align:left;"> std.error </th> <th style="text-align:right;"> statistic </th> <th style="text-align:right;"> p.value </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;"> (Intercept) </td> <td style="text-align:right;"> -377.54 </td> <td style="text-align:left;"> <span style=" color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;text-align: r;">45.25</span> </td> <td style="text-align:right;"> -8.34 </td> <td style="text-align:right;"> 0.00 </td> </tr> <tr> <td style="text-align:left;"> Limit </td> <td style="text-align:right;"> 0.02 </td> <td style="text-align:left;"> <span style=" color: white !important;padding-right: 4px; padding-left: 4px; background-color: darkred !important;text-align: r;">0.06</span> </td> <td style="text-align:right;"> 0.38 </td> <td style="text-align:right;"> 0.70 </td> </tr> <tr> <td style="text-align:left;"> Rating </td> <td style="text-align:right;"> 2.20 </td> <td style="text-align:left;"> <span style=" color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;text-align: r;">0.95</span> </td> <td style="text-align:right;"> 2.31 </td> <td style="text-align:right;"> 0.02 </td> </tr> </tbody> </table> ] Problema: Instabilidade numérica, desvios padrão inflados e interpretação comprometida. Soluções: eliminar uma das variáveis muito correlacionadas ou Consultar o VIF (Variance Inflation Factor) --- ## Multicolinearidade ### VIF (Variance Inflation Factor) Detecta preditores que são combinações lineares de outros preditores. **Procedimento:** Para cada preditor `\(X_j\)`, 1) Ajusta regressão linear com as demais: `lm(X_j ~ X_1 + ... + X_p)`. 2) Calcula-se o R-quadrado dessa regressão e aplica a fórmula abaixo `$$\small VIF(\hat{\beta}_j) = \frac{1}{1 - R^2_{X_j|X_{-j}}}$$` 3) Remova o preditor se VIF maior que 5 (regra de bolso). ```r # lembrete: exercícios 18 do script! ``` .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 101. ] --- class: middle, center, inverse # Regressão Logística --- # Regressão Logística .pull-left[ ### Para `\(Y \in \{0, 1\}\)` (binário) $$ log\left\(\frac{p}{1-p}\right\) = \beta_0 + \beta_1x $$ Ou... $$ p = \frac{1}{1 + e^{-(\beta_0 + \beta_1x)}} $$ ```r ### No R: glm(spam ~ exclamacoes, data=dt_spam, family = "binomial") ``` ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-83-1.png" width="400" style="display: block; margin: auto;" /> .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 131 (Logistic Regression). ] ] --- class: letra # Regressão Logística <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-84-1.png" style="display: block; margin: auto;" /> --- # Regressão Logística
--- # Regressão Logística - Custo A **Métrica** que a regressão logística usa de **Função de Custo** chama-se *deviance* (ou *log-loss* ou *Binary Cross-Entropy*): `$$D = \frac{-1}{N}\sum[y_i \log\hat{y_i} + (1 - y_i )\log(1 - \hat{y_i})]$$` Para cada linha da base de dados seria assim... .pull-left[ `$$D_i = \begin{cases} \\ -\log(\hat{y}_i) & \text{quando} \space y_i = 1 \\\\\\ -\log(1-\hat{y}_i) & \text{quando} \space y_i = 0 \\ \!\end{cases}$$` ] .pull-rigth[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-86-1.png" height="280" style="display: block; margin: auto;" /> ] --- # Regressão Logística - Custo Na regressão logística a estratégia é a mesma. Queremos a curva que **erre menos**. Exemplo: Modelo de regressão logística `\(f(x) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x)}}\)`. .pull-left[ <img src="static/img/gif_reg_logistica_otimizacao.gif" style="position: fixed; width: 35%; "> ] .pull-right[ Medida de Erro da Logística: `$$D = \frac{-1}{N}\sum[y_i \log\hat{y_i} + (1 - y_i )\log(1 - \hat{y_i})]$$` Em que `$$\hat{y}_i = f(x_i) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_i)}}$$` ] --- ## Regressão Logística - Interpretação Os coeficientes da regressão logística representam mudanças percentuais nas **chances.** Exemplos: <br/> Spam: `\(\log\Bigg(\frac{p(\text{11 exc})}{1 - p(\text{11 exc})}\Bigg) - \log\Bigg(\frac{p(\text{10 exc})}{1 - p(\text{10 exc})}\Bigg) = \beta_1\)` <br/> Inadimplência: `\(\log\Bigg(\frac{p(\text{empregado})}{1 - p(\text{empregado})}\Bigg) - \log\Bigg(\frac{p(\text{desempregado})}{1 - p(\text{desempregado})}\Bigg) = \beta_1\)` --- ## Regressão Logística - Interpretação Os coeficientes da regressão logística representam mudanças percentuais nas **chances.** Exemplos: <br/> Spam: `\(\frac{p(\text{11 exc})}{1 - p(\text{11 exc})} = \frac{p(\text{10 exc})}{1 - p(\text{10 exc})} * e^{\beta_1}\)` <br/> Inadimplência: `\(\frac{p(\text{empregado})}{1 - p(\text{empregado})} = \frac{p(\text{desempregado})}{1 - p(\text{desempregado})} * e^{\beta_1}\)` --- ## Regressão Logística - Interpretação .letrinha[ ```r modelo <- glm(spam ~ pts_exclamacao, data = email_spam, family = binomial()) summary(modelo) ``` ``` ## ## Call: ## glm(formula = spam ~ pts_exclamacao, family = binomial(), data = email_spam) ## ## Deviance Residuals: ## Min 1Q Median 3Q Max ## -2.57362 -0.35481 0.06569 0.33189 2.42856 ## ## Coefficients: ## Estimate Std. Error z value Pr(>|z|) ## (Intercept) -5.758236 0.381050 -15.11 <2e-16 *** ## pts_exclamacao 0.040325 0.002567 15.71 <2e-16 *** ## --- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 ## ## (Dispersion parameter for binomial family taken to be 1) ## ## Null deviance: 1385.00 on 999 degrees of freedom ## Residual deviance: 574.33 on 998 degrees of freedom ## AIC: 578.33 ## ## Number of Fisher Scoring iterations: 6 ``` ] --- ## Regressão Logística - Interpretação `$$\log\Bigg(\frac{p(\text{11 exc})}{1 - p(\text{11 exc})}\Bigg) - \log\Bigg(\frac{p(\text{10 exc})}{1 - p(\text{10 exc})}\Bigg) = 0.040325$$` ou `$$\log\Bigg(\frac{\frac{p(\text{11 exc})}{1 - p(\text{11 exc})}}{\frac{p(\text{10 exc})}{1 - p(\text{10 exc})}}\Bigg) = 0.040325$$` ou... --- ## Regressão Logística - Interpretação `$$\frac{p(\text{11 exc})}{1 - p(\text{11 exc})} = \frac{p(\text{10 exc})}{1 - p(\text{10 exc})} * e^{0.040325}$$` ou `$$\frac{p(\text{11 exc})}{1 - p(\text{11 exc})} = \frac{p(\text{10 exc})}{1 - p(\text{10 exc})} * 1.04$$` Para cada exclamação a mais no e-mail, a chance de ser spam aumenta em 4%. --- ## Regressão Logística - Interpretação ```r gtsummary::tbl_regression(modelo) ```
Characteristic
log(OR)
1
95% CI
1
p-value
pts_exclamacao
0.04
0.04, 0.05
<0.001
1
OR = Odds Ratio, CI = Confidence Interval
```r gtsummary::tbl_regression(modelo, exponentiate = TRUE) ```
Characteristic
OR
1
95% CI
1
p-value
pts_exclamacao
1.04
1.04, 1.05
<0.001
1
OR = Odds Ratio, CI = Confidence Interval
--- ## Regressão Logística - Interpretação ```r gtsummary::tbl_regression(churn) ```
Characteristic
log(OR)
1
95% CI
1
p-value
tempo_de_relacionamento
-7.0
-12, -3.0
0.003
idade
-5.2
-9.5, -2.0
0.005
1
OR = Odds Ratio, CI = Confidence Interval
```r gtsummary::tbl_regression(churn, exponentiate = TRUE) ```
Characteristic
OR
1
95% CI
1
p-value
tempo_de_relacionamento
0.00
0.00, 0.05
0.003
idade
0.01
0.00, 0.14
0.005
1
OR = Odds Ratio, CI = Confidence Interval
--- # Regressão Logística - Predições O "produto final" será um vetor de probabilidades estimadas. .pull-left[ <table> <thead> <tr> <th style="text-align:right;background-color: white !important;text-align: center;"> pts excl </th> <th style="text-align:left;background-color: white !important;text-align: center;"> classe observada </th> <th style="text-align:right;background-color: white !important;text-align: center;"> prob </th> <th style="text-align:left;background-color: white !important;text-align: center;"> classe predita </th> </tr> </thead> <tbody> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 167 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 0.79 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Spam </td> </tr> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 129 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 0.45 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Não Spam </td> </tr> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 299 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 1.00 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Spam </td> </tr> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 270 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 1.00 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Spam </td> </tr> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 187 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 0.89 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Spam </td> </tr> <tr> <td style="text-align:right;background-color: white !important;text-align: center;"> 85 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> 0.12 </td> <td style="text-align:left;background-color: white !important;text-align: center;font-weight: bold;color: purple !important;"> Não Spam </td> </tr> </tbody> </table> ] .pull-right[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-95-1.png" style="display: block; margin: auto;" /> ] --- # Matriz de Confusão .pull-left[ <table class="table table-bordered" style="font-size: 20px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Neg </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Pos </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Neg </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> TN </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> FN </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Pos </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> FP </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> TP </td> </tr> </tbody> </table> <br/> <table class="table table-bordered" style="font-size: 20px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 50%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 410 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 73 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 52 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 465 </td> </tr> </tbody> </table> ] .pull-right[ $$ \begin{array}{lcc} \mbox{accuracy} & = & \frac{TP + TN}{TP + TN + FP + FN}\\\\ & & \\\\ \mbox{precision} & = & \frac{TP}{TP + FP}\\\\ & & \\\\ \mbox{recall/TPR} & = & \frac{TP}{TP + FN} \\\\ & & \\\\ \mbox{F1 score} & =& \frac{2}{1/\mbox{precision} + 1/\mbox{recall}}\\\\ & & \\\\ \mbox{FPR} & = & \frac{FP}{FP + TN} \end{array} $$ ] --- # Nota de Corte (Threshold) .pull-left[ <table class="table table-bordered" style="font-size: 16px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 10%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 267 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 8 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 195 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 530 </td> </tr> </tbody> </table> <table class="table table-bordered" style="font-size: 16px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 25%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 332 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 28 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 130 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 510 </td> </tr> </tbody> </table> <table class="table table-bordered" style="font-size: 16px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 50%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 410 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 73 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 52 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 465 </td> </tr> </tbody> </table> ] .pull-right[ <table class="table table-bordered" style="font-size: 16px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 75%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 443 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 112 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 19 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 426 </td> </tr> </tbody> </table> <table class="table table-bordered" style="font-size: 16px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: red !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="1"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">p > 90%</div></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; color: black !important;padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Não Spam </th> <th style="text-align:right;background-color: white !important;text-align: center;"> Spam </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Não Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 456 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 171 </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Spam </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 3in; "> 6 </td> <td style="text-align:right;background-color: white !important;text-align: center;width: 2in; "> 367 </td> </tr> </tbody> </table> ] --- # Curva ROC .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-101-1.png" style="display: block; margin: auto;" /> [An introduction to ROC analysis](https://people.inf.elte.hu/kiss/11dwhdm/roc.pdf) ] .pull-right[ <br/> <table class="table table-bordered" style="font-size: 20px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Neg </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Pos </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Neg </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> TN </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> FN </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Pos </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> FP </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> TP </td> </tr> </tbody> </table> $$ \begin{array}{lcc} \mbox{TPR} & = & \frac{TP}{TP + FN} \\\\ & & \\\\ \mbox{FPR} & = & \frac{FP}{FP + TN} \end{array} $$ ] --- # Curva ROC - Métrica AUC .pull-left[ <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-103-1.png" style="display: block; margin: auto;" /> [An introduction to ROC analysis](https://people.inf.elte.hu/kiss/11dwhdm/roc.pdf) ] .pull-right[ <br/> <table class="table table-bordered" style="font-size: 20px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Neg </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Pos </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Neg </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> TN </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> FN </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> Pos </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> FP </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> TP </td> </tr> </tbody> </table> $$ \mbox{AUC} = \mbox{Area Under The ROC Curve} $$ ] **PS:** AUC varia de 0.5 a 1.0. O que significa se AUC for zero? --- # Curva ROC - Playground <a href = "http://arogozhnikov.github.io/2015/10/05/roc-curve.html"> <img src="static/img/roc_curve.gif" style=" display: block; margin-left: auto; margin-right: auto;"></img> </a> --- # Múltiplas Notas de Corte .pull-left[ Risco por Segmentação <table class="table table-bordered" style="font-size: 20px; width: auto !important; margin-left: auto; margin-right: auto;"> <thead> <tr> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> <th style="border-bottom:hidden;padding-bottom:0; padding-left:3px;padding-right:3px;text-align: center; padding-right: 4px; padding-left: 4px; background-color: white !important;" colspan="2"><div style="border-bottom: 1px solid #ddd; padding-bottom: 5px; ">Observado</div></th> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> <th style="empty-cells: hide;border-bottom:hidden;" colspan="1"></th> </tr> <tr> <th style="text-align:left;background-color: white !important;text-align: center;"> Predito </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Neg </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Pos </th> <th style="text-align:left;background-color: white !important;text-align: center;"> N </th> <th style="text-align:left;background-color: white !important;text-align: center;"> Risco </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> A (até 0,19) </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> 90 </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> 11 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 101 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 11% </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> B (até 0,44) </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> 60 </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> 40 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 100 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 40% </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> C (até 0,62) </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> 39 </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> 60 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 99 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 60% </td> </tr> <tr> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; font-weight: bold;"> D (0,62 ou +) </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 3in; "> 20 </td> <td style="text-align:left;background-color: white !important;text-align: center;width: 2in; "> 80 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 100 </td> <td style="text-align:left;background-color: white !important;text-align: center;"> 80% </td> </tr> </tbody> </table> ] .pull-right-letrinha[ Usamos o `score` como preferirmos ```r dados %>% mutate( segmento = case_when( score < 0.19 ~ "A", score < 0.44 ~ "B", score < 0.62 ~ "C", score >= 0.62 ~ "D" ) ) ``` ] <img src="02-intro-regressao-linear_files/figure-html/unnamed-chunk-107-1.png" width="800" style="display: block; margin: auto;" /> --- class: middle, center, inverse # Tópicos para próximos passos --- ## (Opcional) Abordagem Probabilística Do ponto de vista probabilístico, modela-se o problema como uma amostra de N indivíduos, todos independentes entre si e com distribuição Normal. $$ Y_i|x_i \sim N(\mu_i, \sigma^2), \space i = 1, \dots, N $$ E então, supõem que a média de `\(Y\)` dado o valor de `\(x\)` seja linear: $$ \mu = E[Y|x] = \beta_0 + \beta_1x $$ Assim, gostaríamos de achar `\(\beta_0\)` e `\(\beta_1\)` que fizessem dessa amostra a mais verossímil possível. Daí entra o conceito de verossimilhança, que é a probabilidade conjunta dos dados acontecerem: $$ P(Y_1, \dots, Y_N|x) \overset{\text{indep}}{=} P(Y_1|x_1)P(Y_2|x_2)\dots P(Y_N|x_N) $$ continua... --- ## (Opcional) Abordagem Probabilística Se tirarmos o `\(logarítmo\)` dessa probabilidade conjunta, teremos: $$ logP(Y_1, \dots, Y_N|x) \overset{\text{indep}}{=} logP(Y_i|x_1) + log P(Y_2|x_2) +\dots +logP(Y_N|x_N) $$ Que podemos escrever de forma mais sussinta usando um somatório: `$$\ell = logP(Y_1, \dots, Y_N|x) = \sum_{i = 1}^{N}logP(Y_i|x_i)$$` Essa expressão que chamamos de `\(\ell\)` é conhecida como log-verossimilhança (log-likelihood no inglês). continua... --- ## (Opcional) Abordagem Probabilística Já que assumimos que `\(Y_i|x_i\)` segue uma distribuição `\(N(\beta_0 + \beta_1x_i, \sigma^2)\)`, temos que: $$ \ell = \sum_{i = 1}^{N}log\left(\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left[-\frac{1}{2\sigma^2}(y_i - \mu_i)^2 \right] \right) $$ Que depois de simplificar (e deixando as constantes de fora), fica `$$\ell = -\frac{1}{N}\sum(y_i - \mu_i)^2 = -\frac{1}{N}\sum(y_i - \color{red}{(\beta_0 + \beta_1speed)})^2 = -EQM$$` Ou seja, maximizar a verossimilhança é equivalente a minimizar o EQM como vínhamos fazendo. --- ## Questões importantes Questões que usualmente estamos interessados quando ajustamos uma regressão linear. - Pelo menos um dos preditores `\(X1, X2,\dots,X_p\)` é útil para prever/explicar? - Todos os preditores são úteis ou apenas um subconjunto deles que é? - O quão bem o modelo se ajusta aos dados? .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 75 (Some Important Questions). ] --- ## Sobreajuste (overfitting) Modelo real é de **grau 3** ![distrib_params](static/img/overfiting_sem_teste.gif) --- ## Sobreajuste (overfitting) Modelo real é de **grau 3** ![distrib_params](static/img/overfiting_com_teste.gif) --- ## Sobreajuste (overfitting) Modelo real é de **grau 3** ![scatter_eqm](static/img/overfiting_scatter_eqm.gif) .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 61 (Simple Linear Regression). ] --- ## Regularização Relembrando o nossa **função de custo** EQM. `$$EQM = \frac{1}{N}\sum(y_i - \hat{y_i})^2 = \frac{1}{N}\sum(y_i - \color{red}{(\hat{\beta}_0 + \hat{\beta}_1x_{1i} + \dots + \hat{\beta}_px_{pi})})^2$$` Regularizar é "não deixar os `\(\beta's\)` soltos demais". `$$EQM_{regularizado} = EQM + \color{red}{\lambda}\sum_{j = 1}^{p}|\beta_j|$$` Ou seja, **penalizamos** a função de custo se os `\(\beta's\)` forem muito grandes. .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 203 (Linear Model Selection and Regularization). ] --- ## LASSO e Seleção de Preditores Conforme aumentamos o `\(\color{red}{\lambda}\)`, forçamos os `\(\beta's\)` a serem cada vez menores. ![scatter_eqm](static/img/lasso_lambda.png) .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 219 (The LASSO). ] --- ## LASSO e Seleção de Preditores Conforme aumentamos o `\(\lambda\)`, forçamos os `\(\beta's\)` a serem cada vez menores. ![scatter_eqm](static/img/betas.png) .footnote[ Ver [ISL](https://www.ime.unicamp.br/~dias/Intoduction%20to%20Statistical%20Learning.pdf) página 219 (The LASSO). ] --- ## Validação Cruzada ``` ## # 5-fold cross-validation ## # A tibble: 5 × 6 ## splits id n_treino n_teste regressao eqm_teste ## <list> <chr> <dbl> <dbl> <list> <dbl> ## 1 <split [40/10]> Fold1 40 10 <lm> 17.2 ## 2 <split [40/10]> Fold2 40 10 <lm> 13.8 ## 3 <split [40/10]> Fold3 40 10 <lm> 12.4 ## 4 <split [40/10]> Fold4 40 10 <lm> 21.2 ## 5 <split [40/10]> Fold5 40 10 <lm> 9.13 ``` ``` ## [1] 14.73 ``` ERRO DE VALIDAÇÃO CRUZADA: `$$EQM_{cv} = \frac{1}{10}\sum_{i=1}^{10}EQM_{Fold_i} = 14,671$$` --- ## Validação Cruzada <table> <thead> <tr> <th style="text-align:left;"> fold </th> <th style="text-align:right;"> speed </th> <th style="text-align:right;"> dist </th> </tr> </thead> <tbody> <tr> <td style="text-align:left;background-color: #F8766D !important;"> fold 1 </td> <td style="text-align:right;background-color: #F8766D !important;"> 4 </td> <td style="text-align:right;background-color: #F8766D !important;"> 2 </td> </tr> <tr> <td style="text-align:left;background-color: #F8766D !important;"> fold 1 </td> <td style="text-align:right;background-color: #F8766D !important;"> 4 </td> <td style="text-align:right;background-color: #F8766D !important;"> 10 </td> </tr> <tr> <td style="text-align:left;background-color: #D39200 !important;"> fold 2 </td> <td style="text-align:right;background-color: #D39200 !important;"> 7 </td> <td style="text-align:right;background-color: #D39200 !important;"> 4 </td> </tr> <tr> <td style="text-align:left;background-color: #D39200 !important;"> fold 2 </td> <td style="text-align:right;background-color: #D39200 !important;"> 7 </td> <td style="text-align:right;background-color: #D39200 !important;"> 22 </td> </tr> <tr> <td style="text-align:left;background-color: #93AA00 !important;"> fold 3 </td> <td style="text-align:right;background-color: #93AA00 !important;"> 8 </td> <td style="text-align:right;background-color: #93AA00 !important;"> 16 </td> </tr> <tr> <td style="text-align:left;background-color: #93AA00 !important;"> fold 3 </td> <td style="text-align:right;background-color: #93AA00 !important;"> 9 </td> <td style="text-align:right;background-color: #93AA00 !important;"> 10 </td> </tr> <tr> <td style="text-align:left;background-color: #00BA38 !important;"> fold 4 </td> <td style="text-align:right;background-color: #00BA38 !important;"> 10 </td> <td style="text-align:right;background-color: #00BA38 !important;"> 18 </td> </tr> <tr> <td style="text-align:left;background-color: #00BA38 !important;"> fold 4 </td> <td style="text-align:right;background-color: #00BA38 !important;"> 10 </td> <td style="text-align:right;background-color: #00BA38 !important;"> 26 </td> </tr> <tr> <td style="text-align:left;background-color: #00C19F !important;"> fold 5 </td> <td style="text-align:right;background-color: #00C19F !important;"> 10 </td> <td style="text-align:right;background-color: #00C19F !important;"> 34 </td> </tr> <tr> <td style="text-align:left;background-color: #00C19F !important;"> fold 5 </td> <td style="text-align:right;background-color: #00C19F !important;"> 11 </td> <td style="text-align:right;background-color: #00C19F !important;"> 17 </td> </tr> </tbody> </table> --- ## Limitações da Regressão Linear - Variável resposta Não Normal - Variável resposta Positiva - Variável resposta com mais de duas categorias - Relação funcional não linear entre X e Y - Muitas variáveis disponíveis - Muitas interações para testar entre as preditoras