Cap. 6 - Visualização de dados

6.1 Utilizando o banco de dados penguins compare o comprimento do bico entre as diferentes espécies de penguins. Utilize um gráfico de caixa (boxplot) para ilustrar a variação intraespecífica e possíveis outliers nos dados. Para melhorar o seu gráfico, lembre-se de nomear os dois eixos corretamente, definir um tema e posicionar a legenda.

Solução:


# Carregando pacotes necesários
library(tidyverse)
library(ecodados)

# Dados
penguins <- palmerpenguins::penguins

# Edição dos nomes das colunas para português 
# names(penguins)
colnames(penguins) <- c("especies", "ilha", "comprimento_bico", 
                        "profundidade_bico", "comprimento_nadadeira", 
                        "massa_corporal", "sexo", "ano")

# Gráfico: Boxplot do tamanho do bico entre as diferentes espécies
ggplot(penguins, aes(y = comprimento_bico, x = especies, fill = especies)) +
  geom_boxplot() +
  theme_bw(base_size = 16) +
  theme(
    legend.position = "top"
  ) +
  labs(fill = "Espécies",
       x = "Espécies", y = "Comprimento do bico (mm)")

6.2 Utilizando o banco de dados penguins faça um histograma com a distribuição da massa corporal para cada uma das espécies. Utilize uma cor de preenchimento para cada espécie.

Solução:

ggplot(penguins, aes(x = massa_corporal, fill = especies)) +
  geom_histogram(alpha = .5,  position = position_dodge()) +
  theme_bw(base_size = 16) +
  labs(x = "Massa corporal (g)",
       y = "Frequência",
       fill = "Espécie")

6.3 Utilizando o banco de dados penguins, faça três gráficos com o mesmo eixo Y e eixo X. Coloque o comprimento das nadadeiras no eixo Y e as espécies de pinguins no eixo X. No primeiro gráfico, utilize o geom_jitter() para plotar os dados brutos. No segundo gráfico, utilize o geom_violin() para mostrar a distribuição de densidade dos dados. No terceiro gráfico, utilize o geom_boxplot() para destacar a mediana e os quartis.

Solução:

# Gráfico de jitter com dados brutos
pjitter <- ggplot(penguins, aes(y = comprimento_nadadeira, x = especies )) +
  geom_jitter()
pjitter

# Gráfico violin com a densidade dos dados
pviolin <- ggplot(penguins, aes(y = comprimento_nadadeira, x = especies )) +
  geom_violin()
pviolin

# Gráfico de caixa com a media e os quartis
pcaixa  <- ggplot(penguins, aes(y = comprimento_nadadeira, x = especies )) +
  geom_boxplot()
pcaixa

6.4 Se você conseguiu resolver o exercício 6.3, agora dê um passo a mais e compare os três gráficos lado a lado utilizando a função grid.arrange(). Lembre-se de colocar um título informativo em cada um dos gráficos antes de juntá-los em uma prancha única. Ao comparar os 3 tipos de gráficos, qual você considera mais informativo? Experimente combinar mais de um “geom” (camadas) e produzir gráficos ainda mais interessantes.

Solução:

# colocando um título em cada gráfico
pjitter <- pjitter + labs(title = "Plot com jitter")
pviolin <- pviolin + labs(title = "Plot com violin")
pcaixa  <- pcaixa + labs(title = "Plot com boxplot")

# juntando os 3 gráficos em um só
# Carregando o pacote gridExtra
library(gridExtra)
grid.arrange(pjitter, pviolin, pcaixa, ncol = 3)

Agora misturando as camadas.

# Misturando geoms
ggplot(penguins, aes(y = comprimento_nadadeira, x = especies )) +
  geom_jitter(size = .5, width = .2, aes(color = especies)) +
  geom_boxplot(aes(fill = especies), alpha = .2, width = .2) +
  geom_violin(fill = "gray", alpha = .1) +
  theme_classic(base_size = 16) +
  theme(legend.position = "none") +
  labs(y = "Comprimento da nadadeira (mm)",
       x = "Espécie de pinguim")

6.5 Utilize o banco de dados ecodados::anova_dois_fatores para construir um gráfico de barras com a média e o erro padrão do Tempo (Tempo para eliminar a droga do corpo) no eixo Y em função da variável Pessoas (XX, ou XY) e Idade (jovem ou idoso). Antes de fazer o gráfico leia com atenção a descrição do mesmo através do comando ?ecodados::anova_dois_fatores. Uma dica, utilize fill dentro do aes para representar um dos fatores (ex. Pessoas). O outro fator você pode representar no eixo X. Veja se consegue, se não conseguir pode olhar a cola com a solução para aprender como é feito. Outra dica, pesquise sobre a função stat_summary() ela irá te ajudar a calcular a média e o erro padrão dentro do comando que gera o gráfico.

Solução:

# entenda o banco de dados primeiro
?ecodados::anova_dois_fatores

Versão 1: calculando a média e o erro padrão dentro do próprio gráfico.

ggplot(anova_dois_fatores, aes(y = Tempo, x = Idade, fill = Pessoas)) +
  geom_point(position = position_dodge(width = .9), size = .5) +
  stat_summary(fun = mean, geom = "bar", position = position_dodge(width = .9), alpha = .75) +
  stat_summary(fun.data = mean_se, geom = "errorbar", position = position_dodge(width = .9), 
               width = .2) +
  scale_fill_manual(values = c("steelblue", "orange")) +
  theme_bw(base_size = 16) +
  labs(y = "Tempo (dias após administração)",
       x = "Grupo etário")

Versão 2: calculando a média e o erro padrão antes de produzir o gráfico.

# Calcular o desvio padrão 
anova_media <- anova_dois_fatores %>% 
    dplyr::group_by(Idade, Pessoas ) %>% 
    dplyr::summarise(media = mean(Tempo, na.rm = TRUE),
                     desvio = sd(Tempo, na.rm = TRUE))
#Veja como ficou 
head(anova_media)
#> # A tibble: 4 × 4
#> # Groups:   Idade [2]
#>   Idade Pessoas media desvio
#>   <chr> <chr>   <dbl>  <dbl>
#> 1 Idoso XX       30.9   2.01
#> 2 Idoso XY       40.1   2.04
#> 3 Jovem XX       18.7   2.14
#> 4 Jovem XY       26.5   1.80

Agora use esse banco de dados para plotar a média e o erro padrão.

# Gráfico de barras com desvio padrão
ggplot(data = anova_media, aes(y = media, x = Idade, fill = Pessoas)) +
    geom_bar(stat = "identity", alpha = .75, position = position_dodge()) +
    geom_errorbar(aes(ymin = media - desvio, ymax = media + desvio), 
                  width = .1, position = position_dodge(width = .9)) +
  scale_fill_manual(values = c("steelblue", "orange")) +
  theme_bw(base_size = 16) +
  labs(y = "Tempo (dias após administração)",
       x = "Grupo etário")

6.6 Utilize o banco de dados penguins para criar um gráfico de dispersão entre o tamanho da nadadeira (eixo Y) e a massa corporal (eixo X). Utilize o argumento fill para ilustrar com cores as diferenças entre os sexos e utilize a função facte_grid() para criar um gráfico separado para cada espécie de pinguim. Se você não conhece essa função, dê uma olhada no help ?facet_grid. Você também pode utilizar a função drop_na() para excluir os dados faltantes da coluna sexo.

Solução:

# primeiro vamos traduizir a coluna sexo para o português
penguins$sexo <- fct_recode(penguins$sexo, masculino = "male", feminino = "female")

ggplot(penguins %>% drop_na(sexo), aes(y = comprimento_nadadeira, x = massa_corporal, 
                                       color = sexo, fill = sexo)) +
  geom_point(size = .4) +
  geom_smooth(method = lm) +
  facet_grid(~especies) +
  scale_color_manual(values = c("steelblue", "orange"), aesthetics = c("fill", "color")) +
  theme_classic() +
  labs(
    y = "Comprimento da nadadeira (mm)",
    x = "Massa corporal (g)"
  )