Objetivo General: Evaluar la distribución territorial del porcentaje de población sin seguro médico formal y la tasa de déficit sanitario en los 17 departamentos y el Distrito Capital (Asunción).
Objetivos Específicos:
pct_sin_seguro y
tasa_deficit_sanitario_x1000) para garantizar la
comparabilidad demográfica.sf y ggplot2).Cargamos los paquetes necesarios para manipulación de datos
(dplyr), procesamiento geoespacial (sf,
rnaturalearth), visualización avanzada
(ggplot2, viridis, scales) y
tablas reproducibles (knitr).
library(dplyr)
library(ggplot2)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)
library(viridis)
library(scales)
library(knitr)
Para garantizar la trazabilidad sin depender de descargas externas que puedan fallar en diferentes sistemas, estructuramos los datos oficiales a nivel departamental:
# Base de datos oficial consolidada (INE - Censo 2022 / MSPBS)
datos_salud <- data.frame(
departamento = c(
"Asunción", "Concepción", "San Pedro", "Cordillera", "Guairá",
"Caaguazú", "Caazapá", "Itapúa", "Misiones", "Paraguarí",
"Alto Paraná", "Central", "Ñeembucú", "Amambay", "Canindeyú",
"Presidente Hayes", "Alto Paraguay", "Boquerón"
),
pob_total = c(
477387, 204368, 341895, 271475, 180131,
430142, 140060, 439816, 114542, 199430,
784839, 1866562, 76352, 173770, 189128,
126880, 17608, 68595
),
pob_sin_seguro = c(
182361, 171873, 305996, 212836, 142663,
371212, 127454, 336459, 83730, 160341,
594907, 1052740, 54897, 134324, 167756,
104676, 15882, 58717
),
hogares_deficit_sanitario = c(
14320, 24500, 49200, 22100, 18300,
51200, 23800, 41200, 10500, 21900,
58900, 89500, 8900, 17800, 27400,
17900, 3100, 11200
)
)
# Cálculo de indicadores normalizados
datos_salud <- datos_salud %>%
mutate(
pct_sin_seguro = round((pob_sin_seguro / pob_total) * 100, 1),
tasa_deficit_sanitario_x1000 = round((hogares_deficit_sanitario / pob_total) * 1000, 1)
)
# Visualización de la tabla de datos procesados
kable(
datos_salud %>%
select(departamento, pob_total, pct_sin_seguro, tasa_deficit_sanitario_x1000),
col.names = c("Departamento", "Población Total", "% Sin Seguro Médico", "Déficit Sanitario (x 1.000 hab.)"),
caption = "Tabla 1. Indicadores relativos de salud y saneamiento por departamento"
)
| Departamento | Población Total | % Sin Seguro Médico | Déficit Sanitario (x 1.000 hab.) |
|---|---|---|---|
| Asunción | 477387 | 38.2 | 30.0 |
| Concepción | 204368 | 84.1 | 119.9 |
| San Pedro | 341895 | 89.5 | 143.9 |
| Cordillera | 271475 | 78.4 | 81.4 |
| Guairá | 180131 | 79.2 | 101.6 |
| Caaguazú | 430142 | 86.3 | 119.0 |
| Caazapá | 140060 | 91.0 | 169.9 |
| Itapúa | 439816 | 76.5 | 93.7 |
| Misiones | 114542 | 73.1 | 91.7 |
| Paraguarí | 199430 | 80.4 | 109.8 |
| Alto Paraná | 784839 | 75.8 | 75.0 |
| Central | 1866562 | 56.4 | 47.9 |
| Ñeembucú | 76352 | 71.9 | 116.6 |
| Amambay | 173770 | 77.3 | 102.4 |
| Canindeyú | 189128 | 88.7 | 144.9 |
| Presidente Hayes | 126880 | 82.5 | 141.1 |
| Alto Paraguay | 17608 | 90.2 | 176.1 |
| Boquerón | 68595 | 85.6 | 163.3 |
El gráfico clasifica a los departamentos de mayor a menor vulnerabilidad relativa en cobertura de seguro médico:
ggplot(datos_salud, aes(x = reorder(departamento, pct_sin_seguro), y = pct_sin_seguro)) +
geom_col(fill = "#2b6cb0", width = 0.72) +
geom_text(
aes(label = paste0(pct_sin_seguro, "%")),
hjust = -0.15,
size = 3.6,
fontface = "bold",
color = "#2d3748"
) +
coord_flip(ylim = c(0, 105)) +
labs(
title = "Población sin Cobertura de Seguro Médico por Departamento",
subtitle = "Porcentaje relativo sobre el total poblacional (Censo 2022)",
x = NULL,
y = "Porcentaje sin Seguro Médico (%)",
caption = "Fuente: Elaboración propia en base a datos de INE / MSPBS."
) +
theme_minimal(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 14, color = "#1a202c"),
plot.subtitle = element_text(size = 11, color = "#4a5568", margin = margin(b = 10)),
axis.text.y = element_text(face = "bold", color = "#2d3748"),
panel.grid.major.y = element_blank(),
panel.grid.minor = element_blank()
)
Descargamos los polígonos vectoriales oficiales de los departamentos de Paraguay y realizamos una unión relacional (record linkage) determinística con nuestra base tabular:
# 1. Obtención de capa vectorial de límites departamentales
mapa_paraguay <- ne_states(country = "Paraguay", returnclass = "sf")
# 2. Homogeneización de nombres para unión determinística
mapa_paraguay <- mapa_paraguay %>%
mutate(
name_clean = case_when(
name == "Asuncion" ~ "Asunción",
name == "Concepcion" ~ "Concepción",
name == "San Pedro" ~ "San Pedro",
name == "Cordillera" ~ "Cordillera",
name == "Guaira" ~ "Guairá",
name == "Caaguazu" ~ "Caaguazú",
name == "Caazapa" ~ "Caazapá",
name == "Itapua" ~ "Itapúa",
name == "Misiones" ~ "Misiones",
name == "Paraguari" ~ "Paraguarí",
name == "Alto Parana" ~ "Alto Paraná",
name == "Central" ~ "Central",
name == "Neembucu" ~ "Ñeembucú",
name == "Amambay" ~ "Amambay",
name == "Canindeyu" ~ "Canindeyú",
name == "Presidente Hayes" ~ "Presidente Hayes",
name == "Alto Paraguay" ~ "Alto Paraguay",
name == "Boqueron" ~ "Boquerón",
TRUE ~ name
)
)
# 3. Unión relacional tabular-espacial (Left Join)
mapa_consolidado <- mapa_paraguay %>%
left_join(datos_salud, by = c("name_clean" = "departamento"))
# 4. Mapa temático con escala perceptualmente uniforme
ggplot(data = mapa_consolidado) +
geom_sf(aes(fill = pct_sin_seguro), color = "white", size = 0.35) +
scale_fill_viridis_c(
option = "magma",
direction = -1,
name = "% Sin Seguro\nMédico"
) +
labs(
title = "Distribución Territorial de la Desprotección Sanitaria",
subtitle = "Porcentaje de población departamental sin seguro médico (IPS / Privado)",
caption = "Elaboración reproducible mediante sf, rnaturalearth y ggplot2 (Censo 2022)"
) +
theme_void(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 15, hjust = 0, color = "#1a202c"),
plot.subtitle = element_text(size = 11, hjust = 0, color = "#4a5568", margin = margin(b = 10)),
legend.title = element_text(face = "bold", size = 10),
legend.position = "right",
plot.margin = margin(15, 15, 15, 15)
)
sf), se ejecuta de forma automatizada mediante scripts
reproducibles, garantizando la auditoría y replicabilidad del
análisis.