Na aula conhecendo os dados, vimos algumas funções que são interessantes para ver estatísticas descritivas de todas as variáveis de uma vez, como a summary() e a skim().
Podemos utilizar também funções do R para calcular estatísticas descritivas de uma variável.
Por exemplo, para calcular a média da variável perc_desocupacao, podemos usar a função mean():
mean(dados$perc_desocupacao)
[1] 10.2724
Nesse caso, estamos fazendo a média de TODOS os valores da variável prop_desocupacao, incluindo proporções de períodos diferentes. Veremos em breve como podemos calcular a média considerando grupos (por exemplo, qual é a média em cada período?).
A seguir, temos uma lista de funções que podem ser utilizadas para calcular estatísticas descritivas de uma variável:
Função
O que retorna?
min()
Valor mínimo
max()
Valor máximo
sum()
Soma
mean()
Média
weighted.mean()
Média ponderada
median()
Mediana
quantile()
Quantil
var()
Variância (simples)
sd()
Desvio Padrão
Vamos calcular algumas dessas estatísticas para a variável perc_desocupacao:
min(dados$perc_desocupacao)
[1] 2.344666
max(dados$perc_desocupacao)
[1] 21.7527
mean(dados$perc_desocupacao)
[1] 10.2724
median(dados$perc_desocupacao)
[1] 9.776482
var(dados$perc_desocupacao)
[1] 14.88816
sd(dados$perc_desocupacao)
[1] 3.858517
Aviso
As variáveis que estamos trabalhando não possuem valores faltantes (NA). Caso a variável que você esteja trabalhando possua valores faltantes, é importante considerar o argumento na.rm = TRUE nas funções de estatísticas descritivas, para que os valores faltantes sejam ignorados ao realizar os cálculos.
Atribuindo a variável height (altura) da base starwars ao objeto altura_personagens_starwars.
2
Tentando calcular a média da altura dos personagens de Star Wars. O resultado será NA pois temos NA na variável altura_personagens_starwars.
[1] NA
mean(altura_personagens_starwars, na.rm =TRUE)
1
Calculando a média da altura dos personagens de Star Wars, ignorando os valores faltantes (NA).
[1] 174.6049
Estatísticas agregadas (summarise())
Uma função importante do pacote dplyr é a summarise(). Ela permite calcular estatísticas descritivas de variáveis de uma base de dados, usando as funções que vimos anteriormente. A diferença é que retornará um novo data frame com as estatísticas calculadas.
Porém isso não é muito diferente de usar as funções do R diretamente, como fizemos anteriormente.
A grande vantagem da função summarise() é que podemos calcular estatísticas descritivas para grupos de dados, o que veremos a seguir.
Agrupando dados (group_by())
Imagine que queremos calcular a média da taxa de desemprego para cada estado. Para isso, precisaríamos agrupar a base de dados por cada estado.
A função group_by() do pacote dplyr permite agrupar dados usando uma ou mais variáveis. Ela não faz alterações nas linhas e colunas da base de dados, porém ela cria um atributo que indica que a base de dados está agrupada. Assim, as etapas seguintes que utilizarem a base de dados agrupada irão considerar os grupos criados.
Veja o exemplo a seguir: ao agrupar a base dados por uf, estamos criando grupos de dados para cada estado. Veja que o resultado é uma tibble, mas a diferença é que agora temos um grupo para cada estado (# Groups: uf [27]):
dados |>group_by(uf)
# A tibble: 1,350 × 16
# Groups: uf [27]
uf uf_codigo uf_sigla regiao trimestre trimestre_codigo ano
<chr> <fct> <chr> <chr> <chr> <chr> <dbl>
1 Amapá 16 AP Norte 1º trime… 201201 2012
2 Bahia 29 BA Norde… 1º trime… 201201 2012
3 Rio Grande do Nor… 24 RN Norde… 1º trime… 201201 2012
4 Alagoas 27 AL Norde… 1º trime… 201201 2012
5 Amazonas 13 AM Norte 1º trime… 201201 2012
6 Sergipe 28 SE Norde… 1º trime… 201201 2012
7 Paraíba 25 PB Norde… 1º trime… 201201 2012
8 Pernambuco 26 PE Norde… 1º trime… 201201 2012
9 Acre 12 AC Norte 1º trime… 201201 2012
10 Distrito Federal 53 DF Centr… 1º trime… 201201 2012
# ℹ 1,340 more rows
# ℹ 9 more variables: trimestre_inicio <date>, mil_pessoas_total <dbl>,
# mil_pessoas_forca_de_trabalho <dbl>,
# mil_pessoas_forca_de_trabalho_ocupada <dbl>,
# mil_pessoas_forca_de_trabalho_desocupada <dbl>,
# mil_pessoas_fora_da_forca_de_trabalho <dbl>, prop_desocupacao <dbl>,
# perc_desocupacao <dbl>, periodo_pandemia <dbl>
Podemos agrupar também usando mais que uma variável. Neste exemplo, vamos agrupar por uf e ano: uf, ano [351]. Isso significa que temos um grupo para cada combinação de estado (27) e ano (13), totalizando 351 grupos.
dados |>group_by(uf, ano)
# A tibble: 1,350 × 16
# Groups: uf, ano [351]
uf uf_codigo uf_sigla regiao trimestre trimestre_codigo ano
<chr> <fct> <chr> <chr> <chr> <chr> <dbl>
1 Amapá 16 AP Norte 1º trime… 201201 2012
2 Bahia 29 BA Norde… 1º trime… 201201 2012
3 Rio Grande do Nor… 24 RN Norde… 1º trime… 201201 2012
4 Alagoas 27 AL Norde… 1º trime… 201201 2012
5 Amazonas 13 AM Norte 1º trime… 201201 2012
6 Sergipe 28 SE Norde… 1º trime… 201201 2012
7 Paraíba 25 PB Norde… 1º trime… 201201 2012
8 Pernambuco 26 PE Norde… 1º trime… 201201 2012
9 Acre 12 AC Norte 1º trime… 201201 2012
10 Distrito Federal 53 DF Centr… 1º trime… 201201 2012
# ℹ 1,340 more rows
# ℹ 9 more variables: trimestre_inicio <date>, mil_pessoas_total <dbl>,
# mil_pessoas_forca_de_trabalho <dbl>,
# mil_pessoas_forca_de_trabalho_ocupada <dbl>,
# mil_pessoas_forca_de_trabalho_desocupada <dbl>,
# mil_pessoas_fora_da_forca_de_trabalho <dbl>, prop_desocupacao <dbl>,
# perc_desocupacao <dbl>, periodo_pandemia <dbl>
Podemos usar função ungroup() para remover os grupos criados. Porém as funções que utilizaremos muitas vezes já remove os grupos. Veremos exemplos a seguir.
Estatísticas agregadas utilizando grupos (group_by() + summarise())
Agora que sabemos como agrupar dados, podemos calcular estatísticas descritivas para cada grupo.
`summarise()` has grouped output by 'uf'. You can override using the `.groups` argument.
Isso significa que a função summarise() retornou um data frame agrupado por uf. Se quisermos remover o agrupamento, podemos usar o argumento .groups = "drop":
dados |>group_by(uf, ano) |>summarise(media =mean(perc_desocupacao),.groups ="drop" )
1
O argumento .groups = "drop" retorna uma tibble sem grupos.
Porém como o summarise() apenas retorna as colunas de grupo e as colunas criadas, não temos a informação do trimestre.
Para isso, podemos utilizar a função filter() para filtrar os dados por estado, filtrando a linha que apresenta o maior valor encontrado (max(perc_desocupacao)) na coluna perc_desocupacao:
dados |>group_by(uf) |>filter(perc_desocupacao ==max(perc_desocupacao)) |>arrange(desc(perc_desocupacao)) |>select(uf, trimestre, perc_desocupacao)
1
Agrupando por estado (uf).
2
Filtrando as linhas que apresentam o maior valor encontrado na coluna perc_desocupacao.
3
Ordenando os dados de forma decrescente, segundo o perc_desocupacao.
4
Selecionando apenas as colunas relevantes para a pergunta.
# A tibble: 27 × 3
# Groups: uf [27]
uf trimestre perc_desocupacao
<chr> <chr> <dbl>
1 Pernambuco 2º trimestre 2021 21.8
2 Amapá 2º trimestre 2018 21.7
3 Bahia 1º trimestre 2021 21.7
4 Sergipe 3º trimestre 2020 20.8
5 Alagoas 4º trimestre 2020 20.4
6 Rio de Janeiro 1º trimestre 2021 19.6
7 Roraima 3º trimestre 2020 19.1
8 Acre 1º trimestre 2019 18.2
9 Amazonas 1º trimestre 2017 18.0
10 Rio Grande do Norte 3º trimestre 2020 17.9
# ℹ 17 more rows
Criando colunas utilizando grupos (group_by() + mutate())
Podemos criar novas colunas utilizando a função mutate().
Podemos utilizar essa pergunta como exemplo: - Qual é a média da taxa de desocupação para cada trimestre?
Podemos fazer calcular a média com a função summarise():
dados |>group_by(trimestre) |>summarise(media_ponderada =weighted.mean(perc_desocupacao, mil_pessoas_total) )
1
Calculando a média ponderada da taxa de desocupação, considerando a coluna mil_pessoas_total como peso.
A média foi calculada, porém o resultado é apenas uma tabela contendo o trimestre (a coluna de agrupamento), e a média (a coluna criada dentro do summarise()). Porém, se quisermos ter essa média como uma coluna da tabela, podemos fazer esse cálculo utilizando o mutate()
dados_media_trimestre <- dados |>group_by(trimestre) |>mutate(media_ponderada =weighted.mean(perc_desocupacao, mil_pessoas_total) )
1
Criando uma nova coluna com mutate()
2
Calculando a média ponderada da taxa de desocupação, considerando a coluna mil_pessoas_total como peso.
Tabelas de frequência
Utilizamos tabelas de frequência para representar a quantidade de ocorrências de linhas segundo um grupo de variáveis.
A função count() do pacote dplyr é uma forma simples de criar tabelas de frequência.
Por exemplo: Se queremos saber quantos estados temos em cada região, podemos filtrar para apenas um período (para que não haja duplicações), e contar a quantidade de linhas em cada categoria da coluna regiao, usando a função count():
dados_tri_recente <- dados |> dplyr::filter(trimestre_codigo =="202402")
1
Filtrando o trimestre mais recente
dados_tri_recente |>count(regiao)
1
Usando dados filtrados para o trimestre mais recente
2
Contando a quantidade de linhas para cada região (nesse caso, quantos estados tem por região).
# A tibble: 5 × 2
regiao n
<chr> <int>
1 Centro Oeste 4
2 Nordeste 9
3 Norte 7
4 Sudeste 4
5 Sul 3
Outras funções que podem ser utilizadas para criar tabelas de frequência são: table() (do R base) e tabyl() (do pacote janitor).
A função table() retorna uma tabela de frequência em formato largo. Nesse caso, o argumento é um vetor:
table(dados_tri_recente$regiao)
Centro Oeste Nordeste Norte Sudeste Sul
4 9 7 4 3
A função janitor::tabyl() gera uma tabela de frequência com o percentual de cada categoria. Nele, o argumento é um data frame, e passamos a variável que queremos contar (podemos informar mais que uma variável):
janitor::tabyl(dados_tri_recente, regiao)
regiao n percent
Centro Oeste 4 0.1481481
Nordeste 9 0.3333333
Norte 7 0.2592593
Sudeste 4 0.1481481
Sul 3 0.1111111
Exercícios sugeridos
Calcule a média da taxa de desocupação nos dois primeiros trimestres de 2024, por região.
Dicas
O resultado esperado é:
# A tibble: 5 × 2
regiao media
<chr> <dbl>
1 Centro Oeste 5.80
2 Nordeste 9.60
3 Norte 7.24
4 Sudeste 6.96
5 Sul 4.66
Qual foi o período (trimestre) para cada estado onde a taxa de desocupação foi menor? Ordene o resultado de forma crescente.
Dicas
Lembre-se de que podemos fazer filtros agrupados!
O resultado esperado é:
# A tibble: 27 × 3
uf trimestre perc_desocupacao
<chr> <chr> <dbl>
1 Rondônia 3º trimestre 2023 2.34
2 Mato Grosso 3º trimestre 2023 2.42
3 Santa Catarina 4º trimestre 2013 2.57
4 Mato Grosso do Sul 4º trimestre 2022 3.35
5 Paraná 4º trimestre 2014 3.75
6 Goiás 4º trimestre 2013 3.95
7 Tocantins 2º trimestre 2024 4.31
8 Rio Grande do Sul 4º trimestre 2012 4.39
9 Roraima 4º trimestre 2022 4.49
10 Espírito Santo 2º trimestre 2024 4.50
# ℹ 17 more rows
Qual foi a mediana da taxa de desocupação para cada estado, durante o período da pandemia? Ordene o resultado de forma decrescente.
Dicas
O resultado esperado é:
# A tibble: 27 × 2
uf mediana
<chr> <dbl>
1 Bahia 20.2
2 Pernambuco 19.3
3 Sergipe 18.3
4 Alagoas 18.3
5 Rio de Janeiro 16.8
6 Maranhão 16.3
7 Amapá 15.9
8 Amazonas 15.7
9 Rio Grande do Norte 15.5
10 Acre 14.9
# ℹ 17 more rows