27.8 Diagramas de dispersión

Los diagramas de dispersión se utilizan para un par de variables numéricas continuas. Se realizan con la geometría geom_point. Se les puede añadir una capa de ajuste lineal en los casos donde hay cierta correlación entre el par de variables.

ggplot(data = saber %>% filter(!is.na(estu_inse_individual))) +
  aes(x= estu_inse_individual, y = punt_matematicas) +
  geom_point(alpha = 0.2, shape = 20, color = "salmon") +
  geom_smooth(method = "lm", color = "maroon", linewidth = 0.2) +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019")

geom_smooth por defecto regresa la variable del eje y respecto a la variable del eje x, como debe ser.

Se ajustan los puntos numéricos que se desean presentar en cada eje:

ggplot(data = saber %>% filter(!is.na(estu_inse_individual))) +
  aes(x = estu_inse_individual,y = punt_matematicas) +
  geom_point(alpha = 0.2, shape = 20, color = "salmon") +
  geom_smooth(method = "lm", color = "maroon", linewidth = 0.2) +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019") +
  scale_x_continuous(breaks = seq(10, 90, 10)) +
  scale_y_continuous(breaks = seq(5, 100, 10)) +
  scale_color_brewer(palette = "Set2")

Automáticamente añade el intervalo de confianza al \(95\)% como una banda gris. Debido a la gran cantidad de datos, es muy estrecha.

La regresión se puede realizar por alguna variable categórica. Se añade en la aesthetic (aes).

# Si fuese necesario
saber$desemp_ingles %<>% 
  factor(levels = rev(levels(saber$desemp_ingles)),
                                ordered = TRUE)
levels(saber$desemp_ingles)
## [1] "B+" "B1" "A2" "A1" "A-"
ggplot(data = saber %>% filter(!is.na(estu_inse_individual))) +
  aes(x = estu_inse_individual, y = punt_matematicas,
      color = desemp_ingles) +
  geom_point(alpha = 0.2, shape = 20, color = "#882255") +
  geom_smooth(method = "lm", linewidth = 1) +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019",
       color = "Nivel desempeño\nen inglés") +
  scale_color_manual(values = c('#0077BB', '#33BBEE',  '#009988', '#EE7733', '#CC3311')) +
  scale_x_continuous(breaks = seq(10, 90, 10)) +
  scale_y_continuous(breaks = seq(5, 100, 10)) +
  theme_minimal()

La banda gris alrededor del nivel B+ es más ancha porque hay menor cantidad de datos, es decir, no hay muchos estudiantes en dicho nivel.

No se han modificado los colores de los puntos en función a la variable categórica porque se especificó un color fijo. Se elimina.

ggplot(data = saber %>% filter(!is.na(estu_inse_individual))) +
  aes(x = estu_inse_individual, y = punt_matematicas,
      color = desemp_ingles) +
  geom_point(alpha = 0.2, shape = 20) +
  geom_smooth(method = "lm", linewidth = 1) +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019",
       color = "Nivel desempeño\nen inglés") +
  scale_color_manual(values = c('#0077BB', '#33BBEE',  '#009988', '#EE7733', '#CC3311')) +
  scale_x_continuous(breaks = seq(10, 90, 10)) +
  scale_y_continuous(breaks = seq(5, 100, 10))

Obsérvese que se ubica dentro del aes().

Por defecto, el suavizado se realiza mediante loess, que realiza regresiones locales y el suavizado es curvo:

ggplot(data = saber %>% filter(!is.na(estu_inse_individual))) +
  aes(x = estu_inse_individual, y = punt_matematicas) +
  geom_point(alpha = 0.2, shape = 20, color = "salmon") +
  geom_smooth(linewidth = 0.8, color = "maroon") +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019")

Todas las capas que se han ido presentando se puede utilizar con todos los geomas. Y las características sobre unir parámetros se pueden aplicar también a los restantes. Por ejemplo, respecto a la forma del punto:

ggplot(data = saber %>% filter(!is.na(cole_bilingue))) +
  aes(x = estu_inse_individual, y = punt_matematicas,
      color = cole_bilingue, shape = cole_bilingue) +
  geom_point(alpha = 0.4, size = 1.2) +
  labs(title = "Desempeño en matemáticas en Saber 11",
       x = "Nivel socioeconómico familiar",
       y = "Puntaje",
       caption = "Fuente: ICFES 2019",
       color = "IE bilingüe",
       shape = "IE bilingüe") +
  scale_color_manual(values = c('#009988', '#CC3311'))