class: center, middle, inverse, title-slide .title[ #
] .subtitle[ ## Introdução à EstatÃstica usando R Por Haydée Svab ] .author[ ### 06/11/2022 ] --- layout: true <div class="my-footer"><span> <a href="https://www.linkedin.com/in/hsvab/">LinkdIn</a> | <a href="https://twitter.com/hsvab">Twitter</a> | <a href="https://www.instagram.com/haydeesvab/">Instagram</a> | <a href="https://www.facebook.com/haydee.svab/">Facebook</a> | <a href="https://github.com/hsvab">GitHub</a> <a href="#indice">[Voltar à agenda de hoje]</a> </span></div> --- class: center, middle ## Apresentações & Agenda --- class: split-two with-border .column.bg-main1[.content[ <BR><BR> - Cientista de Dados e Pesquisadora em Mobilidade Urbana e Cidades Inteligentes - CEO da ASK-AR Consultoria em análise de dados - Já trabalhei como consultora pra BID, Banco Mundial, IDEC, entre outros - Mestra em Engenharia e Planejamento de Transportes (Poli-USP) - Engenheira Civil (Poli-USP) - Email: <a href="mailto:hsvab@hsvab.eng.br">hsvab@hsvab.eng.br</a> ]] .column.bg-main2[.content[ <br> ## Haydée Svab <img src="img/foto-linkedin.jpeg" width="30%" /> ]] -- ## E vocês? --- name: indice # Agenda de hoje - [Atalhos](#atalhos), [pacotes](#pacotes) e [importação de dados](#importacao) - Intervalo dos dados: [mÃnimo e máximo](#intervalo) - Medidas de posição: [média](#media) e [mediana](#mediana) - [Medidas de dispersão](#dispersao): - [Absoluta: variância e desvio padrão](#absoluta) - Relativa: [coeficiente de variação](#cv) - Medida de associação: [correlação](#cor) - Identificando [outliers](#outlier) - [Frequências](#freq) e [Tabela de contingência](#contingencia) - [Histograma](#hist) e [Distribuições](#distr) - [Quarteto de Anscombe](#anscombe) --- class: center, middle ## Pré-requisitos --- class: # Pré-requisitos ## - `R` e `RStudio` instalados no seu notebook <img src="img/rlogos/rstudio-r.jpg" width="25%" style="display: block; margin: auto;" /> ## <center><b>OU</b></center> ## - `RStudio` Cloud <img src="img/rstudiocloud.PNG" width="30%" style="display: block; margin: auto;" /> Link do workshop: [https://bit.ly/coda2022-workshop-haydee](https://bit.ly/coda2022-workshop-haydee) Não esqueça de fazer uma cópia do projeto --- class: center, middle ## Atalhos, pacotes e importação de dados --- name: atalhos class: # Atalhos `CTRL + ENTER`: executa a linha selecionada no script `ALT` + **`-`** gera o operador **<-** `CTRL` + `SHIFT` + `M` gera o operador pipe **%>%** <center><img src="img/S5e27_T.V._typing.gif"></center> --- name: pacotes class: # Pacotes ### Instalar - Via CRAN: install.packages("nome-do-pacote"). ```r install.packages("tidyverse") install.packages("janitor") install.packages("inspectdf") install.packages("data.table") ``` ### Carregar ```r library(tidyverse) library(janitor) library(inspectdf) library(data.table) ``` ### Lembrete - Você só precisa instalar o pacote uma vez, mas precisa carregá-lo sempre que começar uma nova sessão --- name: importacao # Importação ## Base de dados: Trabalharemos com dados referentes à s eleições 2022. Dados obtidos a partir de API do TSE de 30/out/2022. Base preparada agregando patrimonio, despesas contratadas e votos computados à base de candidaturas, a patir do número sequencial do candidato (identificador). Para fins das nossas análises, foram excluÃdos registros com UF ZZ (exterior) e BR (para evitar multiplicidade de registros). ### Leitura de arquivos csv ```r eleicoes_2022 <- fread("data/eleicoes_2022.csv", sep = ";", dec = ",") %>% clean_names(case = "snake") ``` --- class: middle ## Intervalo dos dados Medidas de ordenação (posição relativa) --- name: intervalo # Intervalo dos dados ## valor mÃnimo: `min()` ## valor máximo: `max()` Qual a idade da pessoa mais jovem e da mais velha a se candidatar nas eleições de 2022? ```r # Idade mÃnima min(eleicoes_2022$nr_idade_data_posse) ``` ``` ## [1] 20 ``` ```r #Idade máxima max(eleicoes_2022$nr_idade_data_posse) ``` ``` ## [1] 92 ``` --- # Intervalo dos dados E se quisermos saber as idades mÃnima e máxima, por sexo, de candidatos(as) nas eleições de 2022? ```r eleicoes_2022 %>% group_by(ds_genero) %>% summarise( idade_minima = min(nr_idade_data_posse), idade_maxima = max(nr_idade_data_posse) ) ``` ``` ## # A tibble: 2 × 3 ## ds_genero idade_minima idade_maxima ## <chr> <int> <int> ## 1 FEMININO 20 89 ## 2 MASCULINO 21 92 ``` --- # Intervalo dos dados E se quisermos saber as quantidades mÃnima e máxima de votos, por sexo, de candidatos(as)a deputado(a) federal nas eleições de 2022? ```r eleicoes_2022 %>% filter(ds_cargo == "DEPUTADO FEDERAL") %>% group_by(ds_genero) %>% summarise( qtde_min_votos = min(votos_computados, na.rm = TRUE), qtde_max_votos = max(votos_computados, na.rm = TRUE) ) ``` ``` ## # A tibble: 2 × 3 ## ds_genero qtde_min_votos qtde_max_votos ## <chr> <int> <int> ## 1 FEMININO 0 946244 ## 2 MASCULINO 0 1492047 ``` --- class: middle ## Medidas de posição Medidas de concentração ou tendência central --- name: media # Medidas de posição ## média: `mean()` É definida somando-se todos os números do conjunto de dados e então dividindo o resultado pelo número de valores do conjunto. Definição formal: <img src="img/media.png" width="50%" style="display: block; margin: auto;" /> *Indicação: Indicada quando os dados têm distribuição normal e poucos valores discrepantes (outliers).* --- name: mediana # Medidas de posição ## mediana: `median()` É o **valor do meio** quando o conjunto de dados está ordenado do menor para o maior (se for um número par de dados, corresponde à média dos 2 elementos do meio), de forma a separar a amostra ou população em duas metades. <img src="img/mediana.png" width="30%" style="display: block; margin: auto;" /> *Indicação: Indicada quando a distribuição é distorcida em relação à normal ou quando a forte influência de outliers.* --- # Medidas de posição Exemplo: Cálculo da média e da mediana dos patrimonios declarados de candidatos(as) ```r patrimonio_cadidatura <- eleicoes_2022 %>% # retirando os NAs filter(!is.na(patrimonio)) %>% # selecioando só as variáveis de interesse para ficar mais leve e rápido select(sq_candidato, patrimonio, ds_cargo, ds_genero) %>% # no caso de presidente, há votos por UF e a informação de patrimônio se repete # com distinct tiramos essa repetição distinct() %>% # agrupando por cargo e sexo do(a) candidato(a) group_by(ds_cargo, ds_genero) %>% # calculando média e mediana summarise(patrimonio_media = mean(patrimonio), patrimonio_mediana = median(patrimonio) ) %>% # ordenando do maior para o menor valor de patrimônio arrange(-patrimonio_mediana) ``` --- # Medidas de posição Exemplo: Cálculo da média e da mediana dos patrimonios declarados de candidatos(as) ``` ## # A tibble: 12 × 4 ## # Groups: ds_cargo [6] ## ds_cargo ds_genero patrimonio_media patrimonio_mediana ## <chr> <chr> <dbl> <dbl> ## 1 PRESIDENTE MASCULINO 6283177. 3039762. ## 2 GOVERNADOR MASCULINO 11542755. 981234. ## 3 SENADOR MASCULINO 2922741. 911258. ## 4 PRESIDENTE FEMININO 903385. 640500 ## 5 SENADOR FEMININO 1268932. 491229. ## 6 DEPUTADO FEDERAL MASCULINO 1389690. 384298. ## 7 DEPUTADO DISTRITAL MASCULINO 785567. 329000 ## 8 DEPUTADO ESTADUAL MASCULINO 1000548. 282736 ## 9 GOVERNADOR FEMININO 525617. 257118. ## 10 DEPUTADO DISTRITAL FEMININO 544095. 256589. ## 11 DEPUTADO FEDERAL FEMININO 577480. 185000 ## 12 DEPUTADO ESTADUAL FEMININO 515300. 165564. ``` --- class: middle ## Medidas de dispersão --- name: dispersao class: center # Medidas de dispersão Olhar apenas as medidas de posição de uma variável **ignora** a sua variabilidade, o que pode revelar informações importantes. <img src="img/exemplo-dispersao.png" width="50%" style="display: block; margin: auto;" /> <small> *Histograma indicando a profundidade de covas para transplantes de mudas de laranja, antes e depois o treinamento sobre cultivo* </small> <small> Fonte: [DEST UFPR - Medidas de dispersão, forma e associação](https://www.youtube.com/watch?v=ZvUhRikhNEk&list=PLQcLb-PUD9WNZnVBYDKEonioyJw3nEaOM&index=10) </small> --- name: # Medidas de dispersão ### Absolutas - variância - desvio-padrão - amplitude (amplitude inter-quartil) ### Relativa - coeficiente de variação --- name: absoluta # Medidas de dispersão absolutas ## variância: `var()` Mostra o quão próximo / distante um conjunto de dados está de um valor central, neste caso, a média desses valores. ## desvio padrão: `sd()` Medida que expressa o grau de dispersão de um conjunto de dados (quanto mais próximo de 0, mais homogêneo é o conjunto de dados) em relação a uma medida de posição centra - por padrão essa medida é a média. *Observação: a vantagem do desvio padrão é que ele encontra-se na mesma unidade que a variável medida.* --- # Medidas de dispersão absolutas Exemplo: Cálculo de média, desvio padrão e variância das despesas contratadas, por UF, das candidaturas ao legislativo ```r resumo_estados <- eleicoes_2022 %>% # retirando os NAs e cargos executivos (presidente e governador) filter(!is.na(despesa_contratada), ds_cargo!="PRESIDENTE", ds_cargo!="GOVERNADOR") %>% select(sq_candidato, despesa_contratada, ds_cargo, sg_uf) %>% distinct() %>% # agrupando por estado group_by(sg_uf) %>% # dividindo por 1000 apenas para melhorar a escala mutate(despesa_contratada = despesa_contratada/1000) %>% # calculando média, desvio padrão e variância summarise(despesa_contratada_media = mean(despesa_contratada), despesa_contratada_desvio = sd(despesa_contratada), despesa_contratada_variancia = var(despesa_contratada)) %>% # ordenando da maior média da despesa contratada para a menor arrange(-despesa_contratada_media) ``` --- # Medidas de dispersão absolutas Exemplo: Cálculo de média, desvio padrão e variância das despesas contratadas, por UF, das candidaturas ao legislativo ``` ## # A tibble: 27 × 4 ## sg_uf despesa_contratada_media despesa_contratada_desvio despesa_contratada…¹ ## <chr> <dbl> <dbl> <dbl> ## 1 PI 329. 599. 358448. ## 2 MT 281. 478. 228065. ## 3 PE 276. 545. 297025. ## 4 AL 270. 567. 321035. ## 5 SP 249. 496. 245591. ## 6 BA 242. 526. 277054. ## 7 TO 235. 459. 211114. ## 8 SE 231. 490. 240497. ## 9 MA 226. 493. 243230. ## 10 RN 220. 482. 232540. ## # … with 17 more rows, and abbreviated variable name ## # ¹​despesa_contratada_variancia ``` --- class: middle ## Medidas de dispersão relativas --- name: cv # Medidas de dispersão relativas ## coeficiente de variação: `goeveg::cv()` O coeficiente de variação é Definido como a razão do desvio padrão pela média e é usado para expressar a variabilidade dos dados estatÃsticos excluindo a influência da ordem de grandeza da variável. Definição formal: <img src="img/cv.png" width="12%" style="display: block; margin: auto;" /> Exemplo: Cálculo do coeficiente de variação das despesas contratadas, por estado ```r resumo_estados <- resumo_estados %>% mutate(cv = despesa_contratada_desvio / despesa_contratada_media) ``` <small>Quanto menor for o valor do cv, mais homogêneos serão os dados.</small> --- # Medidas de dispersão relativas ## coeficiente de variação Exemplo: Cálculo do coeficiente de variação das despesas contratadas, por estado ``` ## # A tibble: 27 × 5 ## sg_uf despesa_contratada_media despesa_contratada_desvio despesa_cont…¹ cv ## <chr> <dbl> <dbl> <dbl> <dbl> ## 1 PI 329. 599. 358448. 1.82 ## 2 MT 281. 478. 228065. 1.70 ## 3 PE 276. 545. 297025. 1.98 ## 4 AL 270. 567. 321035. 2.10 ## 5 SP 249. 496. 245591. 1.99 ## 6 BA 242. 526. 277054. 2.17 ## 7 TO 235. 459. 211114. 1.96 ## 8 SE 231. 490. 240497. 2.12 ## 9 MA 226. 493. 243230. 2.18 ## 10 RN 220. 482. 232540. 2.19 ## # … with 17 more rows, and abbreviated variable name ## # ¹​despesa_contratada_variancia ``` --- class: middle ## Medidas de associação: correlação --- name: cor # Medidas de associação ## correlação A correlação trata da medida da direção e do grau com que duas variáveis se associam linearmente (em amostra ou em população). Definição formal do coeficiente de correlação de pearson: <img src="img/corr.png" width="40%" style="display: block; margin: auto;" /> <img src="img/coef-corr-pearson.png" width="95%" style="display: block; margin: auto;" /> --- # Medidas de associação ## correlação Exemplo: Cálculo do coeficiente de correlação de Pearson entre despesas contratadas e votos computados, para presidência ```r # selecionando apenas candidaturas à presidência cor_presidente <- eleicoes_2022 %>% filter(ds_cargo=="PRESIDENTE") # fazendo o teste de correlação de pearson cor_presidente <- cor.test( cor_presidente$despesa_contratada, cor_presidente$votos_computados, # tomando somente os pares de pontos em que as duas observações têm valores use="pairwise.complete.obs") # se quisermos somente o r cor_presidente$estimate ``` ``` ## cor ## 0.2674356 ``` --- # Medidas de associação ## correlação Exemplo: Cálculo do coeficiente de correlação de Pearson entre despesas contratadas e votos computados, para governos estaduais ```r # selecionando apenas candidaturas a governo de estado cor_gov <- eleicoes_2022 %>% filter(ds_cargo=="GOVERNADOR") # fazendo o teste de correlação de pearson cor_gov <- cor.test( cor_gov$despesa_contratada, cor_gov$votos_computados, # tomando somente os pares de pontos em que as duas observações têm valores use="pairwise.complete.obs") # se quisermos somente o r cor_gov$estimate ``` ``` ## cor ## 0.8454288 ``` --- # Medidas de associação ## correlações espúrias <img src="img/corr-espuria.png" width="83%" style="display: block; margin: auto;" /> Fonte: [Spurious correlations](https://www.tylervigen.com/spurious-correlations) -- <small>**Importante! Correlação é sinônimo de associação / dependência, mas não de causalidade.**</small> --- class: middle ## Outliers --- name: outlier # Outliers São dados que se diferenciam drasticamente de todos os outros e que podem causar anomalias nos resultados obtidos por meio de algoritmos e sistemas de análise (distorção na média, por exemplo). -- Há dois **tipos de outliers**: naturais e artificiais. Os outliers naturais representam as diferenças de dados a que todas as situações estão sujeitas, por exemplo uma idade mais avançada ao avaliar expetativa de vida. Já os artificiais podem decorrer de: erro de input, erro de amostragem, erro de medida, erro ao procesar dados e erro intencional. -- Há algumas **formas de lidar** com outliers: - excluir o valor - tratar separadamente - etc (transformar, clusterizar, ...) --- class: # Outliers É possÃvel reconhecer outliers graficamente através do diagrama de caixa (ou boxplot): <img src="img/boxplot.png" width="60%" style="display: block; margin: auto;" /> ```r outlier < 3/2*Q1 OU outlier > 3/2*Q3 ``` --- class: # Outliers Exemplo: Avaliar se existem outliers na variável idade dos(as) candidatos(as) -- ```r boxplot <- (eleicoes_2022$nr_idade_data_posse) boxplot ``` <img src="img/boxplot-idade.png" width="80%" style="display: block; margin: auto;" /> --- class: # Outliers Plotando os valores no boxplot ```r # cálculo do boxplot boxplot <- boxplot(eleicoes_2022$nr_idade_data_posse) # texto referente aos quartis text(1.3, boxplot$stats, boxplot$stats) # Cálculo do intervalo interquartil (IQR) IQR = boxplot$stats[4] - boxplot$stats[2] # Construção das flechinhas segments(0.5, c(boxplot$stats[2], boxplot$stats[4]), 0.7, c(boxplot$stats[2], boxplot$stats[4])) text(0.6, boxplot$stats[3], IQR) arrows(0.6, boxplot$stats[3]+1.5, 0.6, boxplot$stats[4]-1.5, 0.08) arrows(0.6, boxplot$stats[3]-1.5, 0.6, boxplot$stats[2]+1.5, 0.08) ``` --- class: # Outliers Plotando os valores no boxplot <img src="index_files/figure-html/unnamed-chunk-30-1.png" style="display: block; margin: auto;" /> --- class: center, middle ## Frequências --- name: freq # Frequências Uma primeira aproximação comum com algum conjunto dados é compreender a sua frequência, absoluta e relativa. Exemplo: Quantidade de candidaturas por sexo -- ```r eleicoes_2022 %>% tabyl(ds_genero) ``` ``` ## ds_genero n percent ## FEMININO 8960 0.3385604 ## MASCULINO 17505 0.6614396 ``` -- A mesma tabela de frequências, num formato melhor: ```r eleicoes_2022 %>% tabyl(ds_genero) %>% adorn_totals() %>% adorn_pct_formatting() ``` ``` ## ds_genero n percent ## FEMININO 8960 33.9% ## MASCULINO 17505 66.1% ## Total 26465 100.0% ``` --- name: contingencia # Tabela de contigência É usada para registrar observações de duas ou mais variáveis, em geral qualitativas. Exemplo: Quantidade de pessoas, por sexo e por resultado eleitoral (situacao) ```r # Valores absolutos eleicoes_2022 %>% tabyl(ds_genero, situacao) %>% adorn_totals(c("row", "col")) ``` ``` ## ds_genero 2 turno eleito não eleito suplente Total ## FEMININO 2 287 3455 5216 8960 ## MASCULINO 80 1366 6642 9417 17505 ## Total 82 1653 10097 14633 26465 ``` ```r # Valores relativos eleicoes_2022 %>% tabyl(ds_genero, situacao) %>% adorn_totals(c("row", "col")) %>% adorn_percentages("row") %>% adorn_pct_formatting() ``` ``` ## ds_genero 2 turno eleito não eleito suplente Total ## FEMININO 0.0% 3.2% 38.6% 58.2% 100.0% ## MASCULINO 0.5% 7.8% 37.9% 53.8% 100.0% ## Total 0.3% 6.2% 38.2% 55.3% 100.0% ``` --- name: hist # Histograma Trata-se de um gráfico de barras que mostra a distribuição das frequências. O eixo horizontal representa as classes e o eixo vertical representa as quantidades (frequência absoluta). **Por que fazer um histograma?** - Ajuda a ilustrar como uma determinada amostra de dados ou população está distribuÃda - É uma forma de resumir visualmente grandes conjuntos de dados (tabelas são mais difÃceis de ler) - Para comparar resultados (posso fazer distribuição de várias variáveis ou da mesma variável em momentos diferentes) --- # Histograma O que observar num histograma: - centralidade (maior concentraçao de observações) - amplitude (dá pistas de mÃnimo e máximo) - simetria <img src="img/hist-simetrias.png" width="100%" style="display: block; margin: auto;" /> *Dica: um histograma funciona melhor quando o tamanho de amostra for superior a 20 (se a amostra for muito pequena, cada barra no histograma pode não conter pontos de dados suficientes para demonstrar precisamente a distribuição)* --- # Histograma Exemplo: Distribuição de frequência (histograma) da idade na data da posse ```r hist(eleicoes_2022$nr_idade_data_posse, main = ("Histograma da Idade na Data de Posse"), xlab = ("Idade na data de posse"), ylab = ("Frequência")) ``` <img src="index_files/figure-html/unnamed-chunk-36-1.png" width="45%" style="display: block; margin: auto;" /> --- name: distr # Distribuições Uma distribuição estatÃstica, ou distribuição de probabilidade, descreve como os valores estão distribuÃdos. Observar e compreender as distribuições nos permite começar a buscar respostas apra perguntas como: - Os dados são todos iguais? - Em sendo diferentes, são muito diferentes uns dos outros? E de que modo são diferentes? - Existe alguma estrutura subjacente ou alguma tendência? - Existem alguns agrupamentos especiais? --- # Distribuições Existem muitos tipos de distribuições estatÃsticas, incluindo a **distribuição normal**, a mais fundamental e conhecida. <img src="img/normal.svg" width="60%" style="display: block; margin: auto;" /> --- # Distribuições ## Distribução Normal É definida por 2 parâmetros: média e desvio padrão. A área sob a curva representa 100% da probabilidade de ocorrência de um fenômeno. Isso quer dizer que a probabilidade de uma observação assumir um valor entre dois pontos quaisquer é igual à área compreendida entre esses dois pontos. <img src="img/normal.png" width="50%" style="display: block; margin: auto;" /> --- name: anscombe # Quarteto de Ascombe Considere eses quatro conjuntos de dados: <img src="img/anscombe1.png" width="90%" style="display: block; margin: auto;" /> --- # Quarteto de Ascombe São quatro conjuntos de dados que têm estatÃsticas descritivas quase idênticas (como a média e a variância): <img src="img/anscombe2.png" width="80%" style="display: block; margin: auto;" /> Fonte: [Wikipedia](https://pt.wikipedia.org/wiki/Quarteto_de_Anscombe) --- # Quarteto de Ascombe Mas quando analisamos além das estatÃsticas básicas, precebemos que os conjuntos variam bastante! <img src="img/anscombe3.svg" width="65%" style="display: block; margin: auto;" /> <small> **Tente sempre usar algum tipo de visualização (além das estatÃsticas básicas) ao analisar seus dados ;-)** </small> --- class: # Para aprender mais & Referências: - [EstatÃstica Descritiva para leigos - Escola de Dados](https://escoladedados.org/tutoriais/analise-com-estatistica-descritiva-para-leigos/) <br></br> - [EstatÃstica prática para cientistas de dados: 50 conceitos essenciais](https://www.amazon.com.br/EstatÃstica-Prática-Para-Cientistas-Dados/dp/855080603X) <br></br> - [Do You Understand the Variance In Your Data? - Harvard Business Review](https://hbr.org/2019/08/do-you-understand-the-variance-in-your-data) <br></br> - [Boxplot: um recurso gráfico para a análise e interpretação de dados quantitativos](https://www.robrac.org.br/seer/index.php/ROBRAC/article/download/1132/897/) <br></br> - [Livro `R` for Data Science](https://r4ds.had.co.nz) <br></br> - [Repositório RLadies São Paulo](https://github.com/rladies/meetup-presentations_sao-paulo) <br></br> --- class:center # Agradecimentos À Bea Milz À Nathalia Demétrio e ao Diego Rabatone Oliveira <img src="img/diego-rabatone.jpeg" width="15%" style="display: block; margin: auto;" /> CapÃtulo RLadies São Paulo <img src="img/rlogos/r-ladies-sp.png" width="15%" style="display: block; margin: auto;" /> Apresentação feita com [RMarkdown](https://rmarkdown.rstudio.com/) e [Xaringan](https://github.com/yihui/xaringan), <br> com o tema `metropolis` modificado por Bea Milz e Haydee Svab --- class: middle <center><img src="img/if_you_want_to_go_fast_go_alone.jpg" style="width: 50%"></center>