Gabarito da Aula 4: Análise descritiva

Os exercícios da aula de análise descritiva foram propostos com o uso dos dados pinguins do pacote dados em mente. Segue abaixo a solução para cada um dos exercícios.

1. Filtre a base para manter apenas as observações do ano de 2009.

# Exercício 1 da aula 4
library(dados)
library(dplyr)

pinguins_2009 <- pinguins |>
  filter(ano == 2009)

pinguins_2009
1
Carregar pacotes necessários.
2
Filtrar a base apenas com as documentações do ano de 2009. Atribuir o subconjunto no objeto pinguins_2009.
3
Por fim, mostrar o objeto criado.
# A tibble: 120 × 8
   especie        ilha  comprimento_bico profundidade_bico comprimento_nadadeira
   <fct>          <fct>            <dbl>             <dbl>                 <int>
 1 Pinguim-de-ad… Bisc…             35                17.9                   192
 2 Pinguim-de-ad… Bisc…             41                20                     203
 3 Pinguim-de-ad… Bisc…             37.7              16                     183
 4 Pinguim-de-ad… Bisc…             37.8              20                     190
 5 Pinguim-de-ad… Bisc…             37.9              18.6                   193
 6 Pinguim-de-ad… Bisc…             39.7              18.9                   184
 7 Pinguim-de-ad… Bisc…             38.6              17.2                   199
 8 Pinguim-de-ad… Bisc…             38.2              20                     190
 9 Pinguim-de-ad… Bisc…             38.1              17                     181
10 Pinguim-de-ad… Bisc…             43.2              19                     197
# ℹ 110 more rows
# ℹ 3 more variables: massa_corporal <int>, sexo <fct>, ano <int>

2. Verifique se a variável comprimento_bico da base de dados segue uma distribuição normal através de um histograma e um teste de normalidade de Shapiro-Wilk.

# Exercício 2 da aula 4
library(ggplot2)

pinguins_2009 |>
  ggplot(aes(x = comprimento_bico)) +
  geom_histogram(fill = "lightcoral") +
  theme_classic(16, "Arial") +
  labs(x = "Comprimento do bico (em mm)",
       y = "# de pinguins")

Ao observar o histograma, parece que estamos trabalhando com uma distribuição bimodal na variável comprimento_bico. Ou seja, observamos dois “picos” distintos que representariam duas modas presentes no vetor. Agora, seguimos para o teste de Shapiro-Wilk para verificar a normalidade dos dados:

# Continuação do exercício 2 da aula 4
pinguins_2009 |> 
  pull(comprimento_bico) |> 
  shapiro.test()

    Shapiro-Wilk normality test

data:  pull(pinguins_2009, comprimento_bico)
W = 0.9573, p-value = 0.0008205

Se nos recordamos da aula, vamos lembrar que a hipótese nula (\(H_0\)) do teste de Shapiro-Wilk é de que os dados seguem uma distribuição normal, ou seja, esperamos um p-valor maior que 0,05 para não rejeitar a hipótese nula. No resultado acima, observamos que o p-valor foi de 0,0008. Logo, assumimos que provavelmente o vetor do comprimento_bico não segue uma distribuição normal, como consideramos a partir do histograma.

3. Com a função count(), verifique a frequência da variável sexo na base de dados.

# Exercício 3 da aula 4

# Contar frequência do sexo dos pinguins
pinguins_2009 |> 
  count(sexo)
# A tibble: 3 × 2
  sexo      n
  <fct> <int>
1 fêmea    58
2 macho    59
3 <NA>      3

Podemos observar que a variável sexo na base dos pinguins_2009 possui três valores ausentes. Caso queiramos remover os pinguins sem valor na variável sexo da base de dados, podemos criar um subconjunto apenas com as observações sem NA nessa coluna:

pinguins_2009_sem_na_sexo <- pinguins_2009 |> 
  filter(!is.na(sexo))

# Notem que agora a base de dados tem apenas 117 linhas (3 pinguins foram removidos)
pinguins_2009_sem_na_sexo
# A tibble: 117 × 8
   especie        ilha  comprimento_bico profundidade_bico comprimento_nadadeira
   <fct>          <fct>            <dbl>             <dbl>                 <int>
 1 Pinguim-de-ad… Bisc…             35                17.9                   192
 2 Pinguim-de-ad… Bisc…             41                20                     203
 3 Pinguim-de-ad… Bisc…             37.7              16                     183
 4 Pinguim-de-ad… Bisc…             37.8              20                     190
 5 Pinguim-de-ad… Bisc…             37.9              18.6                   193
 6 Pinguim-de-ad… Bisc…             39.7              18.9                   184
 7 Pinguim-de-ad… Bisc…             38.6              17.2                   199
 8 Pinguim-de-ad… Bisc…             38.2              20                     190
 9 Pinguim-de-ad… Bisc…             38.1              17                     181
10 Pinguim-de-ad… Bisc…             43.2              19                     197
# ℹ 107 more rows
# ℹ 3 more variables: massa_corporal <int>, sexo <fct>, ano <int>

Lembram que podemos transformar a contagem da frequência em um gráfico de barras?

# Vamos checar a nova contagem nesse subconjunto
pinguins_2009_sem_na_sexo |> 
  count(sexo)
# A tibble: 2 × 2
  sexo      n
  <fct> <int>
1 fêmea    58
2 macho    59
# Com o código abaixo, criamos um gráfico de barras do sexo
pinguins_2009_sem_na_sexo |> 
  count(sexo) |> 
  ggplot(aes(x = sexo, y = n)) +
  geom_col()

Creio que podemos deixar esse gráfico um pouco mais elegante:

# Vamos deixar ele um pouco mais bonito...
pinguins_2009_sem_na_sexo |> 
  count(sexo) |> 
  mutate(sexo = stringr::str_to_title(sexo)) |> 
  ggplot(aes(x = sexo, y = n, label = n)) +
  geom_col(fill = "steelblue1") +
  geom_text(nudge_y = 4,
            size = 6) +
  theme_light(20, "IBM Plex Sans") +
  labs(x = "Sexo do pinguim",
       y = "# de pinguins",
       title = "Qual a moda do sexo dos pinguins?")

4. Com a função summarise(), calcule a média, mediana e desvio padrão da variável comprimento_nadadeira.

# Exercício 4 da aula 4

pinguins_2009 |> 
  summarise(media_nadadeira = mean(comprimento_nadadeira, na.rm = TRUE),
            mediana_nadadeira = median(comprimento_nadadeira, na.rm = TRUE),
            dp_nadadeira = sd(comprimento_nadadeira, na.rm = TRUE))
# A tibble: 1 × 3
  media_nadadeira mediana_nadadeira dp_nadadeira
            <dbl>             <int>        <dbl>
1            203.               199         13.7

Notem que usamos o argumento na.rm = TRUE para sinalizar ao R que, em caso de presença de valores ausentes na variável, queremos que as medidas sejam calculadas ignorando os NA e considerando apenas os valores válidos.

Caso nós achassemos interessante observar os resumos gerados acima agrupados por alguma outra variável da base de dados, poderíamos usar a função group_by() para fazer este ajuste. Segue exemplo abaixo agrupando as medidas calculadas de forma estratificada pela ilha dos pinguins:

pinguins_2009 |> 
  group_by(ilha) |> 
  summarise(media_nadadeira = mean(comprimento_nadadeira, na.rm = TRUE),
            mediana_nadadeira = median(comprimento_nadadeira, na.rm = TRUE),
            dp_nadadeira = sd(comprimento_nadadeira, na.rm = TRUE))
# A tibble: 3 × 4
  ilha      media_nadadeira mediana_nadadeira dp_nadadeira
  <fct>               <dbl>             <dbl>        <dbl>
1 Biscoe               211.               214        13.4 
2 Dream                195.               193         6.96
3 Torgersen            193.               191         7.89