Este es un reporte final generado para el curso de R para análisis de datos en el revisamos el uso de los paquetes de tidyverse.

Lectura de los datos

Para leer los datos utilizamos el paquete vroom

library(vroom)
library(janitor)
## 
## Attaching package: 'janitor'
## The following objects are masked from 'package:stats':
## 
##     chisq.test, fisher.test

Leemos los siguientes datasets:

anuies <- vroom("data/anuies.tsv")
hospitales <- vroom("data/hospitales.tsv")
poblacion <- vroom("data/poblacion.tsv") %>% 
  clean_names()
head(anuies)
## # A tibble: 6 × 15
##   state_id state   munic…¹ munic…² area_id area  acade…³ acade…⁴ insti…⁵ insti…⁶
##      <dbl> <chr>     <dbl> <chr>     <dbl> <chr>   <dbl> <chr>     <dbl> <chr>  
## 1        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       6 Centro…
## 2        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       6 Centro…
## 3        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       6 Centro…
## 4        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       6 Centro…
## 5        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       7 Escuel…
## 6        1 Aguasc…    1001 Aguasc…       1 Educ…      10 Normal…       8 Escuel…
## # … with 5 more variables: field_id <dbl>, field <chr>, sex_id <dbl>,
## #   sex <chr>, students <dbl>, and abbreviated variable names ¹​municipality_id,
## #   ²​municipality, ³​academic_degree_id, ⁴​academic_degree, ⁵​institution_id,
## #   ⁶​institution
## # ℹ Use `colnames()` to see all variable names

Transformamos los datos

Con los verbos del paquete dplyr podemos transformar nuestros datasets para obtener información importante.

library(dplyr)

Generamos un identificador para los municipios del dataset de población.

poblacion <- poblacion %>%
  mutate(id = as.numeric(paste0(entidad, mun)))

Obtenemos el número de instituciones de educación superior y el número de unidades de salud por cada municipio en México.

anuies_by_mun <- anuies %>%
  select(municipality_id, municipality, institution) %>%
  distinct() %>%
  group_by(municipality_id, municipality) %>%
  tally(name="total_anuies")

hospitales_by_mun <- hospitales %>%
  select(municipality_id, municipality, clues) %>%
  distinct() %>%
  group_by(municipality_id, municipality) %>%
  tally(name="total_hosp")

Uniendo datasets

Para unir ambos datasets utilizaremos la función full_join() para obtener todas las filas que coincidan, o no, en la unión.

anuies_hosp <- anuies_by_mun %>%
  full_join(hospitales_by_mun, 
            by=c("municipality", "municipality_id")) %>% 
  replace(is.na(.), 0)

head(anuies_hosp)
## # A tibble: 6 × 4
## # Groups:   municipality_id [6]
##   municipality_id municipality        total_anuies total_hosp
##             <dbl> <chr>                      <int>      <int>
## 1            1001 Aguascalientes                51        179
## 2            1003 Calvillo                       1         26
## 3            1005 Jesús María                    2         13
## 4            1006 Pabellón de Arteaga            1          8
## 5            1007 Rincón de Romos                4         21
## 6            1010 El Llano                       2          6

Finalmente, vamos a unir el dataset generado con el de población

anuies_hosp_pob <- anuies_hosp %>%
  left_join(poblacion, by = c("municipality_id" = "id"))

Generando visualizaciones

Para ver el resultado de nuestros análisis podemos generar gráficas utilizando el paquete ggplot.

library(ggplot2)
library(ggthemes)

En este caso construiremos una gráfica de puntos para analizar la correlación entre las instituciones de educación superior y las unidades de salud en los municipios

ggplot(data = anuies_hosp_pob, aes(x = total_hosp, y = total_anuies, color = pobtot, size = pobtot)) +
  geom_point() +
  geom_abline(color="darkred") +
  labs(title = "Unidades de salud e instituciones de educación superior en México", 
       y = "Instituciones de educación superior", 
       x = "Unidades de salud") +
  scale_color_continuous_tableau(name = "Población") +
  scale_size(name = "Población", range = c(4, 12)) +
  theme_base(base_size = 16)
## Warning: Removed 30 rows containing missing values (geom_point).

Y listo!