Generamos un mapa de la región metropolitana, que revela algo
interesante usando los datos de la casen 2020 y datos
geoespaciales.
#Cargamos el paquete "sf" para trabajar con datos geoespaciales.
library(sf)
## Linking to GEOS 3.11.0, GDAL 3.5.3, PROJ 9.1.0; sf_use_s2() is TRUE
#Leemos el conjunto de datos "comunas_geo" que contiene las latitudes y longitudes de las comunas de la Región Metropolitana.
comunas_geo <- read_sf("https://raw.githubusercontent.com/lhersko/Teaching/master/shape_comunas_rm.json")
#Determinamos los codigos de la casen que pertenecen a las comunas descritas en la base geoespacial anterior.
codigos_casen <- c(
"13504", "13504", "13108", "13110", "13115", "13116", "13117", "13121", "13124", "13129",
"13131", "13602", "13603", "13601", "13301", "13302", "13303", "13202", "13201", "13203",
"13402", "13404", "13401", "13502", "13503", "13403", "13501", "13102", "13103", "13104",
"13105", "13122", "13123", "13125", "13132", "13604", "13126", "13127", "13128", "13130",
"13101", "13107", "13109", "13111", "13112", "13113", "13114", "13118", "13119", "13120",
"13605", "13106")
#Añadimos la nueva variable "codigos_casen" como "cod_comuna" a la base geoespacial.
comunas_geo$cod_comuna <- codigos_casen[match(comunas_geo$geo_code, comunas_geo$geo_code)]
#Realizamos el merge basado en la columna "comuna" y "cod_comuna" para poder tener la variable geometry que contiene las latitudes y longitudes en la base de datos de la casen_2020.
casen_comunas <- merge(casen_2020, comunas_geo, by.x = "comuna", by.y = "cod_comuna", all.x = TRUE)
#Ahora, para construir el mapa cargamos la librería leaflet y convertimos la base de datos casen_comunas a un objeto simple features para poder procesarla.
library(leaflet)
library(sf)
casen_comunas_sf <- st_as_sf(casen_comunas)
#Filtramos la base de datos casen_comunas_sf y dejamos solo la Región Metropolitana para que no pese tanto, y R pueda trabajar de manera más precisa.
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
data_final <- casen_comunas_sf %>%
filter(region==13 & provincia==131)
#Revisamos si nuestras variables de interes se encuentran en la base de datos .
"pobreza" %in% names(data_final)
## [1] TRUE
"geo_code" %in% names(data_final)
## [1] TRUE
"region" %in% names(data_final)
## [1] TRUE
"geometry" %in% names(data_final)
## [1] TRUE
"comuna" %in% names(data_final)
## [1] TRUE
#Filtramos nuevamente la base de datos data_final seleccionando nuestras variables de interés.
data_rm <- data_final %>%
select(pobreza, geo_code, geometry, comuna, region)
# Quitamos las etiquetas y convertimos la columna "pobreza" a un vector numérico
data_rm$pobreza <- as.numeric(data_rm$pobreza)
# Creamos una paleta de colores para el gradiente de pobreza por la etiqueta
colores_pobreza <- colorNumeric(palette = c("darkblue", "lightblue", "white"),
domain = data_rm$pobreza)
# Convertimos el objeto data_rm a tipo sf
data_rm_sf <- st_as_sf(data_rm, coords = c("long", "lat"), crs = 4326)
# Creamos el mapa estático
ggplot(data_rm_sf) +
geom_sf(aes(fill = pobreza), color = "#ffa500", size = 0.5) +
scale_fill_gradient(low = "darkblue", high = "lightblue", na.value = "white") +
labs(title = "Nivel de Pobreza en la Región Metropolitana",
fill = "Nivel de Pobreza",
caption = "Elaboración propia a partir de la fuente Casen 2020.") +
theme_minimal()

Podemos ver mediante el gráfico, que la mayoría de las comunas de la
RM son categorizadas como no pobres (etiqueta n° 3), luego la tendencia
sigue en proporción de segundo lugar para una comuna categorizada como
pobre no extrema (etiqueta n° 2), para finalmente llegar a ninguna
comuna categorizada como pobres extremos. Esto no quiere decir que no
hayan personas pobres no extremas, sino mas bien que en distribución de
las personas que viven en la RM, en promedio, se equilibra a que vivan
en proporción más personas etiquetadas como no pobres en las comunas de
la RM.