alt text
GET00100 - Estatística I
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