Nessa aula, iremos explorar o conjunto de dados mpg disponível no R. Esse conjunto de dados nos ajuda a responder a seguinte questão: carros com motores maiores utilizam mais combustível do que carros com motores menores? Essa aula é baseada no livro “R para Data Sciente”.

Para começar, devemos explorar este conjunto de dados. Você pode fazer isso da mesma forma mostrada nas aulas anteriores.

library(ggplot2)
data(mpg)
head(mpg)
## # A tibble: 6 x 11
##   manufacturer model displ  year   cyl trans      drv     cty   hwy fl    class 
##   <chr>        <chr> <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr> 
## 1 audi         a4      1.8  1999     4 auto(l5)   f        18    29 p     compa~
## 2 audi         a4      1.8  1999     4 manual(m5) f        21    29 p     compa~
## 3 audi         a4      2    2008     4 manual(m6) f        20    31 p     compa~
## 4 audi         a4      2    2008     4 auto(av)   f        21    30 p     compa~
## 5 audi         a4      2.8  1999     6 auto(l5)   f        16    26 p     compa~
## 6 audi         a4      2.8  1999     6 manual(m5) f        18    26 p     compa~
tail(mpg)
## # A tibble: 6 x 11
##   manufacturer model  displ  year   cyl trans      drv     cty   hwy fl    class
##   <chr>        <chr>  <dbl> <int> <int> <chr>      <chr> <int> <int> <chr> <chr>
## 1 volkswagen   passat   1.8  1999     4 auto(l5)   f        18    29 p     mids~
## 2 volkswagen   passat   2    2008     4 auto(s6)   f        19    28 p     mids~
## 3 volkswagen   passat   2    2008     4 manual(m6) f        21    29 p     mids~
## 4 volkswagen   passat   2.8  1999     6 auto(l5)   f        16    26 p     mids~
## 5 volkswagen   passat   2.8  1999     6 manual(m5) f        18    26 p     mids~
## 6 volkswagen   passat   3.6  2008     6 auto(s6)   f        17    26 p     mids~
summary(mpg)
##  manufacturer          model               displ            year     
##  Length:234         Length:234         Min.   :1.600   Min.   :1999  
##  Class :character   Class :character   1st Qu.:2.400   1st Qu.:1999  
##  Mode  :character   Mode  :character   Median :3.300   Median :2004  
##                                        Mean   :3.472   Mean   :2004  
##                                        3rd Qu.:4.600   3rd Qu.:2008  
##                                        Max.   :7.000   Max.   :2008  
##       cyl           trans               drv                 cty       
##  Min.   :4.000   Length:234         Length:234         Min.   : 9.00  
##  1st Qu.:4.000   Class :character   Class :character   1st Qu.:14.00  
##  Median :6.000   Mode  :character   Mode  :character   Median :17.00  
##  Mean   :5.889                                         Mean   :16.86  
##  3rd Qu.:8.000                                         3rd Qu.:19.00  
##  Max.   :8.000                                         Max.   :35.00  
##       hwy             fl               class          
##  Min.   :12.00   Length:234         Length:234        
##  1st Qu.:18.00   Class :character   Class :character  
##  Median :24.00   Mode  :character   Mode  :character  
##  Mean   :23.44                                        
##  3rd Qu.:27.00                                        
##  Max.   :44.00

Utilize a ajuda do R para explorar as variáveis deste banco de dados.

?mpg

Para responder a nossa pergunta inicial, vamos começar fazendo um gráfico de dispersão entre as variáveis displ (tamanho do motor de um carro em litros) x hwy (eficiência do combustível de um carro na estrada em milhas por galão).

Lembrando que para começar um gráfico sempre usamos a função ggplot(), que vai criar um sistema de coordenadas onde poderemos adicionar camadas. E o primeiro argumento dessa função é o conjunto de dados que iremos usar no gráfico. Após isso, iremos completar o gráfico adicionando camadas de pontos, no caso do gráfico de dispersão, geom_point().

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy))

O gráfico nos mostra uma possível relação negativa entre eficiência e tamanho do motor. Porém, temos um conjunto de pontos discrepantes, que parecem estar longe de uma reta negativamente inclinada traçada para esse conjunto de pontos. Lembram-se como podemos inserir essa reta? Vejamos abaixo:

ggplot(data = mpg, aes(x = displ, y = hwy)) + 
  geom_point()+geom_smooth(method = "lm")
## `geom_smooth()` using formula 'y ~ x'

OBSERVAÇÃO IMPORTANTE: Note que o aes() está sendo usado diretamente na função ggplot() e não no objeto geométrico. Que o mapeamento estético definido na função ggplot() é global. Ou seja, é aplicado para todos os objetos geométricos daquele gráfico, a menos que seja explicitado novamente em alguma camada.

Uma possível explicação para isso pode ser a existência de modelos híbridos no banco de dados. A variável class desse conjunto de dados classifica os carros em : compacto, médio e SUV. Como na época desse conjunto de dados, apenas carros pequenos eram híbridos, podemos usar essa variável para verificar a hipótese. Vamos então usar a variável class diferenciando os pontos por cores de acordo com essa variável. Note que fazemos isso usando dentro da função aes() o argumento color = class.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, color = class))

Podemos também usar o comando alpha = class para diferenciar as classes usando a transparência dos pontos (o que não é uma boa idéia quando temos muitas classes):

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, alpha = class))
## Warning: Using alpha for a discrete variable is not advised.

Ou ainda pelo formato dos pontos, usando shape= class:

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy, shape = class))
## Warning: The shape palette can deal with a maximum of 6 discrete values because
## more than 6 becomes difficult to discriminate; you have 7. Consider
## specifying shapes manually if you must have them.
## Warning: Removed 62 rows containing missing values (geom_point).

De acordo com os gráficos, os pontos “aberrantes” não parecem ser híbridos, mas sim esportivos. _____________________________________________________________________

O recurso FACETS:

gráficos construídos sobre um mesmo data frame mas separados por variáveis categóricas

Podemos dividir os nossos gráficos em “facetas” ou subplots. Para fazer isso, podemos usar facet_wrap(), que criará subplots a partir de uma única variável, que deve ser discreta. Vamos fazer vários gráficos de dispersão para cada conjunto de classe de carros. Portanto, usaremos facet_wrap(~class). Podemos também definir quantas linhas serão usadas, ou quantas colunas. Vamos acrescentar nrow=2, para que os subplots sejam divididos em duas linhas.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_wrap(~ class, nrow = 2)

Se quisermos duas colunas, substituímos por ncol=2:

ggplot(data = mpg) + 
    geom_point(mapping = aes(x = displ, y = hwy)) + 
     facet_wrap(~ class, ncol=2)

Para criar facetas (subplots) a partir de duas variáveis, usamos facet_grid(). Nesse caso, é preciso indicar duas variáveis para fazer o grid.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl)


TEMAS

Através da função theme() podemos modificar a aparência de um gráfico. Vamos usar o theme_dark().

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) + 
  facet_grid(drv ~ cyl) + theme_dark()

E agora theme_linedraw(). Vc pode explorar os diferentes temas disponíveis.

ggplot(data = mpg) + 
  geom_point(mapping = aes(x = displ, y = hwy)) +  theme_linedraw()

_____________________________________________________________

MÚLTIPLOS GRÁFICOS POR PÁGINAS

Diferente do comando facets(), agora nosso objetivo é colocar vários gráficos indepenentes separados em subplots e não dividí-los de acordo com uma variável categórica. Fora do ggplot, faríamos isso usando layout() e mfrow(). No ggplot, faremos usando da função grid.arrange(). Precisaremos instalar e carregar o pacote gridExtra.

#install.packages("gridExtra")
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.1.3

Agora faremos 3 gráficos

p1 <- ggplot(data=mpg, aes(x=displ)) + geom_bar(fill='blue')
p2 <- ggplot(data=mpg, aes(x=displ)) + geom_boxplot() 
p3 <- ggplot(data=mpg, aes(x=displ, y=hwy)) + geom_point(color="red")
grid.arrange(p1, p2, p3, ncol=2)