alt text

GET00100 - Estatística I

Jony Arrais Pinto Junior

Análise Exploratória de Dados no R

Conteúdo

  • Pipe;
  • Transformação de dados (dplyr);
  • Análise exploratória de dados.

1 - Pipe (ctrl + shift + m)

Pipes são ferramentas extremamente poderosas para clarear (decodificar) uma sequência de múltiplas operações.

Podemos apontar o operador pipe como uma das grandes revoluções dos último tempos no R, pois torna a leitura de uma sequência de códigos muito mais lógica, fácil e compreensível.

O |> é um operador nativo do R, que encontraremos disponível a partir da versão 4.1.

Basicamente, o operador |> usa o resultado do seu lado esquerdo como primeiro argumento da função do lado direito. Só isso!!!

No código abaixo, para termos acesso ao |> vamos carregar o pacote tidyverse (que carrega diversos pacotes).

#Criando um vetor x
x = c(2, 5, 7, 1, 8, 3)

#Calculando a media de x com 2 casas decimais
x |> 
  mean() |> 
  round(digits = 2)
[1] 4.33

Com o código descrito acima, enviamos o objeto x como o primeiro argumento da função mean e, em seguida, enviamos o resultado da expressão mean(x) como o primeiro argumento da função round, que diferentemente da função mean, necessita de dois argumentos, o valor a ser arredondado e o número de casas decimais, no caso digits = 2. Vamos observar que não é necessário colocar os parênteses após o nome das funções quando a mesma precisar somente de um único argumento para ser executada.

Mas qual foi o ganho? Se escrevermos os comandos na forma usual temos:

#Calculando a media de x com 2 casas decimais na forma usual
round(x = mean(x),
      digits = 2)
[1] 4.33

Aparentemente, o ganho não foi grande. Agora pense que precisamos executar 10 funções aninhadas! O uso do |> vai permitir transformar um código confuso e difícil em algo simples e intuitivo.

Retiramos o exemplo abaixo do site curso-r, e ele se refere a seguinte situação problema: “vamos imaginar que precisamos escrever uma receita de um bolo usando o R, e cada passo da receita é uma função”:

#Receita do bolo
esfrie(asse(coloque(bata(acrescente(recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo"), "farinha", ate = "macio"), duracao = "3min"), lugar = "forma", tipo = "grande", untada = TRUE), duracao = "50min"), "geladeira", "20min")

Entenderam?????

|> no código:

#Receita do bolo com |>
recipiente(rep("farinha", 2), "água", "fermento", "leite", "óleo") |>
  acrescente("farinha", ate = "macio") |>
  bata(duracao = "3min") |>
  coloque(lugar = "forma", tipo = "grande", untada = T) |>
  asse(duracao = "50min") |>
  esfrie("geladeira", "20min")

Agora o código realmente parece uma receita de bolo, certo?

Já estão apaixonados pelo tidyverse?

Para ativar o atalho Ctrl + Shift + m no Windows ou Cmd + Shift + m no Mac, precisamos ativar esta opção. Vá em Tools > Global Options > Code e ative a caixa como especificado abaixo (é preciso ter uma versão igual ou superior a 4.1 do R):

2 - Dplyr

O pacote dplyr utiliza C e C++ por trás da maioria das funções, o que geralmente torna o código mais eficiente.

O dplyr é um poderoso pacote R para manipular, limpar e resumir dados não estruturados, aliando simplicidade e eficiência de uma forma elegante. Em suma, faz a exploração de dados e manipulação de dados de forma fácil e rápida no R.

As principais funções do dplyr são:

  • rename() - renomeia variáveis,
  • filter() - filtra linhas,
  • select() - seleciona colunas,
  • mutate() - cria/modifica colunas,
  • transmute() - cria/modifica colunas,
  • summarise() - sumariza a base.

Atividade: Agora tentem importar o arquivo BaseMunicipioMensal.csv e guardem em um objeto chamado crimes_mensal. 9999 é o código usado para indicar dado faltante e o enconding do arquivo é o latin1.

#Visualizando o objeto
glimpse(crimes_mensal)
Rows: 8,188
Columns: 59
$ fmun_cod                   <dbl> 3300100, 3300159, 3300209, 3300225, 3300233…
$ fmun                       <chr> "Angra dos Reis", "Aperibé", "Araruama", "A…
$ ano                        <dbl> 2014, 2014, 2014, 2014, 2014, 2014, 2014, 2…
$ mes                        <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ Trimestre                  <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1…
$ regiao                     <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1…
$ hom_doloso                 <dbl> 11, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ lesao_corp_morte           <dbl> NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ latrocinio                 <dbl> 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ hom_por_interv_policial    <dbl> 1, 0, NA, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, …
$ letalidade_violenta        <dbl> 12, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ tentat_hom                 <dbl> 2, 0, 6, 0, 0, 0, 3, 6, 7, 0, 0, 12, 5, 0, …
$ lesao_corp_dolosa          <dbl> 96, 0, 69, 0, 44, 32, 52, 62, 256, 7, 23, 1…
$ estupro                    <dbl> 7, 0, 7, 0, 6, 2, 5, 4, 11, 1, 2, 9, 2, 0, …
$ hom_culposo                <dbl> 4, 0, 1, 0, 0, 0, 0, 0, 2, 0, 0, 4, 1, 0, 0…
$ lesao_corp_culposa         <dbl> 37, 0, 45, 0, 26, 6, 7, 18, 45, 2, 6, 81, 2…
$ roubo_comercio             <dbl> 4, 0, 3, 0, 0, 0, 1, 9, 10, 0, 1, 8, 1, 0, …
$ roubo_residencia           <dbl> 0, 0, 2, 0, 0, 0, 0, 1, 2, 0, 0, 2, 1, 0, 0…
$ roubo_veiculo              <dbl> 8, 0, 9, 0, 2, 2, 1, 4, 73, 0, 0, 15, 0, 0,…
$ roubo_carga                <dbl> 0, 0, 0, 0, 0, 0, 1, 0, 23, 0, 0, 1, 1, 0, …
$ roubo_transeunte           <dbl> 5, 0, 6, 0, 5, 1, 2, 3, 173, 0, 0, 34, 1, 0…
$ roubo_em_coletivo          <dbl> 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 1, 0, 0, 0…
$ roubo_banco                <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_cx_eletronico        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_celular              <dbl> 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0…
$ roubo_conducao_saque       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ roubo_apos_saque           <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0…
$ roubo_bicicleta            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ outros_roubos              <dbl> 5, 0, 2, 0, 20, 6, 2, 1, 14, 2, 0, 118, 3, …
$ total_roubos               <dbl> 23, 0, 23, 0, 12, 6, 7, 18, 307, 2, 1, 103,…
$ furto_veiculos             <dbl> 18, 0, 16, 0, 9, 3, 5, 20, 27, 1, 0, 34, 4,…
$ furto_transeunte           <dbl> 3, 0, 2, 0, 9, 3, 0, 4, 18, 0, 0, 57, 0, 0,…
$ furto_coletivo             <dbl> 3, 0, 1, 0, 2, 0, 1, 0, 3, 1, 0, 6, 1, 1, 0…
$ furto_celular              <dbl> 11, 0, 10, 0, 7, 1, 5, 11, 10, 0, 1, 17, 1,…
$ furto_bicicleta            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ outros_furtos              <dbl> 98, 0, 76, 0, 74, 39, 27, 87, 112, 6, 20, 1…
$ total_furtos               <dbl> 134, 0, 105, 0, 117, 49, 38, 122, 170, 9, 2…
$ sequestro                  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ extorsao                   <dbl> 0, 0, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0…
$ sequestro_relampago        <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0…
$ estelionato                <dbl> 21, 0, 18, 0, 4, 8, 4, 5, 29, 3, 1, 27, 7, …
$ apreensao_drogas           <dbl> 35, 0, 13, 0, 16, 15, 12, 19, 35, 4, 9, 51,…
$ posse_drogas               <dbl> 18, 0, 9, 0, 6, 4, 7, 8, 2, 2, 8, 14, 2, 1,…
$ trafico_drogas             <dbl> 12, 0, 4, 0, 10, 10, 5, 10, 29, 2, 1, 34, 2…
$ apreensao_drogas_sem_autor <dbl> 5, 0, 1, 0, 2, 1, 1, 1, 4, 0, 0, 5, 1, 0, 0…
$ recuperacao_veiculos       <dbl> 9, 0, 4, 0, 2, 2, 2, 11, 91, 0, 0, 26, 0, 0…
$ apf                        <dbl> 28, 0, 34, 0, 26, 7, 19, 28, 64, 1, 3, 80, …
$ aaapai                     <dbl> 6, 0, 5, 0, 8, 1, 3, 1, 15, 0, 2, 28, 1, 0,…
$ cmp                        <dbl> 8, 0, 5, 0, 3, 1, 19, 25, 16, 3, 0, 8, 2, 0…
$ cmba                       <dbl> 0, 0, 0, 0, 2, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0…
$ ameaca                     <dbl> 98, 0, 91, 0, 46, 26, 56, 54, 231, 11, 27, …
$ pessoas_desaparecidas      <dbl> 13, 0, 10, 0, 0, 0, 0, 2, 22, 1, 0, 7, 2, 0…
$ encontro_cadaver           <dbl> 3, 0, 1, 0, 0, 0, 0, 1, 3, 0, 0, 3, 1, 0, 0…
$ encontro_ossada            <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ pol_militares_mortos_serv  <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ pol_civis_mortos_serv      <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
$ cvli                       <dbl> 11, 0, 2, 0, 2, 0, 1, 5, 29, 0, 0, 9, 2, 0,…
$ roubo_rua                  <dbl> 7, 0, 7, 0, 6, 1, 2, 3, 182, 0, 0, 35, 1, 0…
$ registro_ocorrencias       <dbl> 561, 0, 480, 0, 309, 176, 248, 430, 1367, 5…

2.1 - Função rename

Esta função renomeia nomes de colunas (variáveis).

#Carregando o pacote
library(dplyr)

#renomeando a variavel fmun por nome_municipio e guardando tudo no objeto crimes_mensal
crimes_mensal = crimes_mensal |>
  rename(nome_municipio = fmun)

2.2 - Função select

Esta função seleciona coluna (variáveis).

É possível fazer essa seleção utilizando nomes, índices, intervalos de variáveis ou utilizar as funções starts_with(x), ends_with, contains(x), matches(x), one_of(x) para selecionar as variáveis.

#Selecionando a variável nome_municipio e todas as variáveis entre hom_doloso e hom_culposo 
sub_base_crime1 = crimes_mensal |>
  select(nome_municipio,hom_doloso:hom_culposo)

sub_base_crime1
# A tibble: 8,188 × 10
   nome_municipio     hom_doloso lesao_corp_morte latrocinio hom_por_interv_pol…
   <chr>                   <dbl>            <dbl>      <dbl>               <dbl>
 1 Angra dos Reis             11               NA          0                   1
 2 Aperibé                     0                0         NA                   0
 3 Araruama                    2                0          0                  NA
 4 Areal                       0                0          0                   0
 5 Armação dos Búzios          2                0          0                   0
 6 Arraial do Cabo             0                0          0                   0
 7 Barra do Piraí              1                0          0                   0
 8 Barra Mansa                 5                0          0                   0
 9 Belford Roxo               29                0          0                   0
10 Bom Jardim                  0                0          0                   0
# … with 8,178 more rows, and 5 more variables: letalidade_violenta <dbl>,
#   tentat_hom <dbl>, lesao_corp_dolosa <dbl>, estupro <dbl>, hom_culposo <dbl>
#Selecionando a variável nome_municipio e todas as variáveis que comecem com hom
sub_base_crime2 = crimes_mensal |>
  select(nome_municipio, starts_with('hom'))

sub_base_crime2
# A tibble: 8,188 × 4
   nome_municipio     hom_doloso hom_por_interv_policial hom_culposo
   <chr>                   <dbl>                   <dbl>       <dbl>
 1 Angra dos Reis             11                       1           4
 2 Aperibé                     0                       0           0
 3 Araruama                    2                      NA           1
 4 Areal                       0                       0           0
 5 Armação dos Búzios          2                       0           0
 6 Arraial do Cabo             0                       0           0
 7 Barra do Piraí              1                       0           0
 8 Barra Mansa                 5                       0           0
 9 Belford Roxo               29                       0           2
10 Bom Jardim                  0                       0           0
# … with 8,178 more rows

2.3 - Função filter()

Essa função serve para filtrar linhas.

#Selecionando as variáveis nome_municipio, hom_doloso e regiao e em seguida filtrando somente os municípios da Grande Niterói
sub_base_crime3 = crimes_mensal |>
  select(nome_municipio, hom_doloso, regiao)  |>
  filter(regiao == 4)

sub_base_crime3
# A tibble: 267 × 3
   nome_municipio hom_doloso regiao
   <chr>               <dbl>  <dbl>
 1 Maricá                  6      4
 2 Niterói                 7      4
 3 São Gonçalo            29      4
 4 Maricá                  8      4
 5 Niterói                 9      4
 6 São Gonçalo            34      4
 7 Maricá                  4      4
 8 Niterói                 4      4
 9 São Gonçalo            36      4
10 Maricá                  8      4
# … with 257 more rows
#Selecionando as variáveis nome_municipio, hom_doloso, regiao e ano e em seguida filtrando a base para conter somente municípios da região de Grande Niterói com mais de 20 homicídios dolosos no ano de 2021
sub_base_crime4 = crimes_mensal |>
  select(nome_municipio, hom_doloso, regiao, ano, mes) |>
  filter(regiao == 4 & hom_doloso > 5 & ano == 2021)

sub_base_crime4
# A tibble: 12 × 5
   nome_municipio hom_doloso regiao   ano   mes
   <chr>               <dbl>  <dbl> <dbl> <dbl>
 1 Maricá                  6      4  2021     1
 2 Niterói                 6      4  2021     1
 3 São Gonçalo            35      4  2021     1
 4 São Gonçalo            15      4  2021     2
 5 Maricá                  6      4  2021     3
 6 Niterói                 6      4  2021     3
 7 São Gonçalo            20      4  2021     3
 8 Maricá                  6      4  2021     4
 9 Niterói                 6      4  2021     4
10 São Gonçalo            16      4  2021     4
11 Niterói                 7      4  2021     5
12 São Gonçalo            15      4  2021     5

2.4 - Função mutate

Função que permite criar/modificar variáveis.

#Selecionando as variáveis nome_municipio, hom_doloso, hom_culposo, roubo_transeunte, total_roubos e ano. Em seguida selecionando somente os dados de 2021 e criando na base as variáveis as variáveis homicidio e porc_roub_transeunte
sub_base_crime5 = crimes_mensal |>
  select(nome_municipio, hom_doloso, hom_culposo, roubo_transeunte, total_roubos, ano) |>
  filter(ano == 2021) |> 
  mutate(homicidio = hom_doloso + hom_culposo, 
         porc_roub_transeunte = (roubo_transeunte / total_roubos)*100)

sub_base_crime5
# A tibble: 460 × 8
   nome_municipio     hom_doloso hom_culposo roubo_transeunte total_roubos   ano
   <chr>                   <dbl>       <dbl>            <dbl>        <dbl> <dbl>
 1 Angra dos Reis              5           4                9           28  2021
 2 Aperibé                     0           0                0            0  2021
 3 Araruama                    4           1                6           30  2021
 4 Areal                       0           0                0            1  2021
 5 Armação dos Búzios          1           1                6           12  2021
 6 Arraial do Cabo             4           0                1            1  2021
 7 Barra do Piraí              3           0                0            2  2021
 8 Barra Mansa                 6           1                6           13  2021
 9 Belford Roxo               19           3              110          342  2021
10 Bom Jardim                  0           0                0            0  2021
# … with 450 more rows, and 2 more variables: homicidio <dbl>,
#   porc_roub_transeunte <dbl>

2.5 - Função transmute

Função que permite criar/modificar variáveis.

#Selecionando as variáveis nome_municipio, hom_doloso, hom_culposo, roubo_transeunte, total_roubos e ano. Em seguida selecionando somente os dados de 2021 e criando na base as variáveis as variáveis homicidio e porc_roub_transeunte
sub_base_crime6 = crimes_mensal |>
  select(nome_municipio, hom_doloso, hom_culposo, roubo_transeunte, total_roubos, ano) |>
  filter(ano == 2021) |> 
  transmute(homicidio = hom_doloso + hom_culposo, 
         porc_roub_transeunte = (roubo_transeunte / total_roubos)*100)

sub_base_crime6
# A tibble: 460 × 2
   homicidio porc_roub_transeunte
       <dbl>                <dbl>
 1         9                 32.1
 2         0                NaN  
 3         5                 20  
 4         0                  0  
 5         2                 50  
 6         4                100  
 7         3                  0  
 8         7                 46.2
 9        22                 32.2
10         0                NaN  
# … with 450 more rows

2.6 - Função summarise

Esta função cria resumos inteligentes da base. Ela aplica uma função às variáveis. Geralmente ela é utilizada em conjunto com a função group_by.

# Calculando o número de ocorrências de homicídio doloso e de estupros no ano de 2020 por município em cada trimestre
crime_trimestre = crimes_mensal |>
  filter(ano == 2020) |> 
  group_by(fmun_cod,regiao,Trimestre) |>
  summarise(soma_hom_doloso = sum(hom_doloso, na.rm = TRUE),
            soma_estupro = sum(estupro, na.rm = TRUE))
`summarise()` has grouped output by 'fmun_cod', 'regiao'. You can override
using the `.groups` argument.
# Visualizando o objeto
crime_trimestre
# A tibble: 368 × 5
# Groups:   fmun_cod, regiao [92]
   fmun_cod regiao Trimestre soma_hom_doloso soma_estupro
      <dbl>  <dbl>     <dbl>           <dbl>        <dbl>
 1  3300100      1         1              21           13
 2  3300100      1         2               8            9
 3  3300100      1         3              20           21
 4  3300100      1         4              18           21
 5  3300159      1         1               1            0
 6  3300159      1         2               1            0
 7  3300159      1         3               0            1
 8  3300159      1         4               0            0
 9  3300209      1         1              16           10
10  3300209      1         2               8            6
# … with 358 more rows
#Calculando, para todas as combinações de região e trimestre, o número de municípios, o número total de homicídios dolosos, o número médio de homicídios dolosos e o número máximo de estupros no ano de 2020.

crime_trimestre |>
  group_by(regiao, Trimestre) |>
  summarise(n = n(), 
            media_hom_doloso = mean(soma_hom_doloso, na.rm = TRUE),
            total_hom_doloso = sum(soma_hom_doloso, na.rm = TRUE),
            max_estupro = max(soma_estupro, na.rm = TRUE))
`summarise()` has grouped output by 'regiao'. You can override using the
`.groups` argument.
# A tibble: 16 × 6
# Groups:   regiao [4]
   regiao Trimestre     n media_hom_doloso total_hom_doloso max_estupro
    <dbl>     <dbl> <int>            <dbl>            <dbl>       <dbl>
 1      1         1    75             5.05              379          26
 2      1         2    75             3.92              294          22
 3      1         3    75             3.48              261          28
 4      1         4    75             4.01              301          27
 5      2         1    13            21.8               284          85
 6      2         2    13            18.5               241          48
 7      2         3    13            15.6               203         103
 8      2         4    13            18.2               237          96
 9      3         1     1           289                 289         361
10      3         2     1           234                 234         290
11      3         3     1           201                 201         380
12      3         4     1           233                 233         450
13      4         1     3            35.3               106          53
14      4         2     3            25                  75          31
15      4         3     3            30.7                92          56
16      4         4     3            38                 114          43

Desafio 1

  • Na base crimes_mensal, crie uma variável chamada porc_furto_veiculo que é dada pela razão das variáveis furto_veiculos e total_furtos. Apresente numa escala de 0 a 100.

  • Por região, apresente o número médio e o número mínimo de estelionatos observado no ano de 2021. Guarde esse resumo em um objeto chamado resumo_estelionato. Exporte o arquivo com extensão txt.

3 - Análise exploratória de dados (medidas resumos)

Com o intuito de identificar padrões nos dados coletados, iremos apresentar algumas medidas resumos.

3.1 - Tabela de distribuição de frequência

Considerando os dados presentes no R, podemos criar tabelas para uma ou mais variáveis usando o pacote expss.

#Ativando os pacotes
library(data.table)
library(expss)

#Tabela de distribuição de frequência para a variável hom_culposo em janeiro de 2021
crimes_mensal |>
  filter(ano == 2021 & mes == 1) |> 
  select(hom_culposo) |>
  fre()
select(filter(crimes_mensal, ano == 2021 & mes == 1), hom_culposo)  Count   Valid percent   Percent   Responses, %   Cumulative responses, % 
 0  49 53.3 53.3 53.3 53.3
 1  22 23.9 23.9 23.9 77.2
 2  5 5.4 5.4 5.4 82.6
 3  6 6.5 6.5 6.5 89.1
 4  4 4.3 4.3 4.3 93.5
 5  1 1.1 1.1 1.1 94.6
 7  1 1.1 1.1 1.1 95.7
 8  1 1.1 1.1 1.1 96.7
 13  1 1.1 1.1 1.1 97.8
 15  1 1.1 1.1 1.1 98.9
 61  1 1.1 1.1 1.1 100.0
 #Total  92 100 100 100
 <NA>  0 0.0

3.2 - Medidas de posição

Representantes numéricos para o conjunto de dados, as vezes considerando todos os dados disponíveis, as vezes parte dos dados disponíveis.

Média

É o ponto de equilíbrio do conjunto de dados. A média aritmética é dada por \[\bar{x} = \frac{1}{n}\sum_{i=1}^{n}x_i,\] em que \(x_1, \ldots, x_n\) são os valores observados.

Vantagem: é uma medida que leva em consideração todos os dados.

Desvantagem: é uma medida influenciada por valores discrepantes.

Mediana

É uma medida separatriz que divide o conjunto de dados ao meio. A mediana de um conjunto com \(n\) ímpar é dada por \[md = x_{\left( \frac{n+1}{2}\right)}\] e se \(n\) é par \[md = \frac{x_{\left(\frac{n}{2}\right)}+x_{\left(\frac{n}{2}+1\right)}}{2},\] em que \(x_{(i)}\) é a \(i\)-ésima estatística de ordem dos valores observados.

É uma medida que não é influenciada por valores discrepantes.

Moda

É o valor mais frequente no conjunto de dados. Das medidas de posição é a única que pode ser aplicada para dados qualitativos.

Quantis

Medidas separatrizes que dividem o conjunto de dados de diversas maneiras (quartis, decis, percentis).

3.3 - Medidas de dispersão

O resumo do conjunto de dados por uma única medida representativa de posição central esconde toda a informação sobre a heterogeneidade do conjunto de observações.

Variância

Mede a dispersão dos dados em relação a média. A variância amostral é dada por \[s^2 = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^2,\] em que \(x_1, \ldots, x_n\) são os valores observados.

\(s^2 \geq 0\) e trata-se de uma medida relativa de dispersão. Tem como principal problema o fato de ser fornecida em uma unidade de medida diferente do dado.

Desvio padrão

É uma função da variância, mantendo todas suas boas propriedades. Continua sendo uma medida de dispersão relativa dada por \[s = \sqrt{s^2},\] em que \(s^2\) é a variância amostral. É fornecido na mesma unidade de medida do dado.

Desvio absoluto mediano

Trata-se de uma medida de dispersão relativa dada por \[dam = \frac{\sum_{i=1}^{n}|x_i - md(x)|}{n},\] em que \(md(x)\) é a mediana do conjunto de valores.

Coeficiente de variação

Um questionamento razoável: as medidas anteriores são grandes ou pequenas? A resposta para esta pergunta vai depender da ordem de grandeza da variável em questão. O Coeficiente de Variaçao (CV) é uma medida de variabilidade não influenciada pela ordem de grandeza da variável. É interpretada como a variabilidade dos dados em relação a média e é dada por \[CV = \frac{s}{\bar{x}} \times 100.\]

Quanto menor for o valor de CV mais homogêneo é o conjunto. É uma medida de dispersão absoluta.

#obtendo as medidas de posição e dispersão discutidas para a variável hom_doloso por região em dezembro de de 2020 

crimes_mensal |>
  filter(ano == 2020 & mes == 12) |> 
  group_by(regiao)|>
  summarise(media = mean(hom_doloso, na.rm = TRUE),
            mediana = median(hom_doloso, na.rm = TRUE),
            quartil = quantile(hom_doloso, probs = .25, na.rm = TRUE),
            variancia = var(hom_doloso, na.rm = TRUE),
            desvio = sd(hom_doloso, na.rm = TRUE),
            dam = mad(hom_doloso, na.rm = TRUE)) |> 
  mutate(CV = desvio/media*100)
# A tibble: 4 × 8
  regiao media mediana quartil variancia desvio   dam    CV
   <dbl> <dbl>   <dbl>   <dbl>     <dbl>  <dbl> <dbl> <dbl>
1      1  1.35       0       0      5.04   2.25  0    167. 
2      2  6.23       3       1     48.5    6.97  2.97 112. 
3      3 68         68      68     NA     NA     0     NA  
4      4 11         10       8     31      5.57  5.93  50.6

alt text