Nossos dados merecem ser apresentados de forma clara, atraente e inspiradora. Não há nada mais frustrante que dar duro no campo para coletar os dados e depois apresentá-los numa simples tabela de resumos. Podemos e devemos fazer mais, certo?

Vou começar agora uma série de posts sobre tipos de gráficos. Como disse no primeiro post desse blog, minha intenção é documentar os scripts que escrevi durante a graduação, portanto os gráficos que vou apresentar se resumem aos que tive de fazer por conta de alguma demanda específica.

Para iniciar, escolhi o gráfico boxplot. É um gráfico muito útil para entender a variabilidade das nossas observações. No boxplot temos 5 informações básicas: valor mínimo, primeiro quartil, mediana, terceiro quartil e valor máximo. Há ainda a notificação de outliers, quando a observação é maior ou menor que 1,5 vezes a distância interquartílica.

Vamos trabalhar com os dados que apresentei no post anterior sobre tidy data.

library(pacman)
p_load(readr, dplyr, tidyr, ggplot2, ggthemes)
dados <- read_csv2(
  "https://raw.githubusercontent.com/italocegatta/italocegatta.github.io_source/master/content/dados/base_vespa.csv"
)

dados
## # A tibble: 2,100 x 5
##    Tratamento Individuo Coleta Local   Galhas
##    <chr>          <dbl>  <dbl> <chr>    <dbl>
##  1 Actara d1          1      1 Peciolo      1
##  2 Actara d1          2      1 Peciolo     NA
##  3 Actara d1          3      1 Peciolo     NA
##  4 Actara d1          4      1 Peciolo     NA
##  5 Actara d1          5      1 Peciolo     NA
##  6 Actara d1          6      1 Peciolo     NA
##  7 Actara d1          7      1 Peciolo     NA
##  8 Actara d1          8      1 Peciolo     NA
##  9 Actara d1          9      1 Peciolo     NA
## 10 Actara d1         10      1 Peciolo     NA
## # ... with 2,090 more rows

Primeiro vamos processar os dados da última medição (Coleta 5) para verificar o nº total de galhas de cada tratamento, desconsiderando o local da galha. Nesse caso estou considerando apenas as mudas que foram atacadas e tiveram o desenvolvimento de galhas.

# seleciona apenas as Coletas de numero 5, em seguida monta um fator de 
# agrupamento em função de Tratamento e Individuo. Aplica a soma de todas as
# observações (Galhas) de acordo com o fator de agrupamento. Troca os valores
# 0 (quando não há galhas) por NA.

total <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Individuo) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

total
## # A tibble: 140 x 3
## # Groups:   Tratamento [7]
##    Tratamento Individuo Galhas
##    <chr>          <dbl>  <dbl>
##  1 Actara d1          1     11
##  2 Actara d1          2     NA
##  3 Actara d1          3      4
##  4 Actara d1          4     NA
##  5 Actara d1          5     NA
##  6 Actara d1          6     NA
##  7 Actara d1          7     30
##  8 Actara d1          8     NA
##  9 Actara d1          9     NA
## 10 Actara d1         10     NA
## # ... with 130 more rows

O boxplot é um gráfico unidimensional, ou seja, precisamos de apenas uma variável para construí-lo. Entretanto, podemos usar variáveis categóricas para servir de agrupamento e replicar o gráfico para todos os níveis da variável. Por exemplo, no nosso banco de dados temos Galhas como variável quantitativa e Tratamento, Coleta e Local como variável qualitativa.

ggplot(total, aes("Total", Galhas)) +
  geom_boxplot(fill = "grey60", alpha = 0.8) +
  theme_bw()
Boxplot que mostra o nº de galhas de todos os tratamentos.

Figura 1: Boxplot que mostra o nº de galhas de todos os tratamentos.

A Figura 1 dá uma visão geral de todas as observações em um único boxplot, mas não nos explica muita coisa. No caso da Figura 2, Tratamento tratamento é uma variável categórica e nos permite subdividir os boxplots para todos os níveis e assim podemos compará-los.

ggplot(total, aes(Tratamento, Galhas)) +
  geom_boxplot(fill = "grey60", alpha = 0.8) +
  theme_bw(16)
Boxplot que mostra o nº de galhas em função de cada tratamento.

Figura 2: Boxplot que mostra o nº de galhas em função de cada tratamento.

Note que no tratamento Actara d1, há um indivíduo discrepante (outlier) que se destaca com 30 galhas. Note também a grande variabilidade entre os tratamentos, muito comum em experimentos envolvendo insetos. Normalmente o coeficiente de variação é extremamente alto e dificilmente há homogeneidade de variância. Um comentário interessante sobre o boxplot é que a caixa, valores entre o 1º e 3º quartil, corresponde a 50% das observações.

Podemos também avaliar a variabilidade do nº de galhas por local. Para isso vamos incluir a variável Local no agrupamento (Figura 3).

# Adiciona mais um fator de agrupamento para o resumo. Nesse caso cada
# indivíduo terá o nº de galhas explicito em cada local.

local <- dados %>%
  filter(Coleta == 5) %>%
  group_by(Tratamento, Individuo, Local) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

local
## # A tibble: 420 x 4
## # Groups:   Tratamento, Individuo [140]
##    Tratamento Individuo Local   Galhas
##    <chr>          <dbl> <chr>    <dbl>
##  1 Actara d1          1 Caule        2
##  2 Actara d1          1 Nervura      3
##  3 Actara d1          1 Peciolo      6
##  4 Actara d1          2 Caule       NA
##  5 Actara d1          2 Nervura     NA
##  6 Actara d1          2 Peciolo     NA
##  7 Actara d1          3 Caule        1
##  8 Actara d1          3 Nervura      1
##  9 Actara d1          3 Peciolo      2
## 10 Actara d1          4 Caule       NA
## # ... with 410 more rows
ggplot(local, aes(Tratamento, Galhas, fill = Local)) +
  geom_boxplot(alpha = 0.8) +
  scale_fill_brewer(palette = "Spectral") +
  theme_bw(16)
Boxplot que mostra o nº de galhas por local e tratamento.

Figura 3: Boxplot que mostra o nº de galhas por local e tratamento.

Uma outra perspectiva é avaliar a evolução do total de galhas por coleta. Para isto basta incluir a variável Coleta no agrupamento (Figura 4). Para facilitar a visualização, vou excluir a primeira coleta. Podemos ainda adicionar os pontos que representam as observações para poder identificar quantas observações tem cada tratamento.

total_coleta <- dados %>%
  filter(Coleta != 1 ) %>%
  group_by(Tratamento, Coleta, Individuo) %>%
  summarise(Galhas = sum(Galhas, na.rm=T)) %>%
  mutate(Galhas = replace(Galhas, Galhas == 0, NA))

total_coleta
## # A tibble: 560 x 4
## # Groups:   Tratamento, Coleta [28]
##    Tratamento Coleta Individuo Galhas
##    <chr>       <dbl>     <dbl>  <dbl>
##  1 Actara d1       2         1      3
##  2 Actara d1       2         2     NA
##  3 Actara d1       2         3     NA
##  4 Actara d1       2         4     NA
##  5 Actara d1       2         5     NA
##  6 Actara d1       2         6     NA
##  7 Actara d1       2         7      2
##  8 Actara d1       2         8     NA
##  9 Actara d1       2         9     NA
## 10 Actara d1       2        10     NA
## # ... with 550 more rows
ggplot(total_coleta, aes(Tratamento, Galhas)) +
  geom_boxplot(fill = "grey60", alpha = 0.8, outlier.color = NA) +
  geom_jitter(alpha = 0.4) +
  facet_wrap(~Coleta) +
  theme_bw(16) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, vjust = 1))
Boxplot que mostra a dispersão do total de galhas por tratamento e coletas.

Figura 4: Boxplot que mostra a dispersão do total de galhas por tratamento e coletas.

É importante destacar que o gráfico da Figura 4 não é adequado para esse tipo de informação. Nesse caso seria mais interessante um gráfico de linhas em que cada linha representa um tratamento (veremos esse gráfico em um futuro post).

Caso tenha alguma dúvida ou sugestão sobre o post, fique à vontade para fazer um comentário ou me contatar por E-mail.

devtools::session_info()
## - Session info ----------------------------------------------------------
##  setting  value                       
##  version  R version 3.5.3 (2019-03-11)
##  os       Windows 10 x64              
##  system   x86_64, mingw32             
##  ui       RTerm                       
##  language (EN)                        
##  collate  Portuguese_Brazil.1252      
##  ctype    Portuguese_Brazil.1252      
##  tz       America/Sao_Paulo           
##  date     2019-08-25                  
## 
## - Packages --------------------------------------------------------------
##  package      * version date       lib source        
##  assertthat     0.2.1   2019-03-21 [1] CRAN (R 3.5.3)
##  backports      1.1.4   2019-04-10 [1] CRAN (R 3.5.3)
##  blogdown       0.14    2019-07-13 [1] CRAN (R 3.5.3)
##  bookdown       0.12    2019-07-11 [1] CRAN (R 3.5.3)
##  callr          3.3.1   2019-07-18 [1] CRAN (R 3.5.3)
##  cli            1.1.0   2019-03-19 [1] CRAN (R 3.5.3)
##  colorspace     1.4-1   2019-03-18 [1] CRAN (R 3.5.3)
##  crayon         1.3.4   2017-09-16 [1] CRAN (R 3.5.1)
##  curl           4.0     2019-07-22 [1] CRAN (R 3.5.3)
##  desc           1.2.0   2018-05-01 [1] CRAN (R 3.5.1)
##  devtools       2.1.0   2019-07-06 [1] CRAN (R 3.5.3)
##  digest         0.6.20  2019-07-04 [1] CRAN (R 3.5.3)
##  dplyr        * 0.8.3   2019-07-04 [1] CRAN (R 3.5.3)
##  evaluate       0.14    2019-05-28 [1] CRAN (R 3.5.3)
##  fansi          0.4.0   2018-10-05 [1] CRAN (R 3.5.1)
##  fs             1.3.1   2019-05-06 [1] CRAN (R 3.5.3)
##  ggplot2      * 3.2.1   2019-08-10 [1] CRAN (R 3.5.3)
##  ggthemes     * 4.2.0   2019-05-13 [1] CRAN (R 3.5.3)
##  glue           1.3.1   2019-03-12 [1] CRAN (R 3.5.3)
##  gtable         0.3.0   2019-03-25 [1] CRAN (R 3.5.3)
##  highr          0.8     2019-03-20 [1] CRAN (R 3.5.3)
##  hms            0.5.0   2019-07-09 [1] CRAN (R 3.5.3)
##  htmltools      0.3.6   2017-04-28 [1] CRAN (R 3.5.1)
##  knitr          1.24    2019-08-08 [1] CRAN (R 3.5.3)
##  labeling       0.3     2014-08-23 [1] CRAN (R 3.5.0)
##  lazyeval       0.2.2   2019-03-15 [1] CRAN (R 3.5.3)
##  magrittr       1.5     2014-11-22 [1] CRAN (R 3.5.1)
##  memoise        1.1.0   2017-04-21 [1] CRAN (R 3.5.1)
##  munsell        0.5.0   2018-06-12 [1] CRAN (R 3.5.1)
##  pacman       * 0.5.1   2019-03-11 [1] CRAN (R 3.5.3)
##  pillar         1.4.2   2019-06-29 [1] CRAN (R 3.5.3)
##  pkgbuild       1.0.4   2019-08-05 [1] CRAN (R 3.5.3)
##  pkgconfig      2.0.2   2018-08-16 [1] CRAN (R 3.5.1)
##  pkgload        1.0.2   2018-10-29 [1] CRAN (R 3.5.1)
##  prettyunits    1.0.2   2015-07-13 [1] CRAN (R 3.5.1)
##  processx       3.4.1   2019-07-18 [1] CRAN (R 3.5.3)
##  ps             1.3.0   2018-12-21 [1] CRAN (R 3.5.2)
##  purrr          0.3.2   2019-03-15 [1] CRAN (R 3.5.3)
##  R6             2.4.0   2019-02-14 [1] CRAN (R 3.5.2)
##  RColorBrewer   1.1-2   2014-12-07 [1] CRAN (R 3.5.0)
##  Rcpp           1.0.2   2019-07-25 [1] CRAN (R 3.5.3)
##  readr        * 1.3.1   2018-12-21 [1] CRAN (R 3.5.2)
##  remotes        2.1.0   2019-06-24 [1] CRAN (R 3.5.3)
##  rlang          0.4.0   2019-06-25 [1] CRAN (R 3.5.3)
##  rmarkdown      1.14    2019-07-12 [1] CRAN (R 3.5.3)
##  rprojroot      1.3-2   2018-01-03 [1] CRAN (R 3.5.1)
##  scales         1.0.0   2018-08-09 [1] CRAN (R 3.5.1)
##  sessioninfo    1.1.1   2018-11-05 [1] CRAN (R 3.5.2)
##  stringi        1.4.3   2019-03-12 [1] CRAN (R 3.5.3)
##  stringr        1.4.0   2019-02-10 [1] CRAN (R 3.5.2)
##  testthat       2.2.1   2019-07-25 [1] CRAN (R 3.5.3)
##  tibble         2.1.3   2019-06-06 [1] CRAN (R 3.5.3)
##  tidyr        * 0.8.3   2019-03-01 [1] CRAN (R 3.5.3)
##  tidyselect     0.2.5   2018-10-11 [1] CRAN (R 3.5.1)
##  usethis        1.5.1   2019-07-04 [1] CRAN (R 3.5.3)
##  utf8           1.1.4   2018-05-24 [1] CRAN (R 3.5.1)
##  vctrs          0.2.0   2019-07-05 [1] CRAN (R 3.5.3)
##  withr          2.1.2   2018-03-15 [1] CRAN (R 3.5.1)
##  xfun           0.8     2019-06-25 [1] CRAN (R 3.5.3)
##  yaml           2.2.0   2018-07-25 [1] CRAN (R 3.5.1)
##  zeallot        0.1.0   2018-01-28 [1] CRAN (R 3.5.2)
## 
## [1] C:/Users/Italo/Documents/R/win-library/3.5
## [2] C:/Program Files/R/R-3.5.3/library