Este proyecto realiza un análisis georreferenciado de la mortalidad en el departamento de Antioquia, a partir de registros municipales de defunciones ocurridas en varios años. El trabajo combina datos estadísticos (número de casos de defunción y tasa de mortalidad por mil habitantes) con herramientas de análisis espacial en R, permitiendo visualizar patrones y diferencias entre municipios y subregiones.
A lo largo del informe se desarrollan:
Mapas coropléticos para observar la distribución espacial de las tasas de mortalidad y del número absoluto de defunciones.
Gráficos de barras y análisis estadísticos para identificar los municipios y subregiones con mayores y menores promedios.
Pruebas de normalidad y análisis de outliers que complementan la interpretación de la variable TasaXMilHabitantes.
El objetivo de este trabajo es integrar y analizar la información de mortalidad en el departamento de Antioquia de manera espacial, utilizando herramientas de georreferenciación en R.
A partir de los datos de defunciones y de la tasa de mortalidad por cada mil habitantes en cada municipio, junto con las geometrías oficiales de los límites municipales, se busca:
Visualizar la distribución espacial de la mortalidad en los municipios de Antioquia.
Identificar patrones territoriales que puedan reflejar diferencias en las condiciones de salud, acceso a servicios médicos o características demográficas.
Generar mapas coropléticos y otras representaciones gráficas que faciliten la comprensión de las áreas con mayor o menor riesgo de mortalidad.
Los datos utilizados en este proyecto provienen del portal oficial de Datos Abiertos de Colombia.
ruta_dataset <- "C:/Users/johan/Downloads/Mortalidad_General_en_el_departamento_de_Antioquia_desde_2005_20250915.csv"
dataset <- read.csv(ruta_dataset, header = TRUE, stringsAsFactors = FALSE)
ruta_shapefile <- "C:/Users/johan/Downloads/MGN2021_MPIO_POLITICO/MGN_MPIO_POLITICO.shp"
dataset_shapefile <- sf::st_read(ruta_shapefile)## Reading layer `MGN_MPIO_POLITICO' from data source
## `C:\Users\johan\Downloads\MGN2021_MPIO_POLITICO\MGN_MPIO_POLITICO.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 1121 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -81.73562 ymin: -4.229406 xmax: -66.84722 ymax: 13.39473
## Geodetic CRS: MAGNA-SIRGAS
Vamos a trabajar con un dataset que contiene el número de casos y la tasa anual (por mil habitantes) de mortalidad general en el departamento de Antioquia, desde el año 2005 hasta 2021.
A continuación se describen las variables incluidas en el dataset de mortalidad en Antioquia:
NombreMunicipio: Nombre con el que se identifica a cada municipio que hace parte de la jurisdicción territorial del departamento de Antioquia.
CodigoMunicipio: Código alfanumérico de cinco (5) dígitos que identifica de manera única a cada municipio dentro de la división política y administrativa de Colombia (DIVIPOLA).
Ubicacion: Coordenadas de latitud y longitud que permiten ubicar el centro geográfico de cada municipio en el mapa.
NombreRegion: Nombre de la subregión a la que pertenece el municipio. Las subregiones son divisiones territoriales internas del departamento de Antioquia.
CodigoRegion: Identificador de la subregión correspondiente al municipio. Cada subregión de Antioquia cuenta con un código único.
Año: Año de referencia para los datos de casos de mortalidad y la tasa de mortalidad reportada en la fila.
NumeroCasos: Número de casos de defunción ocurridos en el municipio durante el año indicado.
TasaXMilHabitantes: Tasa de mortalidad que expresa el número de fallecimientos por cada mil habitantes en el municipio para el año correspondiente.
suppressWarnings({
library(dplyr)
library(tibble)
library(sf)
library(ggplot2)
library(ggpubr)
library(RColorBrewer)
library(stats)
library(knitr)
library(kableExtra)
options(warn = -1)
})##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
##
## Adjuntando el paquete: 'kableExtra'
## The following object is masked from 'package:dplyr':
##
## group_rows
## NombreMunicipio CodigoMunicipio Ubicacion NombreRegion
## 1 Abejorral 5002 POINT (-75.427045 5.79145) ORIENTE
## 2 Abriaquí 5004 POINT (-76.064563 6.63197) OCCIDENTE
## 3 Alejandría 5021 POINT (-75.141258 6.376923) ORIENTE
## 4 Amagá 5030 POINT (-75.703216 6.04063) SUROESTE
## 5 Amalfi 5031 POINT (-75.075028 6.907385) NORDESTE
## CodigoRegion Año NumeroCasos TasaXMilHabitantes
## 1 7 2005 146 7.2
## 2 6 2005 13 4.8
## 3 7 2005 27 7.1
## 4 8 2005 137 5.0
## 5 4 2005 112 5.5
dataset_final <- dataset[, c("NombreMunicipio", "CodigoMunicipio", "NombreRegion",
"Año", "NumeroCasos", "TasaXMilHabitantes")]## NombreMunicipio CodigoMunicipio NombreRegion Año NumeroCasos
## 1 Abejorral 5002 ORIENTE 2005 146
## 2 Abriaquí 5004 OCCIDENTE 2005 13
## 3 Alejandría 5021 ORIENTE 2005 27
## 4 Amagá 5030 SUROESTE 2005 137
## 5 Amalfi 5031 NORDESTE 2005 112
## TasaXMilHabitantes
## 1 7.2
## 2 4.8
## 3 7.1
## 4 5.0
## 5 5.5
## Número de observaciones (filas): 2125
## Número de variables (columnas): 6
## 'data.frame': 2125 obs. of 6 variables:
## $ NombreMunicipio : chr "Abejorral" "Abriaquí" "Alejandría" "Amagá" ...
## $ CodigoMunicipio : int 5002 5004 5021 5030 5031 5034 5036 5038 5040 5044 ...
## $ NombreRegion : chr "ORIENTE" "OCCIDENTE" "ORIENTE" "SUROESTE" ...
## $ Año : int 2005 2005 2005 2005 2005 2005 2005 2005 2005 2005 ...
## $ NumeroCasos : int 146 13 27 137 112 230 43 55 84 37 ...
## $ TasaXMilHabitantes: num 7.2 4.8 7.1 5 5.5 5.5 5.6 4.4 5.6 5 ...
Filas (observaciones): 2125
Cada fila representa un registro único de mortalidad asociado a un
municipio y a un año específico del departamento de Antioquia.
Columnas (variables): 6
Son los atributos que describen cada registro: identificación del
municipio, año, número de defunciones, tasa de mortalidad, entre
otros.
| Variable | Tipo | Descripción |
|---|---|---|
| NombreMunicipio | Texto (character) |
Nombre oficial de cada municipio. |
| CodigoMunicipio | Entero (integer) |
Código numérico de 5 dígitos que identifica de manera única cada municipio (DIVIPOLA). |
| NombreRegion | Texto (character) |
Nombre de las subregiones del departamento. |
| Año | Entero (integer) |
Año de referencia del registro de mortalidad. |
| NumeroCasos | Entero (integer) |
Número de casos de defunción ocurridos en el municipio durante el año correspondiente. |
| TasaXMilHabitantes | Numérico continuo (double) |
Tasa de mortalidad que indica el número de fallecimientos por cada mil habitantes. |
total <- nrow(dataset_final)
null_counts <- colSums(is.na(dataset_final))
null_percent <- (null_counts / total) * 100
missing_summary <- data.frame(
Nulos = null_counts,
`Porcentaje (%)` = round(null_percent, 2)
)
print(missing_summary)## Nulos Porcentaje....
## NombreMunicipio 0 0
## CodigoMunicipio 0 0
## NombreRegion 0 0
## Año 0 0
## NumeroCasos 0 0
## TasaXMilHabitantes 0 0
Interpretación
col <- "NombreMunicipio"
num_cats <- length(unique(dataset[[col]]))
categorias <- data.frame(
`Categorías únicas de NombreMunicipio` = sort(unique(dataset[[col]]))
)
cat("Número de categorías en la variable", col, ":", num_cats, "\n\n")## Número de categorías en la variable NombreMunicipio : 125
## Listado de categorías:
## Categorías.únicas.de.NombreMunicipio
## Abejorral
## Abriaquí
## Alejandría
## Amagá
## Amalfi
## Andes
## Angelópolis
## Angostura
## Anorí
## Anzá
## Apartadó
## Arboletes
## Argelia
## Armenia
## Barbosa
## Bello
## Belmira
## Betania
## Betulia
## Briceño
## Buriticá
## Cáceres
## Caicedo
## Caldas
## Campamento
## Cañasgordas
## Caracolí
## Caramanta
## Carepa
## Carolina
## Caucasia
## Chigorodó
## Cisneros
## Ciudad Bolívar
## Cocorná
## Concepción
## Concordia
## Copacabana
## Dabeiba
## Donmatías
## Ebéjico
## El Bagre
## El Carmen de Viboral
## El Peñol
## El Retiro
## El Santuario
## Entrerríos
## Envigado
## Fredonia
## Frontino
## Giraldo
## Girardota
## Gómez Plata
## Granada
## Guadalupe
## Guarne
## Guatapé
## Heliconia
## Hispania
## Itagüí
## Ituango
## Jardín
## Jericó
## La Ceja
## La Estrella
## La Pintada
## La Unión
## Liborina
## Maceo
## Marinilla
## Medellín
## Montebello
## Murindó
## Mutatá
## Nariño
## Nechí
## Necoclí
## Olaya
## Peque
## Pueblorrico
## Puerto Berrío
## Puerto Nare
## Puerto Triunfo
## Remedios
## Rionegro
## Sabanalarga
## Sabaneta
## Salgar
## San Andrés de Cuerquia
## San Carlos
## San Francisco
## San Jerónimo
## San José de La Montaña
## San Juan de Urabá
## San Luis
## San Pedro de Los Milagros
## San Pedro de Urabá
## San Rafael
## San Roque
## San Vicente
## Santa Bárbara
## Santa Fe de Antioquia
## Santa Rosa de Osos
## Santo Domingo
## Segovia
## Sonsón
## Sopetrán
## Támesis
## Tarazá
## Tarso
## Titiribí
## Toledo
## Turbo
## Uramita
## Urrao
## Valdivia
## Valparaíso
## Vegachí
## Venecia
## Vigía del Fuerte
## Yalí
## Yarumal
## Yolombó
## Yondó
## Zaragoza
col <- "Año"
num_cats <- length(unique(dataset[[col]]))
categorias <- data.frame(
`Categorías únicas de Año` = sort(unique(dataset[[col]]))
)
cat("Número de categorías en la variable", col, ":", num_cats, "\n\n")## Número de categorías en la variable Año : 17
## Listado de categorías:
## Categorías.únicas.de.Año
## 2005
## 2006
## 2007
## 2008
## 2009
## 2010
## 2011
## 2012
## 2013
## 2014
## 2015
## 2016
## 2017
## 2018
## 2019
## 2020
## 2021
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 5.0 42.0 82.0 253.1 157.0 21917.0
Interpretación
La variable NumeroCasos corresponde al número absoluto de defunciones por municipio y año. El promedio es de 253 defunciones, pero con una alta dispersión (desviación estándar ≈1.237), lo que refleja fuertes diferencias entre municipios. El 50 % de los registros tiene 82 casos o menos, mientras que el valor máximo (≈21.900) evidencia la presencia de outliers, asociados a municipios de gran tamaño como Medellín. Estos datos muestran una distribución marcadamente sesgada a la derecha, donde pocos municipios concentran la mayor parte de las muertes.
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0.800 4.100 4.800 5.007 5.700 13.700
Interpretación
En promedio, los municipios registran 5 fallecimientos por cada mil habitantes, con una dispersión moderada (desviación estándar ≈ 1.4).
La mediana de 4.8 es cercana a la media, lo que sugiere una distribución relativamente simétrica para la mayoría de los casos.
El rango intercuartílico (Q3 – Q1) es de 1.6, lo que indica que el 50 % central de los municipios presenta tasas entre 4.1 y 5.7 muertes por mil habitantes.
El mínimo de 0.8 corresponde a municipios con mortalidad muy baja, mientras que el máximo de 13.7 es considerablemente superior al promedio, evidenciando la presencia de municipios con mortalidad anormalmente alta (posibles outliers) que ameritan revisión específica.
En conjunto, estos resultados indican que la mayor parte de los municipios de Antioquia se concentra alrededor de una mortalidad cercana a 5 muertes por mil habitantes, aunque existen algunos casos con tasas mucho más elevadas que pueden influir en la planificación en salud pública.
ggplot(dataset, aes(x = TasaXMilHabitantes)) +
geom_histogram(bins = 20, color = "black", fill = "skyblue", aes(y = ..density..)) +
geom_density(color = "darkblue", linewidth = 1) +
labs(
x = "Tasa de mortalidad (por mil habitantes)",
y = "Densidad",
title = "Distribución de Tasa de Mortalidad"
) +
theme_minimal()data <- dataset$TasaXMilHabitantes
sh <- shapiro.test(data)
cat("Estadístico Shapiro-Wilk:", round(sh$statistic, 4), "\n")## Estadístico Shapiro-Wilk: 0.96
## p-valor: 0
if (sh$p.value > 0.05) {
cat("No se rechaza H0: los datos siguen una distribución normal.\n")
} else {
cat("Se rechaza H0: los datos no siguen una distribución normal.\n")
}## Se rechaza H0: los datos no siguen una distribución normal.
Se elaboró un histograma de la tasa de mortalidad con una curva de
densidad ajustada.
La distribución muestra una forma acampanada
aproximada, aunque con ligera asimetría hacia la
derecha (cola larga en valores altos).
Esto sugiere que, si bien la mayor parte de los municipios se concentra
entre 4 y 6 muertes por mil habitantes, existen casos con tasas
elevadas que alejan los datos de una distribución normal
perfecta.
Se aplicó la prueba de Shapiro–Wilk para comprobar de manera estadística la hipótesis de normalidad:
| Estadístico | p-valor |
|---|---|
| 0.9600 | 0.0000 |
Con un p-valor < 0.05, se rechaza la
hipótesis nula de normalidad.
Esto confirma que la variable no sigue una distribución
normal.
ggplot(dataset, aes(x = TasaXMilHabitantes)) +
geom_boxplot(
fill = "skyblue",
color = "black",
outlier.size = 3,
outlier.colour = "black",
lwd = 1,
median.colour = "red",
median.lwd = 1.2
) +
labs(
title = "Boxplot de Tasa de Mortalidad (por mil habitantes)",
x = "",
y = ""
) +
theme_minimal(base_size = 14) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5)
)Se elaboró un boxplot para identificar valores atípicos en la variable TasaXMilHabitantes (número de fallecimientos por cada mil habitantes). Los principales hallazgos son:
Distribución central:
La mayor parte de los municipios se encuentra entre los cuartiles 25 % y
75 %, es decir, entre aproximadamente 4.1 y 5.7 muertes por mil
habitantes.
La mediana (línea roja) se ubica cerca de 4.8, lo que
coincide con el análisis descriptivo previo.
Outliers (valores atípicos):
Se observan puntos aislados a ambos lados del diagrama:
Implicaciones:
Estos valores atípicos pueden estar asociados a poblaciones muy
pequeñas, donde pocos casos elevan la tasa, o a
situaciones específicas como brotes de enfermedad,
problemas de acceso a salud o envejecimiento poblacional.
Para el análisis espacial de la mortalidad en Antioquia se empleó un
shapefile de límites municipales descargado desde el
Geoportal del DANE (Departamento Administrativo
Nacional de Estadística).
Este archivo cartográfico contiene la representación oficial y
actualizada de la división político-administrativa de Colombia,
incluyendo:
Geometrías (polígonos):
De cada municipio, necesarias para la visualización geográfica en
mapas.
Atributos de identificación:
Como el código único DIVIPOLA (MPIO_CDPMP) y el nombre
del municipio (MPIO_CNMBR), que permiten relacionar las
geometrías con las bases de datos estadísticos.
El shapefile constituye la capa base geográfica que, al integrarse con la información de mortalidad, posibilita la creación de mapas coropléticos, la identificación de patrones espaciales y el análisis georreferenciado de las tasas de mortalidad en el departamento de Antioquia.
## Simple feature collection with 3 features and 12 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.18451 ymin: 5.664284 xmax: -75.26793 ymax: 6.754439
## Geodetic CRS: MAGNA-SIRGAS
## DPTO_CCDGO MPIO_CCDGO MPIO_CDPMP DPTO_CNMBR MPIO_CNMBR MPIO_CRSLC MPIO_NAREA
## 1 05 001 05001 ANTIOQUIA MEDELLÍN 1965 374.8129
## 2 05 002 05002 ANTIOQUIA ABEJORRAL 1814 507.1411
## 3 05 004 05004 ANTIOQUIA ABRIAQUÍ 1912 296.8940
## MPIO_CSMBL MPIO_VGNC MPIO_TIPO Shape_Leng Shape_Area
## 1 4 2021 MUNICIPIO 1.0325459 0.03060592
## 2 4 2021 MUNICIPIO 1.1585038 0.04138390
## 3 4 2021 MUNICIPIO 0.8121832 0.02424826
## geometry
## 1 MULTIPOLYGON (((-75.66974 6...
## 2 MULTIPOLYGON (((-75.46938 5...
## 3 MULTIPOLYGON (((-76.08351 6...
dataset_final_shapefile <- dataset_shapefile[, c("MPIO_CDPMP", "MPIO_CNMBR", "Shape_Leng", "Shape_Area", "geometry")]## Simple feature collection with 3 features and 4 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -76.18451 ymin: 5.664284 xmax: -75.26793 ymax: 6.754439
## Geodetic CRS: MAGNA-SIRGAS
## MPIO_CDPMP MPIO_CNMBR Shape_Leng Shape_Area geometry
## 1 05001 MEDELLÍN 1.0325459 0.03060592 MULTIPOLYGON (((-75.66974 6...
## 2 05002 ABEJORRAL 1.1585038 0.04138390 MULTIPOLYGON (((-75.46938 5...
## 3 05004 ABRIAQUÍ 0.8121832 0.02424826 MULTIPOLYGON (((-76.08351 6...
## Número de observaciones (filas): 1121
## Número de variables (columnas): 5
## Classes 'sf' and 'data.frame': 1121 obs. of 5 variables:
## $ MPIO_CDPMP: chr "05001" "05002" "05004" "05021" ...
## $ MPIO_CNMBR: chr "MEDELLÍN" "ABEJORRAL" "ABRIAQUÍ" "ALEJANDRÍA" ...
## $ Shape_Leng: num 1.033 1.159 0.812 0.705 0.445 ...
## $ Shape_Area: num 0.03061 0.04138 0.02425 0.01053 0.00687 ...
## $ geometry :sfc_MULTIPOLYGON of length 1121; first list element: List of 1
## ..$ :List of 1
## .. ..$ : num [1:8417, 1:2] -75.7 -75.7 -75.7 -75.7 -75.7 ...
## ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
## - attr(*, "sf_column")= chr "geometry"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA
## ..- attr(*, "names")= chr [1:4] "MPIO_CDPMP" "MPIO_CNMBR" "Shape_Leng" "Shape_Area"
Con el fin de realizar correctamente la unión entre la base de datos de mortalidad y el shapefile de límites municipales, se unificó el tipo de dato de las columnas que contienen el código del municipio.
Una vez estandarizados los tipos de datos de las claves de unión, se integraron los datos de mortalidad con la cartografía de límites municipales.
df_merge <- dataset_final_shapefile %>%
inner_join(dataset_final, by = c("MPIO_CDPMP" = "CodigoMunicipio"))## Simple feature collection with 3 features and 9 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -75.71929 ymin: 6.163823 xmax: -75.47226 ymax: 6.373761
## Geodetic CRS: MAGNA-SIRGAS
## MPIO_CDPMP MPIO_CNMBR Shape_Leng Shape_Area NombreMunicipio NombreRegion
## 1 5001 MEDELLÍN 1.032546 0.03060592 Medellín VALLE DE ABURRA
## 2 5001 MEDELLÍN 1.032546 0.03060592 Medellín VALLE DE ABURRA
## 3 5001 MEDELLÍN 1.032546 0.03060592 Medellín VALLE DE ABURRA
## Año NumeroCasos TasaXMilHabitantes geometry
## 1 2005 11099 5.0 MULTIPOLYGON (((-75.66974 6...
## 2 2006 11612 5.6 MULTIPOLYGON (((-75.66974 6...
## 3 2007 11535 5.5 MULTIPOLYGON (((-75.66974 6...
## [1] "sf" "data.frame"
inner_join() vs merge()Para integrar la base de mortalidad con el shapefile se utiliza
inner_join() de dplyr en
lugar de la función merge() de base R.
Razón principal: preservación de la geometría
sf) poseen una columna especial
llamada geometry, que debe conservar la clase
sfc para ser interpretada correctamente en gráficos
(geom_sf).merge() de base R, el resultado se convierte
en un simple data.frame, de modo que la columna
geometry deja de ser un objeto espacial y se transforma en
una lista o en texto.geom_sf() no puede reconocer la
geometría y produce errores.inner_join() respeta la estructura del
objeto sf y mantiene intacta la columna
geometry y la clase sf, lo que
permite continuar con el análisis geoespacial y la creación de mapas sin
pasos adicionales.En resumen, inner_join() asegura que la
información geográfica se preserve a lo largo del proceso de unión de
datos, evitando errores y garantizando que el resultado pueda
ser graficado directamente con geom_sf().
Se generó un mapa base que representa los límites municipales
de Antioquia a partir del GeoDataFrame previamente
creado.
En esta visualización se muestran únicamente las geometrías de los municipios con relleno blanco y bordes negros, con el objetivo de verificar si el merge fue exitoso.
ggplot(df_merge) +
geom_sf(fill = "white", color = "black", linewidth = 0.5) +
labs(title = "Mapa de Antioquia - Municipios") +
theme_void() +
theme(plot.title = element_text(size = 30, hjust = 0.5))Realizamos un mapa coroplético que muestra la variable TasaXMilHabitantes, indicadora del número de fallecimientos por cada mil habitantes en cada municipio de Antioquia.
library(ggplot2)
ggplot(df_merge) +
geom_sf(aes(fill = TasaXMilHabitantes), color = "black", linewidth = 0.3) +
scale_fill_distiller(palette = "Reds", direction = 1) +
labs(
title = "Mortalidad en Antioquia por municipio",
fill = "Tasa por mil hab."
) +
theme_void() +
theme(
plot.title = element_text(size = 20, hjust = 0.5),
legend.title = element_text(size = 18), # título de la leyenda
legend.text = element_text(size = 18), # números de la escala
legend.key.height = unit(2.5, "cm"), # altura de cada bloque de color
legend.key.width = unit(1, "cm") # ancho de cada bloque de color
)Interpretación del mapa de mortalidad en Antioquia
El mapa coroplético muestra la tasa de mortalidad por mil
habitantes en cada municipio de Antioquia.
La escala de colores en tonos rojos permite identificar patrones
espaciales relevantes:
Predominio de valores intermedios:
La mayoría de los municipios presentan tasas entre 4 y 6 muertes
por mil habitantes, lo que coincide con la media y la mediana
observadas en el análisis descriptivo.
Municipios con tasas elevadas:
Zonas con color rojo más oscuro superan las 8 muertes por mil
habitantes e incluso alcanzan valores cercanos a 12–13
muertes por mil habitantes.
Municipios con tasas bajas:
Áreas en tonos más claros (blanco–rosado) reflejan tasas menores
a 4 muertes por mil habitantes, lo que puede indicar
poblaciones más jóvenes, buenas condiciones sanitarias o años con baja
incidencia de enfermedades graves.
top5 <- df_merge %>%
group_by(NombreMunicipio) %>%
summarise(TasaXMilHabitantes = mean(TasaXMilHabitantes, na.rm = TRUE)) %>%
arrange(desc(TasaXMilHabitantes)) %>%
slice_head(n = 10)
ggplot(top5, aes(x = TasaXMilHabitantes,
y = reorder(NombreMunicipio, TasaXMilHabitantes))) +
geom_col(fill = "firebrick") +
labs(
title = "Top 5 municipios con mayor promedio de tasa de mortalidad",
x = NULL,
y = NULL
) +
theme_minimal(base_size = 20) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5)
)Análisis del Top de municipios con mayor promedio de tasa de mortalidad
El gráfico presenta los municipios de Antioquia con los
mayores promedios de la variable
TasaXMilHabitantes.
Cisneros y Valdivia encabezan la lista, con promedios cercanos a 8 muertes por mil habitantes, lo que los ubica claramente por encima del promedio departamental (~5 muertes por mil).
Tarazá, Carolina y Puerto Berrío también se destacan con valores superiores a 7 muertes por mil habitantes, reflejando mortalidad relativamente alta de manera constante a lo largo de los años.
Aunque otros municipios como Jardín, Caracolí, Venecia, Ciudad Bolívar y Angelópolis también registran tasas elevadas, sus promedios se sitúan en un rango ligeramente menor (alrededor de 6 a 7 muertes por mil habitantes).
top5bajos <- df_merge %>%
group_by(NombreMunicipio) %>%
summarise(TasaXMilHabitantes = mean(TasaXMilHabitantes, na.rm = TRUE)) %>%
arrange(TasaXMilHabitantes) %>%
slice_head(n = 5)
ggplot(top5bajos, aes(x = TasaXMilHabitantes,
y = reorder(NombreMunicipio, TasaXMilHabitantes))) +
geom_col(fill = "steelblue") +
labs(
title = "Top 5 municipios con menor promedio de tasa de mortalidad",
x = NULL,
y = NULL
) +
theme_minimal(base_size = 28) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5)
)
Análisis del Top de municipios con menor promedio de tasa de
mortalidad
Vigía del Fuerte registra el promedio más bajo, cercano a 1.6 muertes por mil habitantes, lo que lo sitúa muy por debajo del promedio departamental (~5).
Murindó presenta un valor ligeramente superior (~2.5), seguido por San Juan de Urabá, Peque y Arboletes, cuyos promedios se ubican entre 3.0 y 3.5 muertes por mil habitantes.
Estos valores son significativamente inferiores al rango intercuartílico principal (4.1 – 5.7) observado en el análisis descriptivo.
region_promedio <- df_merge %>%
st_drop_geometry() %>%
group_by(NombreRegion) %>%
summarise(TasaXMilHabitantes = mean(TasaXMilHabitantes, na.rm = TRUE))
gdf_regiones <- df_merge %>%
group_by(NombreRegion) %>%
summarise(geometry = st_union(geometry)) %>%
left_join(region_promedio, by = "NombreRegion")
gdf_regiones <- gdf_regiones %>%
mutate(centroid = st_centroid(geometry))
ggplot() +
geom_sf(
data = gdf_regiones,
aes(fill = TasaXMilHabitantes),
color = "black",
linewidth = 0.5
) +
scale_fill_distiller(
palette = "YlOrRd",
direction = 1,
name = "Promedio de tasa de mortalidad\n(muertes por mil habitantes)"
) +
geom_sf_text(
data = gdf_regiones,
aes(label = NombreRegion, geometry = centroid),
size = 5,
fontface = "bold",
color = "black"
) +
labs(
title = "Promedio de mortalidad por subregión en Antioquia"
) +
theme_void() +
theme(
plot.title = element_text(size = 18, face = "bold", hjust = 0.5),
legend.title = element_text(size = 16),
legend.text = element_text(size = 14),
legend.key.height = unit(2.5, "cm"),
legend.key.width = unit(1, "cm")
)El mapa coroplético presenta el promedio de la tasa de mortalidad (muertes por mil habitantes) calculado para cada subregión del departamento de Antioquia. La intensidad del color —de amarillo claro a rojo oscuro— indica el nivel del promedio de mortalidad: las tonalidades más oscuras corresponden a las subregiones con valores más altos.
Se observa que las subregiones Suroeste, Magdalena Medio y Valle de Aburrá se destacan con las tonalidades más intensas, lo que evidencia que allí se concentra un mayor promedio de mortalidad en comparación con otras regiones. Este comportamiento puede estar asociado a factores como mayor urbanización, densidad poblacional, envejecimiento de la población o diferencias en el acceso a los servicios de salud.
En contraste, subregiones como Urabá y, en menor medida, Occidente y Oriente presentan colores más claros, reflejando un promedio de mortalidad más bajo.
ggplot(df_merge) +
geom_sf(
aes(fill = NumeroCasos),
color = "black",
linewidth = 0.3
) +
scale_fill_distiller(
palette = "OrRd",
direction = 1,
name = "Número de casos de defunción"
) +
labs(
title = "Número de casos de defunción por municipio"
) +
theme_void() +
theme(
plot.title = element_text(size = 18, face = "bold", hjust = 0.5),
legend.title = element_text(size = 16),
legend.text = element_text(size = 14),
legend.key.height = unit(2.5, "cm"),
legend.key.width = unit(1, "cm")
)El mapa coroplético representa el número total de defunciones registradas en cada municipio de Antioquia durante los años del 2005 hasta 2021. La intensidad del color varía desde tonos claros (menor número de casos) hasta rojos oscuros (mayor número de casos).
Se observa que:
Medellín se destaca de forma muy marcada con el color más intenso, lo cual confirma su posición como el municipio con mayor cantidad absoluta de defunciones en todo el departamento. Este resultado se asocia a su alta densidad poblacional y concentración urbana, factores que naturalmente elevan el número de muertes totales.
La mayoría de los demás municipios presentan tonalidades claras, lo que refleja cantidades absolutas de defunciones considerablemente menores en comparación con Medellín.
top10_casos <- df_merge %>%
st_drop_geometry() %>%
group_by(NombreMunicipio) %>%
summarise(NumeroCasos = sum(NumeroCasos, na.rm = TRUE)) %>%
arrange(desc(NumeroCasos)) %>%
slice_head(n = 10)
ggplot(top10_casos, aes(x = NumeroCasos,
y = reorder(NombreMunicipio, NumeroCasos))) +
geom_col(fill = "firebrick") +
labs(
title = "Top 10 municipios con mayor número de defunciones",
x = "Número total de defunciones",
y = "Municipio"
) +
theme_minimal(base_size = 20) +
theme(
plot.title = element_text(face = "bold", hjust = 0.5),
axis.text.y = element_text(size = 16)
)Interpretación
El gráfico de barras muestra los diez municipios de Antioquia con el mayor número absoluto de defunciones durante todos los años Se observa que Medellín encabeza el ranking de manera destacada, superando ampliamente a los demás municipios. Este comportamiento se relaciona con su alta concentración poblacional, ya que una mayor población implica un mayor número total de muertes, incluso cuando la tasa de mortalidad relativa (por cada mil habitantes) no sea la más alta.
En un segundo nivel se encuentran municipios como Bello, Itagüí y Envigado, que junto con Medellín hacen parte del Área Metropolitana del Valle de Aburrá, región densamente poblada y con alta actividad económica. Otros municipios que completan el top 10 son Rionegro, Turbo, Apartadó, Caucasia, Caldas y Copacabana, los cuales, pese a tener poblaciones más pequeñas, registran una cantidad absoluta de defunciones significativa por su rol como centros regionales.