7.2 Agregando densidades y graficando Boxplot

Dadas las cualidades de la librería ggplot2, se pueden agregar nuevas capas a los gráficos, particularmente, a los histogramas antes realizados. La densidad se agrega con el argumento geom_density y se incorpora el parámetro alpha que regula la transparencia del relleno. A continuacuón, se muestra cómo se agregan las densidades:

plot1_Ponde + geom_density(fill = "blue", alpha = 0.3) |
  plot2_Ponde + geom_density(fill = "blue", alpha = 0.3)

Ahora bien, al aplicar aes(fill = Zone) permite que la densidad sea agregada para cada una de las agrupaciones como se muestra a continución,

plot3_Ponde + geom_density(aes(fill = Zone), alpha = 0.3) |
  plot4_Ponde + geom_density(aes(fill = Zone), alpha = 0.3)

En está oportunidad se agrega la desnidad por sexo,

plot5_Ponde + geom_density(aes(fill = Sex), alpha = 0.3) |
  plot6_Ponde + geom_density(aes(fill = Sex), alpha = 0.3)

Boxplot

El boxplot, diagrama de caja y bigotes, es un gráfico resumen presentado por John Tukey en 1977 que en la actualidad es ampliamente utilizado en la práctica estadística. En este diagrama se visualiza de forma general un conjunto de datos empleando el resumen de cinco números. La forma generada por este gráfico compuesto por un rectángulo (“caja”) y dos brazos (“bigotes”) suministra información sobre la relación ente los cuartiles (Q1, Q2 o mediana y Q3) y los valores mínimo y máximo, sobre la existencia de valores atípicos y la simetría de la distribución.

Para realizar este gráfico en ggplot2 se utiliza la función geom_boxplot. A continuación, se presentan los Boxplot para las variables ingresos y gastos respectivamente:

plot7_Ponde <- ggplot(
  data = encuesta, aes(x = Income, weight = wk)
) +
  geom_boxplot() +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()


plot8_Ponde <- ggplot(
  encuesta,
  aes(x = Expenditure, weight = wk)
) +
  geom_boxplot() +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot7_Ponde | plot8_Ponde

En los gráficos anteriores se puede observar que la variable ingresos tiene más variabilidad que la variable gastos. En ambos gráficos se observan datos atípicos.

Estos diagramas también permiten la comparación entre dos o más niveles de agrupamiento, por ejemplo, por zonas para las variables ingresos y gastos como se muestra a continuación,

plot9_Ponde <- ggplot(
  encuesta,
  aes(x = Income, weight = wk)
) +
  geom_boxplot(aes(fill = Zone)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot10_Ponde <- ggplot(
  encuesta,
  aes(x = Expenditure, weight = wk)
) +
  geom_boxplot(aes(fill = Zone)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot9_Ponde | plot10_Ponde

Observándose, entre otros que, para la variable gasto en la zona rural es donde más datos atípico hay.

Ahora, si se desea personalizar los colores del relleno debe hacer uso de la función scale_fill_manualcomo se muestra a continuación:

colorZona <- c(Urban = "#48C9B0", Rural = "#117864")
plot9_Ponde + scale_fill_manual(values = colorZona) |
  plot10_Ponde + scale_fill_manual(values = colorZona)

Para mayores colores, ver la ayuda de la librería. Ahora, si se desea comparar los ingresos y gastos por sexo se procede de la siguiente manera:

plot11_Ponde <- ggplot(
  data = encuesta,
  aes(x = Income, weight = wk)) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot12_Ponde <- ggplot(
  encuesta,
  aes(x = Expenditure, weight = wk)
) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot11_Ponde | plot12_Ponde

Definiendo el color del relleno para hombres y mujeres:

colorSex <- c(Male = "#5DADE2", Female = "#2874A6")
plot11_Ponde + scale_fill_manual(values = colorSex) |
  plot12_Ponde + scale_fill_manual(values = colorSex)

Realizando la comparación para más de dos categorías, por ejemplo región, se procede como:

plot13_Ponde <- ggplot(
  data = encuesta,
  aes(x = Income, weight = wk)) +
  geom_boxplot(aes(fill = Region)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot14_Ponde <- ggplot(
  data = encuesta,
  aes(x = Expenditure, weight = wk)) +
  geom_boxplot(aes(fill = Region)) +
  ggtitle("Ponderado") +
  coord_flip() +
  theme_cepal()

plot13_Ponde | plot14_Ponde

Personalizando los coles cuando hay más de dos categorías, se realiza como se muestra a continuación:

colorRegion <- c(
  Norte = "#D6EAF8", Sur = "#85C1E9",
  Centro = "#3498DB", Occidente = "#2E86C1", Oriente = "#21618C"
)
plot13_Ponde + scale_fill_manual(values = colorRegion) |
plot14_Ponde + scale_fill_manual(values = colorRegion)

La función geom_boxplotpermite realizar comparaciones con más de dos variables al tiempo. A continuación se compara los ingresos por sexo en las diferentes zonas.

plot15_Ponde <-ggplot(data = encuesta,
    aes(x = Income, y = Zone, weight = wk)) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  scale_fill_manual(values = colorSex) +
  coord_flip()
plot15_Ponde

De forma análoga podemos realizar la comparación de los gastos por sexo en las diferentes zonas:

plot16_Ponde <- ggplot(data = encuesta,
    aes(x = Expenditure, y = Zone, weight = wk)) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  scale_fill_manual(values = colorSex) +
  coord_flip()
plot15_Ponde / plot16_Ponde

Se puede extender las comparaciones a variables que tienen más de dos categorías.

plot17_Ponde <- ggplot(data = encuesta,
    aes(x = Income, y = Region, weight = wk)) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  scale_fill_manual(values = colorSex) +
  coord_flip()
plot17_Ponde

plot18_Ponde <- ggplot(data = encuesta,
    aes(x = Expenditure,
        y = Region, weight = wk)) +
  geom_boxplot(aes(fill = Sex)) +
  ggtitle("Ponderado") +
  scale_fill_manual(values = colorSex) +
  coord_flip()

plot17_Ponde / plot18_Ponde