Mapamundi

En este apartado utilizaremos los conceptos que hemos aprendido en la asignatura para trabajar con un mapa de polígonos. Necesitaremos:

Estos son los paquetes que necesitaremos para realizar el ejercicio:

#recordad que los paquetes tienen que estar previamentes instalados 
library(dplyr)
library(readr)
library(rnaturalearth)
library(ggplot2)
library(sf)

Mapa

El mapamundi lo podemos cargar a través de la función ne_countries() que se encuentra dentro del paquete rnaturalearth. En el objecto world hemos guardado información geoespacial sobre todos los países del mundo. Si nos fijamos en su contenido con glimpse(world), veremos que cada observación es un estado y que la última columna contiene la variable geometry, que es donde hay almacenado los polígonos.

world <- ne_countries(scale = "medium", returnclass = "sf")
glimpse(world)
## Rows: 241
## Columns: 64
## $ scalerank  <int> 3, 1, 1, 1, 1, 3, 3, 1, 1, 1, 3, 1, 5, 3, 1, 1, 1, 1, 1, 1,…
## $ featurecla <chr> "Admin-0 country", "Admin-0 country", "Admin-0 country", "A…
## $ labelrank  <dbl> 5, 3, 3, 6, 6, 6, 6, 4, 2, 6, 4, 4, 5, 6, 6, 2, 4, 5, 6, 2,…
## $ sovereignt <chr> "Netherlands", "Afghanistan", "Angola", "United Kingdom", "…
## $ sov_a3     <chr> "NL1", "AFG", "AGO", "GB1", "ALB", "FI1", "AND", "ARE", "AR…
## $ adm0_dif   <dbl> 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0,…
## $ level      <dbl> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,…
## $ type       <chr> "Country", "Sovereign country", "Sovereign country", "Depen…
## $ admin      <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ adm0_a3    <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALD", "AND", "ARE", "AR…
## $ geou_dif   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ geounit    <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ gu_a3      <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALD", "AND", "ARE", "AR…
## $ su_dif     <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ subunit    <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ su_a3      <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALD", "AND", "ARE", "AR…
## $ brk_diff   <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ name       <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ name_long  <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ brk_a3     <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALD", "AND", "ARE", "AR…
## $ brk_name   <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ brk_group  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ abbrev     <chr> "Aruba", "Afg.", "Ang.", "Ang.", "Alb.", "Aland", "And.", "…
## $ postal     <chr> "AW", "AF", "AO", "AI", "AL", "AI", "AND", "AE", "AR", "ARM…
## $ formal_en  <chr> "Aruba", "Islamic State of Afghanistan", "People's Republic…
## $ formal_fr  <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ note_adm0  <chr> "Neth.", NA, NA, "U.K.", NA, "Fin.", NA, NA, NA, NA, "U.S.A…
## $ note_brk   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, "Multiple claim…
## $ name_sort  <chr> "Aruba", "Afghanistan", "Angola", "Anguilla", "Albania", "A…
## $ name_alt   <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ mapcolor7  <dbl> 4, 5, 3, 6, 1, 4, 1, 2, 3, 3, 4, 4, 1, 7, 2, 1, 3, 1, 2, 3,…
## $ mapcolor8  <dbl> 2, 6, 2, 6, 4, 1, 4, 1, 1, 1, 5, 5, 2, 5, 2, 2, 1, 6, 2, 2,…
## $ mapcolor9  <dbl> 2, 8, 6, 6, 1, 4, 1, 3, 3, 2, 1, 1, 2, 9, 5, 2, 3, 5, 5, 1,…
## $ mapcolor13 <dbl> 9, 7, 1, 3, 6, 6, 8, 3, 13, 10, 1, NA, 7, 11, 5, 7, 4, 8, 8…
## $ pop_est    <dbl> 103065, 28400000, 12799293, 14436, 3639453, 27153, 83888, 4…
## $ gdp_md_est <dbl> 2258.0, 22270.0, 110300.0, 108.9, 21810.0, 1563.0, 3660.0, …
## $ pop_year   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ lastcensus <dbl> 2010, 1979, 1970, NA, 2001, NA, 1989, 2010, 2010, 2001, 201…
## $ gdp_year   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ economy    <chr> "6. Developing region", "7. Least developed region", "7. Le…
## $ income_grp <chr> "2. High income: nonOECD", "5. Low income", "3. Upper middl…
## $ wikipedia  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ fips_10    <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ iso_a2     <chr> "AW", "AF", "AO", "AI", "AL", "AX", "AD", "AE", "AR", "AM",…
## $ iso_a3     <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALA", "AND", "ARE", "AR…
## $ iso_n3     <chr> "533", "004", "024", "660", "008", "248", "020", "784", "03…
## $ un_a3      <chr> "533", "004", "024", "660", "008", "248", "020", "784", "03…
## $ wb_a2      <chr> "AW", "AF", "AO", NA, "AL", NA, "AD", "AE", "AR", "AM", "AS…
## $ wb_a3      <chr> "ABW", "AFG", "AGO", NA, "ALB", NA, "ADO", "ARE", "ARG", "A…
## $ woe_id     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ adm0_a3_is <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALA", "AND", "ARE", "AR…
## $ adm0_a3_us <chr> "ABW", "AFG", "AGO", "AIA", "ALB", "ALD", "AND", "ARE", "AR…
## $ adm0_a3_un <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ adm0_a3_wb <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,…
## $ continent  <chr> "North America", "Asia", "Africa", "North America", "Europe…
## $ region_un  <chr> "Americas", "Asia", "Africa", "Americas", "Europe", "Europe…
## $ subregion  <chr> "Caribbean", "Southern Asia", "Middle Africa", "Caribbean",…
## $ region_wb  <chr> "Latin America & Caribbean", "South Asia", "Sub-Saharan Afr…
## $ name_len   <dbl> 5, 11, 6, 8, 7, 5, 7, 20, 9, 7, 14, 10, 23, 22, 17, 9, 7, 1…
## $ long_len   <dbl> 5, 11, 6, 8, 7, 13, 7, 20, 9, 7, 14, 10, 27, 35, 19, 9, 7, …
## $ abbrev_len <dbl> 5, 4, 4, 4, 4, 5, 4, 6, 4, 4, 9, 4, 7, 10, 6, 4, 5, 4, 4, 5…
## $ tiny       <dbl> 4, NA, NA, NA, NA, 5, 5, NA, NA, NA, 3, NA, NA, 2, 4, NA, N…
## $ homepart   <dbl> NA, 1, 1, NA, 1, NA, 1, 1, 1, 1, NA, 1, NA, NA, 1, 1, 1, 1,…
## $ geometry   <MULTIPOLYGON [°]> MULTIPOLYGON (((-69.89912 1..., MULTIPOLYGON (…

Como hemos podido observar, el marco de datos world ya contiene algunas variables específicas de cada país, como por ejemplo:

  • El tipo de país: type.
  • La población estimada: pop_est.
  • Dos clasificaciones según nivel de desarrollo: gdp_md_est,economy, income_grp.
  • Clasificaciones regionales: continent,region_un, subregion,region_wb.
  • Otros: mapcolor7,mapcolor8, mapcolor9,mapcolor13.

Con el siguiente código reproducimos el mapamundi según la clasificación regional continent.

world %>%
  ggplot() +
  geom_sf(aes(fill = continent))

Ejercicio 1. Examina el marco de datos y responde a las siguientes preguntas:

  • ¿Qué valores puede adoptar la variable continent? Puedes comprobarlo con unique(world$continent).
  • Crea un nuevo mapa sustituyendo la variable continent por otra de las variables del marco de datos que hemos indicado anteriormente. ¿Qué valores puede tomar?

Datos

Una de las partes más interesantes de trabajar con datos es que podemos pegar fácilmente un mapa de polígonos con unos datos específicos. En este caso, nuestro objetivo es utilizar el mapa que hemos guardado en el objeto world para visualizar los datos que se encuentran en el QoG Basic dataset del Quality of Government Institute (Dahlberg et al. 2020). En el siguiente código, hemos almacenado los datos transversales (archivo CSV en el apartado Cross Section) al objeto qog y los hemos unido al marco de datos world a través de las variables más coincidentes (adm0_a3_is y ccodealp). Con esto conseguimos maximizar a 199 el número de observaciones.

qog <- read_csv("http://www.qogdata.pol.gu.se/data/qog_bas_cs_jan20.csv")
qogw <- world %>%
  inner_join(qog, by = c("adm0_a3_is" = "ccodealp"))

Si consultamos todas las variables del nuevo marco de datos con names(qogw) veremos la gran cantidad de fenómenos que podemos reproducir. En el siguiente mapa hemos reproducido el Global Peace Index (gpi_gpi), que clasifica los países en cinco categorías según sean más o menos pacíficos.

ggplot(qogw) +
  geom_sf(aes(fill = gpi_gpi))

Ejercicio 2. Utiliza las funciones glimpse(qogw) y names(qogw) para examinar el marco de datos. Busca una variable que te interese en el libro de códigos y reprodúcela utilizando el código anterior (aquí encontrarás más información sobre com leer un libro de códigos). Responde a las siguientes preguntas:

  • ¿Qué variable has seleccionado? ¿Qué estás midiendo?
  • ¿Qué observamos en el mapa? Haz una descripción.
  • ¿Hay algún país del que no tengamos datos? ¿Sabrías decir por qué?

Puedes intentar crear el mapa con esta versión más avanzada de código. Todos los colores los encontrarás en este enlace:

ggplot(qogw) +
  geom_sf(aes(fill = gpi_gpi)) +
  scale_fill_gradient(low = "white", high = "seagreen4") + 
  theme(panel.background = element_rect(fill = "lightcyan1")) +
  labs(title = "Global Peace Index (2018)", x = "Longitud", y = "Latitud",
       fill = "GPI")

Extra: ¿Qué es un polígono?

La variable geometry del marco de datos world contiene la información de cada polígono. En cada observación encontraremos información de un polígono diferente. Intentad visualizar la información de la observación número 16:

plot(world$geometry[16])

Referencias

Dahlberg, Stefan, Sören Holmberg, Bo Rothstein, Natalia Alvarado Pachon, and Sofia Axelsson. 2020. The Quality of Government Basic Dataset.” University of Gothenburg: The Quality of Government Institute.