VIZ de datos con ggplot y Rmarkdown

Tema: Gráfico de Puntos y Dispersión

Author

Danny Murillo González - UTP - CIDITIC

1 Requisitos

1.1 Cargar librerias

Librerias necesarias para el curso. Se deben haber instalado los paquetes previament con install.packages(nombre del paquete).

library(tidyverse) # incluye ggplot2
library(readxl) # funciones para importar xlsx
library(janitor) # funciones de limpieza
library(patchwork) #combinar gráficos de ggplot
library(ggExtra)
library(ggthemes) # nuevas temas para los 
library(plotly) #gráficos interactivos # remotes::install_github("plotly/plotly")
library(tibble)
library(skimr) # reseumen numerico
library(modeest)
library(ggrepel) # añadir etiquetas a los gráficos
library(RColorBrewer) #paletas de colores
library(plotly) #graficos interactivos
library(corrplot)

1.2 Carga de datos

Se utilizará los datos de estudio de lectura y matematica de las escuelas de Miami en 2012 y 2013 por grado y Distrito llamado SchoolsMiamiDade.

Significado de las variables del dataframe SchoolsMiamiDade
Escuelas de Miami con notas promedio en las materias de lectura y matematica en los años 2012 y 2013.

SchoolName : Nombre de la Escuela
BoardDistrict : Núemero de Dsitrito donde esta la escuela
SchoolGrade : Grado al que se le aplico la prueba
Reading2012 : puntaje de 1 a 100 en Lectura 2012
Reading2013: puntaje de 1 a 100 en Lectura 2013
ReadingDifference: diferencia entre 2013 y 2012 en lectura
Math2012: puntaje de 1 a 100 en Matemática 2012
Math2013: puntaje de 1 a 100 en Matemática 2013
MathDifference: diferencia entre 2013 y 2012 en matemática

SchoolsMiamiDade<- read.csv("data/SchoolsMiamiDade.csv")
SchoolsMiamiDade <- as_tibble(SchoolsMiamiDade)
head(SchoolsMiamiDade,5)
# A tibble: 5 × 9
  SchoolName BoardDistrict SchoolGrade Reading2012 Reading2013 ReadingDifference
  <chr>      <chr>         <chr>             <int>       <int>             <int>
1 0041 AIR … (9)           A                    82          80                -2
2 0070 CORA… (9)           A                    71          73                 2
3 0071 EUGE… (5)           A                    69          69                 0
4 0072 SUMM… (9)           B                    57          50                -7
5 0073 MAND… (9)           C                    34          32                -2
# ℹ 3 more variables: Math2012 <int>, Math2013 <int>, MathDifference <int>
# Verificar tipos de datos
SchoolsMiamiDade |> 
  glimpse()
Rows: 460
Columns: 9
$ SchoolName        <chr> "0041 AIR BASE ELEMENTAR", "0070 CORAL REEF MONT AC"…
$ BoardDistrict     <chr> "(9)", "(9)", "(5)", "(9)", "(9)", "(2)", "(4)", "(3…
$ SchoolGrade       <chr> "A", "A", "A", "B", "C", "F", "A", "A", "A", "C", "D…
$ Reading2012       <int> 82, 71, 69, 57, 34, 28, 68, 73, 68, 39, 38, 45, 53, …
$ Reading2013       <int> 80, 73, 69, 50, 32, 29, 70, 72, 68, 32, 41, 35, 51, …
$ ReadingDifference <int> -2, 2, 0, -7, -2, 1, 2, -1, 0, -7, 3, -10, -2, -1, -…
$ Math2012          <int> 71, 64, 66, 50, 38, 26, 68, 78, 73, 41, 43, 59, 56, …
$ Math2013          <int> 75, 56, 64, 54, 39, 47, 66, 77, 76, 39, 47, 50, 55, …
$ MathDifference    <int> 4, -8, -2, 4, 1, 21, -2, -1, 3, -2, 4, -9, -1, -3, -…
SchoolsMiamiDade$BoardDistrict <- as.factor(SchoolsMiamiDade$BoardDistrict)
SchoolsMiamiDade$SchoolGrade <- as.factor(SchoolsMiamiDade$SchoolGrade)

# ver resumen de datos
SchoolsMiamiDade |> 
  summary()
  SchoolName        BoardDistrict SchoolGrade  Reading2012      Reading2013   
 Length:460         (9)    : 76    : 55       Min.   :  0.00   Min.   : 0.00  
 Class :character   (2)    : 75   A:204       1st Qu.: 36.00   1st Qu.:37.00  
 Mode  :character   (1)    : 53   B: 85       Median : 51.00   Median :52.50  
                    (6)    : 53   C: 77       Mean   : 50.98   Mean   :52.08  
                    (4)    : 47   D: 31       3rd Qu.: 67.00   3rd Qu.:68.00  
                    (8)    : 47   F:  7       Max.   :100.00   Max.   :97.00  
                    (Other):109   I:  1       NA's   :17                      
 ReadingDifference    Math2012         Math2013      MathDifference    
 Min.   :-17.000   Min.   :  0.00   Min.   :  0.00   Min.   :-25.0000  
 1st Qu.: -2.000   1st Qu.: 41.00   1st Qu.: 40.00   1st Qu.: -5.0000  
 Median :  1.000   Median : 53.00   Median : 52.50   Median : -1.0000  
 Mean   :  1.113   Mean   : 53.26   Mean   : 52.29   Mean   : -0.7046  
 3rd Qu.:  4.000   3rd Qu.: 69.00   3rd Qu.: 67.00   3rd Qu.:  4.0000  
 Max.   : 33.000   Max.   :100.00   Max.   :100.00   Max.   : 25.0000  
 NA's   :17        NA's   :91       NA's   :78       NA's   :91        
pairs(SchoolsMiamiDade[, c(4:8)])

cor(na.omit(SchoolsMiamiDade[, c(4:8)]))
                  Reading2012 Reading2013 ReadingDifference   Math2012
Reading2012         1.0000000   0.9609235       -0.13799645  0.9285369
Reading2013         0.9609235   1.0000000        0.14156170  0.8947162
ReadingDifference  -0.1379965   0.1415617        1.00000000 -0.1193211
Math2012            0.9285369   0.8947162       -0.11932109  1.0000000
Math2013            0.8856214   0.8800471       -0.01833436  0.9384998
                     Math2013
Reading2012        0.88562135
Reading2013        0.88004709
ReadingDifference -0.01833436
Math2012           0.93849976
Math2013           1.00000000

2 Gráficos de Dispersión y puntos


Los gráficos de dispersión (gráfico de puntos, diagrama de XY) utilizan dos variables cuantitativas para generar una colección de puntos colocados usando coordenadas cartesianas para mostrar valores de dos variables. Al mostrar una variable en cada eje, se puede detectar si existe una relación o correlación entre las dos variables.
Se pueden interpretar varios tipos de correlación a través de los patrones mostrados en los diagramas de dispersión. Estos son: positivo (los valores aumentan juntos), negativo (un valor disminuye a medida que el otro aumenta), nulo (sin correlación).

2.1 Análisis de la correlación de variables

#correlación de variables, se omiten valores nulos
 data_ <- cor(na.omit(SchoolsMiamiDade[,4:9]))
#gráfico de correlación
 corrplot(data_)

3 Gráfico de puntos

Se pueden construir gráfico de dispersión con ggplot2 utilizando la geometría geom_point() el cual requiere de 2 variables por lo regular cuantitativa. Sin embargo, tambien es posible generar este tipo de gráficos con una variable númerica Reading2012 y una la variable BoardDistrict tipo categorica.

3.1 Una variable cuantitativa y una cualitativa

El gráfico muestra la posición de cada escuela según puntaje, por cada distrito.

#grafico de dispersión dos variables una cuantitativa y otra cualitativa
# Materia de lectura 2012 en los diferentes distritos
SchoolsMiamiDade |> 
  ggplot(aes(Reading2012,BoardDistrict))+
  geom_point() 
Warning: Removed 17 rows containing missing values (`geom_point()`).

# Materia de lectura 2012 en los diferentes grados
SchoolsMiamiDade |>
ggplot(aes(Reading2012,SchoolGrade))+
  geom_point() 
Warning: Removed 17 rows containing missing values (`geom_point()`).

3.2 Color en los puntos del gráfico

Para modificar el color de los puntos en el gráfico podemos utilizar la porpiedad fill en la geometria de puntos.

SchoolsMiamiDade |> 
  ggplot(aes(Reading2012,BoardDistrict))+
  geom_point(color="salmon") 
Warning: Removed 17 rows containing missing values (`geom_point()`).

¿Cuántas escuelas están por encima de de la nota minima de 71 (como ejemplo) en lectura y matemática 2012

Para responde esta pregunta utilizaremos la función filter(Reading2012 >= 71) para crear el filtro de las escuelas con puntaje mayor o igual a 71.
El resultado es, lectura = 87, matematica = 74.

# filtro y conteo de datos en lectura 2012
SchoolsMiamiDade |>
  filter(Reading2012 >= 71) |> 
  nrow()
[1] 87
# filtro y conteo de datos en matematica 2012
SchoolsMiamiDade |> 
  filter(Math2012 >= 71) |>
  nrow()
[1] 74

Representación de gráfico de dispersión a la pregunta anterior
Para colorear las escuelas según puntaje mayor a 71 podemos utilizar la misma condición del filtro Reading2012 >= 71 usado en el codigo anterior para buscar los valores, este filtro lo podemos colocar en la propiedad color de la geometria geom_point(aes(color=Reading2012 >= 71)) . De esta forma ggplot hará la separación de colores por nosotros.

# Gráfico con dos variables y colorear con filtro
# Lectura 2012
SchoolsMiamiDade |> 
ggplot(aes(Reading2012,BoardDistrict))+
  geom_point(aes(color=Reading2012 >= 71)) 
Warning: Removed 17 rows containing missing values (`geom_point()`).

Eliminar valor vacios en el gráfico El gráfico anterior coloca en la leyenda los colores de los valores mayores a 71 como TRUE, los menores a 71 como FALSE, pero tambien coloca el valor de NA que representan los valores nulos. Para eliminar estos valores podemos filtrar los datos previos al uso de ggplot utilizando na.omit(Reading2012) otra opción es utilizar filter(Reading2012 !=““).

# Gráfico - se eliminan datos vacios
SchoolsMiamiDade |>
  na.omit(Reading2012) |>
  ggplot(aes(Reading2012,BoardDistrict))+
    geom_point(aes(color=Reading2012 >= 71))  

Eliminar leyenda Si deseamos eliminar la leyenda de color (que no aporta nada), podemos colocar al final la capa guides(color = FALSE).

# Gráfico - se elimina leyenda de colores de datos
SchoolsMiamiDade |>
  na.omit(Reading2012) |>
  ggplot(aes(Reading2012,BoardDistrict))+
    geom_point(aes(color=Reading2012 >= 71))+
  guides(color = "none")

4 Gráfico de dispersión

4.1 Dos variables numéricas

Utilizamos las variables relacionadas con los puntajes de matematica 2012 y lectura 2012, ambos datos cuantitativos. El gráfico se puede interpretar una correlación fuerte positiva (los valores aumentan juntos).

# Gráfico con dos variables numericas
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point() 
Warning: Removed 91 rows containing missing values (`geom_point()`).

Modificar color y tamaño en los puntos

# Gráfico con dos variables numericas y un solo color en los puntos
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color="salmon"), 
             size=3) 
Warning: Removed 91 rows containing missing values (`geom_point()`).

4.2 Tres variables en el gráfico

En los diagramas de dispersión en ggplot, es posible añadir una tercera variable, en este caso la vatriable categorica BoardDistrict en la porpiedad color de la geometria.
De esta forma es posible identificar las escuelas con mayor puntaje en ambas materia y a que distrito pertencen,

# Gráfico con dos variables numéricas y colores según los distritos
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict), 
             size=3) 
Warning: Removed 91 rows containing missing values (`geom_point()`).

Modificar el tamaño de los puntos y la transparencia (valores de 0 a 1)
Uno de los inconvenientes comunes en los gráficos de dispersión con muchos puntos, es el solapamiento de estos, por lo que aveces no se puede apreciar de forma correcta el número de puntos, Para ello podemos utilizar la propiedad alpha para la transparencia. Se aumenta el tamaño de los puntos a 4 a manera de ejemplo para mostrar mejor el solapamiento.

# Tamaño de los puntos fijos utilizando size = 4
SchoolsMiamiDade |>
ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
            color=BoardDistrict), 
             alpha=0.55, 
             size=4) 
Warning: Removed 91 rows containing missing values (`geom_point()`).

4.3 Cuatro variables

Podemos utilizar una cuarta variable en este tipo de gráfico modificando el tamañó de los puntos de forma dinámica, en este caso la variable a utilizar Reading2012 debe ser de tipo numérica. Al realizar esto se generan dos leyendas en el gráfico, uno de color y otra se size.

# Tamaño de los puntos dinámicos utilizando size = Reading2012 
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict, 
                 size=Reading2012), 
                 alpha=0.55)
Warning: Removed 91 rows containing missing values (`geom_point()`).

# eliminar leyenda de size
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict, 
                 size=Reading2012), 
                 alpha=0.55)+
  guides(size="none")+
  labs(color="Distrito")
Warning: Removed 91 rows containing missing values (`geom_point()`).

4.4 Cinco variables

A manera de Ejemplo (carga en la visualización), es posible incluir una quinta variable en el gráfico modificando la propiedad shape en el geometria, la variable que modifca etse parámetro debe ser categorica.

# Tamaño de los puntos dinámicos y la forma del punto según el Distrito
SchoolsMiamiDade |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict, 
                 size=Reading2012, 
                 shape=SchoolGrade),
                 alpha=0.45)+
  guides(size="none")+
  labs(color="Distrito")
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 92 rows containing missing values (`geom_point()`).

4.5 Eliminar datos vacios

Se verifican los datos con una tabla de frecuencia.

#tabla de frecuencia 
# Una forma de mostrar los datos categoricos
# y el numero de valores sin categoria
table(SchoolsMiamiDade$BoardDistrict)

 () (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) 
  2   1  53  75  28  47  41  53  37  47  76 
table(SchoolsMiamiDade$SchoolGrade)

      A   B   C   D   F   I 
 55 204  85  77  31   7   1 
summary(SchoolsMiamiDade)
  SchoolName        BoardDistrict SchoolGrade  Reading2012      Reading2013   
 Length:460         (9)    : 76    : 55       Min.   :  0.00   Min.   : 0.00  
 Class :character   (2)    : 75   A:204       1st Qu.: 36.00   1st Qu.:37.00  
 Mode  :character   (1)    : 53   B: 85       Median : 51.00   Median :52.50  
                    (6)    : 53   C: 77       Mean   : 50.98   Mean   :52.08  
                    (4)    : 47   D: 31       3rd Qu.: 67.00   3rd Qu.:68.00  
                    (8)    : 47   F:  7       Max.   :100.00   Max.   :97.00  
                    (Other):109   I:  1       NA's   :17                      
 ReadingDifference    Math2012         Math2013      MathDifference    
 Min.   :-17.000   Min.   :  0.00   Min.   :  0.00   Min.   :-25.0000  
 1st Qu.: -2.000   1st Qu.: 41.00   1st Qu.: 40.00   1st Qu.: -5.0000  
 Median :  1.000   Median : 53.00   Median : 52.50   Median : -1.0000  
 Mean   :  1.113   Mean   : 53.26   Mean   : 52.29   Mean   : -0.7046  
 3rd Qu.:  4.000   3rd Qu.: 69.00   3rd Qu.: 67.00   3rd Qu.:  4.0000  
 Max.   : 33.000   Max.   :100.00   Max.   :100.00   Max.   : 25.0000  
 NA's   :17        NA's   :91       NA's   :78       NA's   :91        
SchoolsMiamiDade |>
  filter(SchoolGrade!=" ") |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict, 
                 size=Reading2012, 
                 shape=SchoolGrade),
                 alpha=0.45)+
  guides(size="none")+
  labs(color="Distrito")
Warning: Removed 64 rows containing missing values (`geom_point()`).

Eliminar Distritos vacios o con minimo de escuelas* (opcional)
Eliminar escuelas con valores () y (0) en los distritos que no aportan información al gráfico. Se verifican los datos con una tabla de frecuencia.

#tabla de frecuencia de distritos
table(SchoolsMiamiDade$BoardDistrict)

 () (0) (1) (2) (3) (4) (5) (6) (7) (8) (9) 
  2   1  53  75  28  47  41  53  37  47  76 
#eliminar datos de distritos con valor ()
SchoolsMiamiDade |>
  filter(BoardDistrict!="()")  |>
  ggplot( aes(Reading2012,Math2012))+
  geom_point(aes(color=BoardDistrict), 
             alpha=0.55, 
             size=4)+
  guides(color = guide_legend("Distritos"))
Warning: Removed 89 rows containing missing values (`geom_point()`).

#eliminar datos de distritos con valores vacios (), (0)
SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot( aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict), 
             alpha=0.55, 
             size=4)+
  guides(color = guide_legend("Distritos"))
Warning: Removed 89 rows containing missing values (`geom_point()`).

5 Énfasis en los gráficos

5.1 Enfasis colores en puntos

En un gráfico de dispersión tambien podemos hacer énfasis en una categoria en particular, utilizando colores manuales. En este ejmplo contabilizamso el número de categorias de la variable BoardDistrict que son 11 eliminando las categorias “()”,“(0)”, por lo que serían 9 categorias, por lo tanto deberiamos crear nueve colores para cada categoria almacenado en el vector colores.

# Calcular Cantidad de categorias
table(SchoolsMiamiDade$BoardDistrict) |> 
  length()
[1] 11
#El número de colores esta asociado al número de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,
             "#636363" ,"#636363","#636363", "#636363")
colores[3] <- "#F26419"


SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict), 
             alpha=0.5, 
             size=4)+
  guides(size="none")+
  labs(color="Distrito")+
  scale_color_manual(values = colores)
Warning: Removed 89 rows containing missing values (`geom_point()`).

5.2 Enfasis transparencia en puntos

Otra forma de hacer énfasis en el gráfico es a través de la transparencia alpha, para ello debemos crear un vector transparenciacon los valores del valor alpha de cada valor de la variable BoardDistrict y utilizando scale_alpha_manual(). Es importante resaltar que la propiedad alfa en la estetica aes() debe llevar la variable BoardDistrict.

# Calcular Cantidad de categorias
table(SchoolsMiamiDade$BoardDistrict) |> 
  length()
[1] 11
# El número de colores esta asociado al número de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,
             "#636363" ,"#636363","#636363", "#636363")
colores[3] <- "#F26419"

# valores de trasnparencia
transparencia <- sample(0.2,9, replace = TRUE)
transparencia[3] <- 1.0

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict, 
             alpha=BoardDistrict), 
             size=4)+
  guides(size="none")+
  labs(color="Distrito")+
  scale_color_manual(values = colores)+
  scale_alpha_manual(values = transparencia)
Warning: Removed 89 rows containing missing values (`geom_point()`).

5.3 Etiquetas en los puntos

Para mostarr las etiquetas o texto en los puntos del gráfico debemos utilizar la geoametria geom_text() y el valor de la etiqueta a utilizar label=variable.

# El número de colores esta asociado al número de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,
             "#636363" ,"#636363","#636363", "#636363")
colores[3] <- "#F26419"

# valores de trasnparencia
transparencia <- sample(0.2,9, replace = TRUE)
transparencia[3] <- 1.0

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict, 
             alpha=BoardDistrict), 
             size=4)+
  guides(size="none", 
         alpha ="none")+
  labs(color="Distrito")+
  scale_color_manual(values = colores)+
  scale_alpha_manual(values = transparencia) +
  geom_text(aes(
          label=SchoolName), 
          size=2.5,
          hjust=-0.1, 
          vjust=0.1, 
          color="#252b2b"
           )
Warning: Removed 89 rows containing missing values (`geom_point()`).
Warning: Removed 89 rows containing missing values (`geom_text()`).

5.4 Enfasis en el texto

POdemos tambien hacer énfasis en las etiquetas de texto, colocando solo las etiquetas de los punto que queremos, para ello es necesario crear una variable que contenga esos datos. etiquetas <- (ifelse(SchoolsMiamiDade\(BoardDistrict=="(3)", SchoolsMiamiDade\)SchoolName,” “))**
SchoolsMiamiDade$label_ <- etiquetas
Si el distrito es”(3)” asignar a la etiqueta el nombre de la escuela de la variable
SchoolName** , sino le asigna espacio en blanco a la etiqueta. Alamcenamos este vector al tibble SchoolsMiamiDade.

# El número de colores esta asociado al número de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,
             "#636363" ,"#636363","#636363", "#636363")
colores[3] <- "#F26419"

# valores de trasnparencia
transparencia <- sample(0.2,9, replace = TRUE)
transparencia[3] <- 1.0

#valores de etiqueta
# SI el distrito es "(3)" asignar a la etiqueta el nombre de la escuela
# sino le asigna espacio en blanco a la etiqueta
etiquetas <- (ifelse(SchoolsMiamiDade$BoardDistrict=="(3)", 
                     SchoolsMiamiDade$SchoolName," "))
SchoolsMiamiDade$label_ <- etiquetas

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict, 
             alpha=BoardDistrict), 
             size=4)+
  guides(size="none", 
         alpha ="none")+
  labs(color="Distrito")+
  scale_color_manual(values = colores)+
  scale_alpha_manual(values = transparencia) +
  geom_text(aes(
          label=label_),
          size=2.5,
          hjust=-0.1, 
          vjust=0.1, 
          color="#252b2b"
           )
Warning: Removed 89 rows containing missing values (`geom_point()`).
Warning: Removed 89 rows containing missing values (`geom_text()`).

Recortar texto de la etiqueta que contien elo snombre de las escuelas
Para recortar el nombre de las etiquetas, podemos utilizar el siguiente código str_sub(etiquetas,1,4), este selecciona de cada etiqueta la posición 1 al 4 de cada texto y luego se lo asigna a la variable label del dataframe.

# El número de colores esta asociado al número de categorias
# En el caso de Región son 9 categorias
colores <- c("#636363","#636363", "#636363", "#636363" ,"#636363" ,
             "#636363" ,"#636363","#636363", "#636363")
colores[3] <- "#F26419"

# valores de trasnparencia
transparencia <- sample(0.2,9, replace = TRUE)
transparencia[3] <- 1.0

#valores de etiqueta
# SI el distrito es "(3)" asignar a la etiqueta el nombre de la escuela
# sino le asigna espacio en blanco a la etiqueta
etiquetas <- (ifelse(SchoolsMiamiDade$BoardDistrict=="(3)", 
                     SchoolsMiamiDade$SchoolName," "))

# Selecciona solo los primeros cuatros digitos de la etiqueta
# que contiene los nombres
SchoolsMiamiDade$label_ <- str_sub(etiquetas,1,4)

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
             color=BoardDistrict, 
             alpha=BoardDistrict), 
             size=4)+
  guides(size="none", 
         alpha ="none")+
  labs(color="Distrito")+
  scale_color_manual(values = colores)+
  scale_alpha_manual(values = transparencia) +
  geom_text(aes(
          label=label_),
          size=2.5,
          hjust=-0.15, 
          vjust=0.1, 
          color="#252b2b"
           )
Warning: Removed 89 rows containing missing values (`geom_point()`).
Warning: Removed 89 rows containing missing values (`geom_text()`).

6 Facetas

6.1 Facetas para clasificar gráficos

Podemos utilizar facetas para separar los gráficos de dispersión por una variable categórica, podemos utilizar facet_wrap() o facet_grid() la forma de dsitribución es diferente.

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict), 
                 alpha=0.55, 
                 size=4) +
  labs(title="Escuelas  con puntajes de lectura en Matemática y Lectura por Distrito",
       subtitle="Datos de USA - 2012") +
  ylab("Notas Matemática") + 
  xlab("Notas Lectura")+
  guides(color = guide_legend("Distritos")) +
  facet_wrap(~BoardDistrict)
Warning: Removed 89 rows containing missing values (`geom_point()`).

Uso de la función facet_grid()

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Math2012))+
  geom_point(aes(
                 color=BoardDistrict), 
                 alpha=0.55, 
                 size=4) +
  labs(title="Escuelas  con puntajes de lectura en Matemática y Lectura por Distrito",
       subtitle="Datos de USA - 2012") +
  ylab("Notas Matemática") + 
  xlab("Notas Lectura")+
  guides(color = guide_legend("Distritos")) +
  facet_grid(BoardDistrict~.)
Warning: Removed 89 rows containing missing values (`geom_point()`).

6.2 Evaluación de las variables de lectura en los años 2012 y 2013

Ambos datos cuantitativos Reading2013,Reading2012.

SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2013,Reading2012))+
  geom_point(size=2, aes(color=BoardDistrict), alpha=0.55) +
  labs(title="Escuelas  con puntajes de lectura por Distrito",
       subtitle="Datos de USA - 2012") +
   ylab("notas de Lectura 2012") + xlab("Notas de Lectura 2013")+
  guides(color = guide_legend("Distritos"))
Warning: Removed 15 rows containing missing values (`geom_point()`).

7 Recta de regresión lineal

Se puede crear una recta de regresión lineal a través de la geometría geom_smooth() y sus métodos geom_smooth(method=‘lm’) : - lm modelo lineal - glm - gam - loess ajuste de regresión local suave

#metodol lm
SchoolsMiamiDade |>
  filter(BoardDistrict!=c("()","(0)"))  |>
  ggplot(aes(Reading2012,Reading2013))+
  geom_point(aes(color=BoardDistrict)) +
  labs(title="Escuelas  con puntajes de lectura por Distrito y diferencia de puntos por año", subtitle="Datos de USA - 2012") +
  ylab("Puntos Lectura 2013") + xlab("Puntos Lectura 2012") +
  geom_smooth(method='lm')
`geom_smooth()` using formula = 'y ~ x'
Warning: Removed 15 rows containing non-finite values (`stat_smooth()`).
Warning: Removed 15 rows containing missing values (`geom_point()`).

8 Práctica

Crear gráfico de puntos utilizando los datos INEC-morbilidad-2023-10-14.csv. Es necesario filtrar los datos seleccionando solo: Region=“PANAMA METRO”
Genero=“M”
Edad=“15 a 19 años” o igual a Edad=“20 a 24 años”
Se debe usar como en los colores la variable Causas y hacer énfasis en los colores en la **Causa=Candidiasis de la vulva y de la vagina (n77.1*). El valor de alpha=035 (opcional) y la faceta se debe hacer utilizando la variable edad**.

Gráfico de resultado: