Un micro-mapa es una representación gráfica de estadÃsticas resumen de una o más variables de interés, agregadas a nivel de unidades geográficas, que permite visualizar la relación entre variables y su distribución espacial.
En esta viñeta mostramos como crear un micro-mapa de Colombia a nivel departamental a partir de la información geográfica proporcionada en el paquete colmaps
con datos de tasas de homicidios (del paquete homicidios
) y datos de las pruebas Saber 11 disponibles en el paquete saber
.
Primero es necesario instalar el paquete devtools
para instalar los paquetes con los datos desde GitHub y cargarlos:
install.packages("devtools")
devtools::install_github("nebulae-co/colmaps")
devtools::install_github("nebulae-co/homicidios")
devtools::install_github("nebulae-co/saber")
Ahora podemos preparar los datos para generar el micro-mapa. Como los últimos datos disponibles de homicidios corresponden al año 2013 utilizaremos datos solamente de este año para generar el micro-mapa. Por simplicidad utilizaremos dplyr
para organizar los datos.
Primero cargamos los paquetes:
require("colmaps")
require("homicidios")
require("saber")
require("dplyr")
# Organizamos los datos de tasa de homicidio 2013 por departamento:
homicidios_2013 <- homicidios %>%
filter(año == 2013) %>%
group_by(id_depto) %>%
summarise(poblacion = sum(poblacion, na.rm = TRUE),
homicidios = sum(homicidios, na.rm = TRUE)) %>%
mutate(tasa_homicidios = 100000 * homicidios / poblacion) %>%
inner_join(departamentos@data, c("id_depto" = "id"))
homicidios_2013
## Source: local data frame [33 x 5]
##
## id_depto poblacion homicidios tasa_homicidios depto
## 1 05 6299990 2521 40.015937 Antioquia
## 2 08 2402910 513 21.349114 Atlántico
## 3 11 7674366 1259 16.405264 Bogotá, D. C.
## 4 13 2049109 431 21.033532 BolÃvar
## 5 15 1272855 117 9.191935 Boyacá
## 6 17 984115 294 29.874557 Caldas
## 7 18 465487 271 58.218597 Caquetá
## 8 19 1354733 569 42.000896 Cauca
## 9 20 1004058 264 26.293302 Cesar
## 10 23 1658067 370 22.315142 Córdoba
## .. ... ... ... ... ...
# Organizamos los datos de las pruebas saber 11 del año 2013
data(SB11_20131)
data(SB11_20132)
SB11_2013 <- bind_rows(
SB11_20131 %>%
select(ESTU_CODIGO_RESIDE_MCPIO, ends_with("PUNT"), -COMP_FLEX_PUNT),
SB11_20132 %>%
select(ESTU_CODIGO_RESIDE_MCPIO, ends_with("PUNT"), -COMP_FLEX_PUNT)
) %>%
mutate(id_depto = substr(formatC(ESTU_CODIGO_RESIDE_MCPIO, width = 5, flag = "0"),
1, 2),
total = (3 * LENGUAJE_PUNT +
3 * MATEMATICAS_PUNT +
3 * CIENCIAS_SOCIALES_PUNT +
3 * FILOSOFIA_PUNT +
3 * BIOLOGIA_PUNT +
3 * QUIMICA_PUNT +
3 * FISICA_PUNT +
INGLES_PUNT) / 22) %>%
group_by(id_depto) %>%
summarise(promedio_saber = median(total, na.rm = TRUE))
# Obtenemos un solo data frame:
colombia <- inner_join(homicidios_2013, SB11_2013) %>%
select(id_depto, depto, everything()) %>%
mutate(depto = ifelse(id_depto == "88", "San Andrés", depto)) %>%
as.data.frame()
head(colombia)
## id_depto depto poblacion homicidios tasa_homicidios
## 1 05 Antioquia 6299990 2521 40.015937
## 2 08 Atlántico 2402910 513 21.349114
## 3 11 Bogotá, D. C. 7674366 1259 16.405264
## 4 13 BolÃvar 2049109 431 21.033532
## 5 15 Boyacá 1272855 117 9.191935
## 6 17 Caldas 984115 294 29.874557
## promedio_saber
## 1 42.59091
## 2 42.13636
## 3 45.86364
## 4 40.90909
## 5 44.77273
## 6 43.13636
require("micromap")
deptos_map <- create_map_table(departamentos, 'id') %>%
mutate(ID = as.character(ID))
rm(list = setdiff(ls(), c("colombia", "deptos_map")))
# lmplot(stat.data = colombia,
# map.data = deptos_map,
# panel.types = c('labels', 'dot', 'dot', 'map'),
# panel.data = list('depto','promedio_saber','tasa_homicidios', NA),
# ord.by = 'promedio_saber',
# grouping = 4, median.row=TRUE,
# map.link = c("id_depto", 'ID'))
mmplot(stat.data = colombia,
map.data = deptos_map,
panel.types = c('labels', 'dot', 'dot', 'map'),
panel.data = list('depto', 'promedio_saber', 'tasa_homicidios', NA),
ord.by = 'promedio_saber',
grouping = 4,
median.row = TRUE,
median.text.label = "Mediana",
map.link = c("id_depto", "ID"),
plot.height = 12,
colors = c('red', 'orange', 'green', 'blue', 'purple'),
map.color2 = 'lightgray',
panel.att = list(list(1, header = 'Departamentos', panel.width = .8,
align = 'left', text.size=.9),
list(2, header = 'Saber 11\nPuntaje Promedio',
graph.bgcolor = 'lightgray', point.size = 1.5,
xaxis.ticks = list(38, 40, 42, 44, 46),
xaxis.labels = list(38, 40, 42, 44, 46),
xaxis.title = 'Puntaje'),
list(3, header = 'Tasa de homicidios\n por 100.000 hab.',
graph.bgcolor = 'lightgray', point.size = 1.5,
xaxis.ticks = list(0, 20, 40, 60, 80),
xaxis.labels = list(0, 20, 40, 60, 80),
xaxis.title = 'Homicidios por cada\n100.000 hab.'),
list(4, header='Ubicación',
inactive.border.color = gray(.7),
inactive.border.size = 2,
panel.width=.6)),
print.file = "micromapa.png",
print.res = 300)