Jornada de Iniciación Científica - Centro Regional de Chiriquí


Tema 2: Gráficos en R - Dispersión o puntos


Los diagramas de dispersión (gráfico de puntos, diagrama de XY) usan 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).

#cargar librerias ggplot
#-----------------------------------------
library(ggplot2)

# leer datos de SchoolsMiamiDade
SchoolsMiamiDade<- read.csv("SchoolsMiamiDade.csv")

Significado de las variables del dataframe SchoolsMiamiDade

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

Crear gráfico de dispersión en R

Se pueden construir gráfico de dispersión con ggplot2 utilizando la geometría geom_point() el cual requiere de 2 variables como entrada X /Y por lo menos una númerica.

Gráfico de dispersión de los puntajes de lectura en 2012 en cada Distrito

El gráfico muestra el puntaje de cada escuela por Distrito donde las escuelas de los distritos 3-9 tienen una mejor puntuación. En este ejemplo se utiliza la variable númerica Reading2012 y la variable BoardDistrict.

#grafico de dipsersión 
ggplot(SchoolsMiamiDade, aes(Reading2012,BoardDistrict))+
  geom_point() 
## Warning: Removed 17 rows containing missing values (geom_point).

Gráfico de dispersión de la lectura en 2012 de cada Distrito con línea de referencia

Podemos crear una línea de referencia para iniciar un análisis del gráfico.
Las líneas en el gráfico se realizan con la capa geom_vline().

A manera de ejercicio, seleccionaremos las escuelas que tienen un puntaje mayor o igual a 75, creamos una línea para separar la escuelas con ese puntaje.

# grafico con dos variables y linea vertical 
ggplot(SchoolsMiamiDade, aes(Reading2012,BoardDistrict))+
  geom_point() +
  geom_vline(xintercept = 75) 
## Warning: Removed 17 rows containing missing values (geom_point).


Añadir color a la línea, ancho de línea y tipo de linea al gráfico como estética.

# grafico con dos variables y linea vertical 
ggplot(SchoolsMiamiDade, aes(Reading2012,BoardDistrict))+
  geom_point() +
  geom_vline(xintercept = 75, colour ="red", linetype="dashed", size=1) 
## Warning: Removed 17 rows containing missing values (geom_point).

Añadir un texto o etiqueta en el gráfico como información.

# grafico con dos variables y linea vertical 
ggplot(SchoolsMiamiDade, aes(Reading2012,BoardDistrict))+
  geom_point() +
  geom_vline(xintercept = 75, colour ="red", linetype="dashed", size=1) +
  geom_text(aes(label="MEDIA = 75", x=82,y=2), colour="red")
## Warning: Removed 17 rows containing missing values (geom_point).

¿Cuántas escuelas están por encima de la media (75)?

Para responde esta pregunta utilizaremos la función subset(tabla, variable) para crear un subgrupo de datos con el filtro, escuelas con puntaje mayor o igual a 75.

#escuelas con calificación en lectura mayor e igual a 75
#creamos un subgrupo
escuelaslECTURA <- subset(SchoolsMiamiDade, SchoolsMiamiDade$Reading2012 >= 75)

#numero de escuelas
nrow(escuelaslECTURA)
## [1] 62
#porcentaje de escuelas con calificación en lectura mayor e igual a 75
# numero de escuelas con 75 o mas puntos / total de escuelas estudiadas
porcentaje_75 <- nrow(escuelaslECTURA) / nrow(SchoolsMiamiDade)
porcentaje_75 
## [1] 0.1347826
#porcentake de las escuelas por encima de 75 puntos
porcentaje75 <- porcentaje_75  *100
porcentaje75
## [1] 13.47826

¿Cuáles son los distritos con escuelas por encima de la media (75)?

Para conocer esta dato utilizamos las tablas de contingencia y el dataFrame creado escuelaslECTURA.

# escuelas con mayor de 75 puntos por distrito 
# las seleccionamos del subfrupo escuelaslECTURA
escuelas_75 <- table(escuelaslECTURA$BoardDistrict)
escuelas_75
## 
## (1) (2) (3) (4) (5) (6) (7) (8) (9) 
##   1   4   8   3   7  13  10   9   7

Utilizar condición en el color de lo spuntos relacionado con el puntaje de las escuelas

Para colorear las escuelas de puntaje mayor a 75 debemos utilizar la condición de color Reading2012 >= 75. Si deseamos eliminar la leyenda de color (que no aporta nada), podemos colocar al final la capa guides(color = FALSE) .

# grafico con dos variables y linea vertical 
ggplot(SchoolsMiamiDade, aes(Reading2012,BoardDistrict))+
  geom_point(aes(color=Reading2012 >= 75), size=3) +
  geom_vline(xintercept = 75, colour ="red", linetype="dashed", size=1) +
  geom_text(aes(label="MEDIA = 75", x=82,y=2), colour="red") +
  labs(title="Escuelas por Distrito en puntajes de Lectura",
       subtitle="Escuelas  mayor a 75 puntos en Lectura - 2012")+
  guides(color = FALSE) 
## Warning: Removed 17 rows containing missing values (geom_point).

Análisis de los datos

De las 460 escuelas, el 13.48% está por encima de la media nacional (75 puntos) donde todos los Distritos tienen escuelas por encima del puntaje, pero los distritos (6) y (7) son los que más escuelas tiene por encima de 75 puntos con 13 y 10 respectivamente.

Gráfico de Dispersión con dos variable numéricas

Utilizamos las variables relacionadas con los puntajes de matematica y lectura 2012

ggplot(SchoolsMiamiDade, aes(Reading2012,Math2012))+
  geom_point(aes(color=BoardDistrict), size=3) +
  labs(title="Escuelas  con puntajes  en Matemática y Lectura",
       subtitle="Datos de USA - 2012") 
## Warning: Removed 91 rows containing missing values (geom_point).

Modificar el tamaño de los puntos y la transparencia (valores de 0 a 1)

Se utiliza la propiedad alpha para la transparencia y ver puntos o burbujas solapadas. Se utiliza size para modificar el tamaño de los puntos.

ggplot(SchoolsMiamiDade, aes(Reading2012,Math2012))+
  geom_point(aes(color=BoardDistrict, size=8, alpha=0.1)) +
  labs(title="Escuelas  con puntajes de lectura en Matemática y Lectura",
       subtitle="Datos de USA - 2012") +
  ylab("Puntos Matemática") + xlab("Puntos Lectura")
## Warning: Removed 91 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.

#mostrar si existes escuelas con valores () y (0) en los distritos
#SchoolsMiamiDade$BoardDistrict==c("()","(0)")


SchoolsMiami_clean <- subset(SchoolsMiamiDade, SchoolsMiamiDade$BoardDistrict!=c("()","(0)"))

ggplot(SchoolsMiami_clean, aes(Reading2012,Math2012))+
  geom_point(aes(color=BoardDistrict, size=8, alpha=0.1)) +
  labs(title="Escuelas  con puntajes de lectura en Matemática y Lectura",
       subtitle="Datos de USA - 2012") +
  ylab("Puntos Matemática") + xlab("Puntos Lectura") +
  guides(color = guide_legend("Distritos"))
## Warning: Removed 89 rows containing missing values (geom_point).

Análisis de los datos y el gráfico

El gráfico nos muestra una correlación positiva (se muestra una tendencia hacia arriba de ambas variables) de los datos, donde las escuelas que son buenas en Lectura, tambien son buenas en Matemática.
Las mejores escuelas en ambas materias son del distrito 5, 6 y 8.
Hay una escuela con 100 puntos en lectura y matemática que pertenece al distrito 6.

Utilizar facetas en el gráfico paar identificar escuelas con mayor puntaje

ggplot(SchoolsMiami_clean, aes(Reading2012,Math2012))+
  geom_point(aes(color=BoardDistrict, size=8, alpha=0.1)) +
  labs(title="Escuelas  con puntajes de lectura en Matemática y Lectura por Distrito",
       subtitle="Datos de USA - 2012") +
  facet_wrap(~BoardDistrict)+
    ylab("Puntos Matemática") + xlab("Puntos Lectura")+
  guides(color = guide_legend("Distritos"))
## Warning: Removed 89 rows containing missing values (geom_point).

Comparar cual de los dos años tuvo un mayor promedio en los puntajes

El gráfico muestra que aunque hay una correlación en los datos, los puntos son dispersos, por lo que hay una diferencia del puntaje en los diferentes años en lectura en lo saños 2012 y 2013.

ggplot(SchoolsMiami_clean, aes(Reading2012,Reading2013))+
  geom_point(aes(color=BoardDistrict, size=8, alpha=0.1)) +
  labs(title="Escuelas  con puntajes de lectura por Distrito",
       subtitle="Datos de USA - 2012") +
   ylab("Puntos Lectura 2013") + xlab("Puntos Lectura 2012")+
  guides(color = guide_legend("Distritos"))
## Warning: Removed 15 rows containing missing values (geom_point).

Diferencia del puntaje de lectura para darle el tamaño a los puntos del gráfico.

Utilizamos la variable ReadingDifference en el tamaño de los puntos para identificar cuanto han mejorado o empeorado las escuelas en los diferentes años.

ggplot(SchoolsMiami_clean, aes(Reading2012,Reading2013))+
  geom_point(aes(color=BoardDistrict, size=ReadingDifference, alpha=0.1)) +
  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") +
  guides(color = guide_legend("Distritos"), size=FALSE, alpha= FALSE)
## Warning: Removed 15 rows containing missing values (geom_point).

¿Cuántas escuelas mejoraron en lectura con respecto al año anterior?

Debemos crear un subgrupo de las diferencia de lectura mayores a 1. Este grupo me indica que 229 escuelas mejoraron en el 2013 con respecto al año 2012, que corresponde al 49.7% de las escuelas evaluadas.

escuelasMejora <- subset(SchoolsMiamiDade, SchoolsMiamiDade$ReadingDifference>=1)
nrow(escuelasMejora)
## [1] 229
#porcentaje de escuelas mejoradas
nrow(escuelasMejora) / nrow(SchoolsMiamiDade) *100
## [1] 49.78261

¿Cuál fue el mejor año para las escuelas en lectura según promedio del 2012 o 2013?

#calcular el promedio de lectura
mean(SchoolsMiamiDade$Reading2012)
## [1] NA
mean(SchoolsMiamiDade$Reading2013)
## [1] 52.07826


Al calcular el promedio del 2012 el valor es NA ya que no se puden utilizar funciones aritmeticas donde hay valores nulos.
Para omitir valores nulos debemos utilizar la función na.omit(variable). El mejor promedio de lectura fue en el año 2013 con 52.1 puntos.

#calcular el promedio de lectura en los dos años
mean(na.omit(SchoolsMiamiDade$Reading2012))
## [1] 50.9842
mean(na.omit(SchoolsMiamiDade$Reading2013))
## [1] 52.07826

Practica 1

Genere un gráfico de dispersión de la variable de Matematica 2013 y la variable categorica BoardDistrict.
Mostrar titulos , etiquetas X / y, tamaño de puntos.
¿Qué puede interpretar?

Practica 2

Crear Gráfico de las variables matematica 2013 y lectura 2013.
Mostrar titulos , etiquetas X / y, tamaño de puntos y color.
¿Qué información nos brinda el gráfico?

Practica 3

¿Cuántas escuelas mejoraron en matemática con respecto al año anterior? , Calcule el porcentaje de escuelas mejoradas.