7.2 Geoms

Existen muchos objetos geométricos para diferentes tipos de gráficas dependiendo del tipo de variable a graficar.

En la referencia de ggplot se presenta una descripción de los elementos disponibles en ggplot2 así como otras características que no se tratarán en este taller.

A continuación, se presentan algunos ejemplos de gráficos comunes.



7.2.1 Suavizamiento

En este caso, se busca agregar una línea suavizada o tendencia al gráfico de dispersión anterior.

Este objeto geométrico ajusta un modelo para suavizar las observaciones. En el caso del ejemplo, por defecto ajusta un modelo no paramétrico llamado loess. La función para realizar esto es geom_smooth().

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  geom_smooth()
## `geom_smooth()` using method = 'loess'

Sin embargo, esto se puede modificar a un método de regresión lineal lm.

ggplot(mpg, aes(x = displ, y = hwy)) + 
  geom_point() + 
  geom_smooth(method = "lm")



7.2.2 Boxplot

El gráfico de caja y brazos o boxplot se crea con la función geom_boxplot().

Boxplot

El gráfico compara una variable categórica y una numérica.

En este caso se gráfica el rendimiento de gasolina en carretera (hwy) por cada tipo de auto (class).

ggplot(mpg, aes(x = class, y = hwy)) + 
  geom_boxplot(width = .3)

El gráfico de violín es muy parecido pero muestra la distribución de las observaciones. La función para este objeto geométrico es geom_violin().

En este caso se agrega otro mapeo estético fill = class que indica que cada gráfico de violín debe tener un color de relleno por clase de auto.

ggplot(mpg, aes(class, hwy)) + 
  geom_violin(aes(fill = class))

En ggplot es posible juntar ambos gráficos aprovechando la funcionalidad de capas.

ggplot(mpg, aes(class, hwy)) + 
  geom_violin(aes(fill = class)) +
  geom_boxplot(width = .3) 



7.2.3 Histogramas

El objeto geométrico para crear histogramas es geom_histogram().

Histogramas

Los histogramas muestran la distribución de una variable numérica.

Consiste en cortar la variable y contar el número de observaciones en cada corte.

En la función es posible controlar el número de cortes con el argumento bins. Se recomienda probar diferentes números de cortes dependiendo de la variable.

En el siguiente ejemplo se muestra el histograma del rendimiento de gasolina en carretera (hwy) con 5 cortes.

ggplot(mpg, aes(hwy)) + 
  geom_histogram(bins = 5)

O bien, con 20 cortes:

ggplot(mpg, aes(hwy)) + 
  geom_histogram(bins = 20)


También es posible obtener una estimación de la densidad de la variable. Puede entenderse como un suavizamiento del histograma.

La función de este objeto geométrico es geom_density()

ggplot(mpg, aes(hwy)) + 
  geom_density( color = "blue")



7.2.4 Barras

Las gráficas de barras se generan con el objeto geom_bar().

Este es uno de los objetos que hacen transformaciones estadísticas, en este caso en particular conteos.

En la siguiente gráfica se obtiene el conteo de observaciones en por tipo de automóvil (class).

ggplot(mpg, aes(class)) + 
  geom_bar(stat = "count")

Otra forma de obtener el mismo gráfico es usando la técnica split-apply-combine.

tab <- mpg %>% 
  group_by(class) %>% 
  summarise(freq = n())
tab %>% head
## # A tibble: 6 x 2
##        class  freq
##        <chr> <int>
## 1    2seater     5
## 2    compact    47
## 3    midsize    41
## 4    minivan    11
## 5     pickup    33
## 6 subcompact    35
ggplot(tab, aes(x = class, y = freq)) +
  geom_bar(stat = "identity")



7.2.5 Series de tiempo

En este tipo de gráficos se presenta la evolución de una variable en una medida temporal, como mes, año, día.

Este gráfico usa la base de datos pre cargada en ggplot2 llamada economics. Esta base contiene información económica de Estados Unidos en el tiempo.

str(economics)
## Classes 'tbl_df', 'tbl' and 'data.frame':    574 obs. of  6 variables:
##  $ date    : Date, format: "1967-07-01" "1967-08-01" ...
##  $ pce     : num  507 510 516 513 518 ...
##  $ pop     : int  198712 198911 199113 199311 199498 199657 199808 199920 200056 200208 ...
##  $ psavert : num  12.5 12.5 11.7 12.5 12.5 12.1 11.7 12.2 11.6 12.2 ...
##  $ uempmed : num  4.5 4.7 4.6 4.9 4.7 4.8 5.1 4.5 4.1 4.6 ...
##  $ unemploy: int  2944 2945 2958 3143 3066 3018 2878 3001 2877 2709 ...

Una variable debe ser la variable temporal que en este caso abarca desde el 1 de julio de 1967 hasta 1 de abril de 2015.

class(economics$date)
## [1] "Date"
summary(economics$date)
##         Min.      1st Qu.       Median         Mean      3rd Qu. 
## "1967-07-01" "1979-06-08" "1991-05-16" "1991-05-17" "2003-04-23" 
##         Max. 
## "2015-04-01"

En la siguiente gráfica se presenta la tasa de desempleo (unemploy) por población (pop) desde 1967 hasta 2015.

ggplot(economics, aes(date, unemploy/pop)) + 
  geom_line()



7.2.6 Información estadística

Los siguientes objetos stat_...() resumen información estadística con distintas transformaciones.

A continuación se presentan los siguientes gráficos:

  • Gráficos qq-plot
  • Distribución acumulada
  • Funciones de probabilidad
  • Funciones auto determinadas



QQ-Plot

stat_qq

Realiza una gráfica cuantil-cuantil de una muestra y la distribución teórica. Por defecto compara los cuantiles teóricos de la distribución normal.

tab <-  data.frame(
  simulación = rexp(300, rate = 5)
)
ggplot(tab, aes(sample = simulación)) + 
      stat_qq()

En el siguiente ejemplo se modifica para comparar con los cuantiles teóricos de la distribución exponencial.

ggplot(tab, aes(sample = simulación)) + 
      stat_qq(distribution = qexp, 
              dparams = 5) 



Distribución acumulada

stat_ecdf

Este objeto realiza las transformaciones necesarias para presentar la distribución acumulada de una muestra.

En la siguiente gráfica se compara la distribución de simulaciones normales con distintos parámetros.

df <- data.frame(x = c(rnorm(n = 100, mean = 0, sd = 3), 
                       rnorm(n = 100, mean = 0, sd = 10)),
                 g = gl(n = 2, k = 100))
ggplot(df, aes(x, colour = g)) + 
  stat_ecdf()



Función auto determinada

stat_function

Este objeto permite graficar funciones auto determinadas en un rango específico.

La siguiente gráfica muestra una función predeterminada del objeto estadístico dnorm, que es la distribución normal con media 2 y desviación 0.5.

ggplot(data.frame(x = c(-5, 7)), aes(x)) + 
  stat_function(fun = dnorm, 
                args = list(mean = 2, sd = .5))

Distribución de función específica

stat_function()

Es posible graficar cualquier función en un rango específico determinado por nosotros.

En este ejemplo buscamos graficar la siguiente función:

sin_2_fun <- function(x){
  sin(x)^2
}

En el rango de -10 a 10 definido como dataframe, la función stat_function() evaluará la función sin_2_fun definida antes en el rango.

ggplot(data = data.frame(x = c(-10, 10)), 
       aes(x = x)) + 
  stat_function(fun = sin_2_fun, size = 1, color = 'salmon')

O bien, con funciones predeterminadas en R, como la función dnorm() donde los argumentos se especifican en una lista.

ggplot(data.frame(x = c(-5, 7)), aes(x)) + 
  stat_function(fun = dnorm, 
                args = list(mean = 2, sd = .5))