library(readxl)
library(dplyr)
library(ggplot2)
El presente trabajo busca abordar la evolución estructural de la población en Paraguay, teniendo en cuenta posibles patrones o tendencias que puedan generar un impacto negativo. Para llevar a cabo este análisis, se toman como base los datos de los Censos Nacionales de Población y Viviendas de los años 2002 y 2022, los cuales se pretende analizar a través del software estadístico RStudio.
A lo largo de estas últimas décadas, el país ha experimentado cambios demográficos significativos. Con base en esto, el objetivo de esta investigación es evidenciar estadísticamente la transición demográfica paraguaya, la cual se caracteriza por dejar atrás una pirámide de base ancha (expansiva) para acercarse hacia un perfil más rectangular, producto de variaciones en la natalidad, mortalidad y esperanza de vida.
Modelar y comprender las pirámides poblacionales de los censos de 2002 y 2022 para reflejar el estrechamiento de la base y el ensanchamiento en las edades intermedias y avanzadas.
Cuantificar las variaciones relativas y absolutas en la composición por sexo y grupos quinquenales de edad entre ambos periodos censales según departamento.
Calcular e interpretar los indicadores demográficos de estructura (relación de masculinidad, edad mediana e índice de envejecimiento) por departamento para fundamentar la transición hacia un perfil rectangular.
Los datos utilizados en este proyecto provienen del Instituto Nacional de Estadística (INE). Específicamente, se utilizaron los microdatos y tabulados correspondientes a:
Censo Nacional de Población y Viviendas 2002
Censo Nacional de Población y Viviendas 2022
La extracción de la información se hizo a través de la plataforma REDATAM del INE.
Para cumplir con los objetivos del estudio, el análisis se basará en las siguientes variables principales extraídas de los censos:
A partir de estas variables base, se procederá al cálculo de los siguientes indicadores demográficos de estructura:
En esta fase procedemos a importar los datos estructurados en formato Excel a nuestro entorno de trabajo en R para su posterior manipulación y análisis.
censo_2002 <- read_excel("Datos/ESTRUCTURA_POB_2002_Limpio.xlsx")
censo_2022 <- read_excel("Datos/ESTRUCTURA_POB_2022_Limpio.xlsx")
La relación de masculinidad se refiere a la cantidad de hombres por cada 100 mujeres en un territorio determinado. A continuación, se calcula este indicador para los datos del Censo 2002.
dptos_py <- c("CONCEPCION", "SAN PEDRO", "CORDILLERA", "GUAIRA",
"CAAGUAZU", "CAAZAPA", "ITAPUA", "MISIONES", "PARAGUARI",
"ALTO PARANA", "CENTRAL", "ÑEEMBUCU", "AMAMBAY", "CANINDEYU",
"PRESIDENTE HAYES", "BOQUERON", "ALTO PARAGUAY")
masculinidad_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Total_Hombres = sum(Varón, na.rm = TRUE),
Total_Mujeres = sum(Mujer, na.rm = TRUE)
) %>%
mutate(Relacion_Masc = (Total_Hombres / Total_Mujeres) * 100)
ggplot(masculinidad_2002, aes(x = reorder(DEPARTAMENTO, Relacion_Masc), y = Relacion_Masc)) +
geom_col(fill = "steelblue", alpha = 0.9) +
geom_hline(yintercept = 100, color = "darkred", linetype = "dashed", linewidth = 0.8) +
coord_flip() +
labs(
title = "Relación de Masculinidad por Departamento",
subtitle = "Censo 2002 (Hombres por cada 100 mujeres. Línea roja = Paridad)",
x = "Departamento",
y = "Índice de Masculinidad"
) +
theme_minimal()
A continuación, se replica el cálculo para los datos correspondientes al Censo 2022, manteniendo el filtro para asegurar la comparabilidad territorial.
masculinidad_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Total_Hombres = sum(Varón, na.rm = TRUE),
Total_Mujeres = sum(Mujer, na.rm = TRUE)
) %>%
mutate(Relacion_Masc_2022 = (Total_Hombres / Total_Mujeres) * 100)
masculinidad_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Total_Hombres = sum(Varón, na.rm = TRUE),
Total_Mujeres = sum(Mujer, na.rm = TRUE)
) %>%
mutate(Relacion_Masc = (Total_Hombres / Total_Mujeres) * 100)
ggplot(masculinidad_2022, aes(x = reorder(DEPARTAMENTO, Relacion_Masc), y = Relacion_Masc)) +
geom_col(fill = "indianred", alpha = 0.9) +
geom_hline(yintercept = 100, color = "darkblue", linetype = "dashed", linewidth = 0.8) +
coord_flip() +
labs(
title = "Relación de Masculinidad por Departamento",
subtitle = "Censo 2022 (Hombres por cada 100 mujeres. Línea azul = Paridad)",
x = "Departamento",
y = "Índice de Masculinidad"
) +
theme_minimal()
Para evidenciar la evolución estructural, unificamos los indicadores de ambos censos y calculamos la variación absoluta entre ambos periodos.
comparativa_masc <- masculinidad_2002 %>%
select(DEPARTAMENTO, Rel_Masc_2002 = Relacion_Masc) %>%
inner_join(
masculinidad_2022 %>% select(DEPARTAMENTO, Rel_Masc_2022 = Relacion_Masc),
by = "DEPARTAMENTO"
) %>%
mutate(Variacion = Rel_Masc_2022 - Rel_Masc_2002)
ggplot(comparativa_masc) +
geom_segment(
aes(x = reorder(DEPARTAMENTO, Rel_Masc_2002), xend = DEPARTAMENTO,
y = Rel_Masc_2002, yend = Rel_Masc_2022),
color = "gray70", linewidth = 1.2
) +
geom_point(aes(x = DEPARTAMENTO, y = Rel_Masc_2002, color = "2002"), size = 4) +
geom_point(aes(x = DEPARTAMENTO, y = Rel_Masc_2022, color = "2022"), size = 4) +
geom_hline(yintercept = 100, linetype = "dashed", color = "black", linewidth = 0.8) +
coord_flip() +
scale_color_manual(values = c("2002" = "steelblue", "2022" = "indianred")) +
labs(
title = "Transición de la Relación de Masculinidad (2002 vs 2022)",
subtitle = "Desplazamiento por departamento. La línea negra marca la paridad (100).",
x = "Departamento",
y = "Índice de Masculinidad (Hombres por cada 100 Mujeres)",
color = "Censo"
) +
theme_minimal() +
theme(legend.position = "bottom")
El Índice de Envejecimiento relaciona la población adulta mayor (65 años y más) con la población joven (0 a 14 años).
envejecimiento_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_0_14 = sum(ifelse(`Edad en años cumplidos` <= 14, Total, 0), na.rm = TRUE),
Pob_65_mas = sum(ifelse(`Edad en años cumplidos` >= 65, Total, 0), na.rm = TRUE)
) %>%
mutate(Indice_Envejecimiento = (Pob_65_mas / Pob_0_14) * 100)
envejecimiento_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(Edad_Num = as.numeric(`Edad en años cumplidos`)) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_60_mas = sum(ifelse(Edad_Num >= 65, Total, 0), na.rm = TRUE),
Pob_0_14 = sum(ifelse(Edad_Num <= 14, Total, 0), na.rm = TRUE)
) %>%
mutate(Indice_Envej = (Pob_60_mas / Pob_0_14) * 100)
ggplot(envejecimiento_2002, aes(x = reorder(DEPARTAMENTO, Indice_Envej), y = Indice_Envej)) +
geom_col(fill = "steelblue", alpha = 0.9) +
coord_flip() +
labs(
title = "Índice de Envejecimiento por Departamento",
subtitle = "Censo 2002 (Adultos de 65+ años por cada 100 niños de 0-14 años)",
x = "Departamento",
y = "Índice de Envejecimiento"
) +
theme_minimal()
A continuación, replicamos el cálculo del Índice de Envejecimiento para los datos del Censo 2022.
envejecimiento_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(Edad_Num = as.numeric(`Edad en años cumplidos`)) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_0_14 = sum(ifelse(Edad_Num <= 14, Total, 0), na.rm = TRUE),
Pob_65_mas = sum(ifelse(Edad_Num >= 65, Total, 0), na.rm = TRUE)
) %>%
mutate(Indice_Envejecimiento_2022 = (Pob_65_mas / Pob_0_14) * 100)
envejecimiento_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(Edad_Num = as.numeric(`Edad en años cumplidos`)) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_65_mas = sum(ifelse(Edad_Num >= 65, Total, 0), na.rm = TRUE),
Pob_0_14 = sum(ifelse(Edad_Num <= 14, Total, 0), na.rm = TRUE)
) %>%
mutate(Indice_Envej = (Pob_65_mas / Pob_0_14) * 100)
ggplot(envejecimiento_2022, aes(x = reorder(DEPARTAMENTO, Indice_Envej), y = Indice_Envej)) +
geom_col(fill = "indianred", alpha = 0.9) +
coord_flip() +
labs(
title = "Índice de Envejecimiento por Departamento",
subtitle = "Censo 2022 (Adultos de 65+ años por cada 100 niños de 0-14 años)",
x = "Departamento",
y = "Índice de Envejecimiento"
) +
theme_minimal()
A continuación unimos las tablas para realizar la comparativa entre el año 2002 - 2022
Para ilustrar el ritmo del envejecimiento territorial, el siguiente gráfico muestra cuánto aumentó la proporción de adultos mayores en cada departamento durante el periodo intercensal.
comparativa_env <- envejecimiento_2002 %>%
select(DEPARTAMENTO, Indice_Env_2002 = contains("Envej")) %>%
inner_join(
envejecimiento_2022 %>% select(DEPARTAMENTO, Indice_Env_2022 = contains("Envej")),
by = "DEPARTAMENTO"
) %>%
mutate(Variacion_Env = Indice_Env_2022 - Indice_Env_2002)
ggplot(comparativa_env) +
geom_segment(
aes(x = reorder(DEPARTAMENTO, Indice_Env_2002), xend = DEPARTAMENTO,
y = Indice_Env_2002, yend = Indice_Env_2022),
color = "gray70", linewidth = 1.2
) +
geom_point(aes(x = DEPARTAMENTO, y = Indice_Env_2002, color = "2002"), size = 4) +
geom_point(aes(x = DEPARTAMENTO, y = Indice_Env_2022, color = "2022"), size = 4) +
coord_flip() +
scale_color_manual(values = c("2002" = "steelblue", "2022" = "indianred")) +
labs(
title = "Transicion del Indice de Envejecimiento (2002 vs 2022)",
subtitle = "Adultos mayores (65+ años) por cada 100 niños (0-14 años) por departamento",
x = "Departamento",
y = "Indice de Envejecimiento",
color = "Censo"
) +
theme_minimal() +
theme(legend.position = "bottom")
La edad mediana divide a la población de cada departamento en dos grupos numéricamente iguales. Para su cálculo a partir de datos agrupados, se expanden las frecuencias absolutas.
mediana_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Total_Personas = as.numeric(Total)
) %>%
filter(!is.na(Edad_Num) & !is.na(Total_Personas) & Total_Personas > 0) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Edad_Mediana_2002 = median(rep(Edad_Num, Total_Personas), na.rm = TRUE)
)
ggplot(mediana_2002, aes(x = reorder(DEPARTAMENTO, Edad_Mediana_2002), y = Edad_Mediana_2002)) +
geom_col(fill = "steelblue", alpha = 0.9) +
geom_text(aes(label = round(Edad_Mediana_2002, 1)), hjust = -0.2, size = 3.2) +
coord_flip(ylim = c(0, max(mediana_2002$Edad_Mediana_2002) * 1.15)) +
labs(
title = "Edad Mediana por Departamento",
subtitle = "Censo 2002 (La mitad de la población tiene esa edad o menos)",
x = "Departamento",
y = "Edad Mediana (Años)"
) +
theme_minimal()
A continuación, se calcula la edad mediana para el Censo 2022 y se unifican los datos para evaluar el envejecimiento poblacional en términos de años cumplidos.
mediana_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Total_Personas = as.numeric(Total)
) %>%
filter(!is.na(Edad_Num) & !is.na(Total_Personas) & Total_Personas > 0) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Edad_Mediana_2022 = median(rep(Edad_Num, Total_Personas), na.rm = TRUE)
)
ggplot(mediana_2022, aes(x = reorder(DEPARTAMENTO, Edad_Mediana_2022), y = Edad_Mediana_2022)) +
geom_col(fill = "indianred", alpha = 0.9) +
geom_text(aes(label = round(Edad_Mediana_2022, 1)), hjust = -0.2, size = 3.2) +
coord_flip(ylim = c(0, max(mediana_2022$Edad_Mediana_2022) * 1.15)) +
labs(
title = "Edad Mediana por Departamento",
subtitle = "Censo 2022 (La mitad de la población tiene esa edad o menos)",
x = "Departamento",
y = "Edad Mediana (Años)"
) +
theme_minimal()
Finalmente, se visualiza el aumento absoluto en la Edad Mediana, evidenciando cuántos años envejeció la población en cada territorio.
comparativa_mediana <- mediana_2002 %>%
select(DEPARTAMENTO, Mediana_2002 = Edad_Mediana_2002) %>%
inner_join(
mediana_2022 %>% select(DEPARTAMENTO, Mediana_2022 = Edad_Mediana_2022),
by = "DEPARTAMENTO"
) %>%
mutate(Variacion_Anos = Mediana_2022 - Mediana_2002)
ggplot(comparativa_mediana) +
geom_segment(
aes(x = reorder(DEPARTAMENTO, Mediana_2002), xend = DEPARTAMENTO,
y = Mediana_2002, yend = Mediana_2022),
color = "gray70", linewidth = 1.2
) +
geom_point(aes(x = DEPARTAMENTO, y = Mediana_2002, color = "2002"), size = 4) +
geom_point(aes(x = DEPARTAMENTO, y = Mediana_2022, color = "2022"), size = 4) +
coord_flip() +
scale_color_manual(values = c("2002" = "steelblue", "2022" = "indianred")) +
labs(
title = "Evolución de la Edad Mediana en Paraguay (2002 vs 2022)",
subtitle = "Desplazamiento en años de la mediana poblacional por departamento",
x = "Departamento",
y = "Edad Mediana (Años)",
color = "Censo"
) +
theme_minimal() +
theme(legend.position = "bottom")
Para visualizar la estructura demográfica nacional, se agrupan las edades simples en cohortes quinquenales y se grafica la distribución por sexo.
piramide_2002 <- censo_2002 %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Varon_Num = as.numeric(Varón),
Mujer_Num = as.numeric(Mujer)
) %>%
filter(!is.na(Edad_Num)) %>%
mutate(
Grupo_Edad = cut(Edad_Num,
breaks = c(seq(0, 80, by = 5), Inf),
labels = c("0-4", "5-9", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54",
"55-59", "60-64", "65-69", "70-74", "75-79", "80+"),
right = FALSE)
) %>%
group_by(Grupo_Edad) %>%
summarise(
Hombres = sum(Varon_Num, na.rm = TRUE),
Mujeres = sum(Mujer_Num, na.rm = TRUE)
) %>%
mutate(Hombres = -Hombres)
ggplot(piramide_2002) +
geom_col(aes(x = Grupo_Edad, y = Hombres), fill = "steelblue") +
geom_col(aes(x = Grupo_Edad, y = Mujeres), fill = "indianred") +
coord_flip() + # Voltea las barras para que queden horizontales
labs(
title = "Pirámide Poblacional de Paraguay - 2002",
x = "Grupos de Edad",
y = "Población (Hombres a la izq. | Mujeres a la der.)"
) +
scale_y_continuous(labels = function(x) format(abs(x), scientific = FALSE, big.mark = ".")) +
theme_minimal()
Para evidenciar la transición demográfica, se genera la pirámide poblacional del año 2022 utilizando los mismos rangos quinquenales.
piramide_2022 <- censo_2022 %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Varon_Num = as.numeric(Varón),
Mujer_Num = as.numeric(Mujer)
) %>%
filter(!is.na(Edad_Num)) %>%
mutate(
Grupo_Edad = cut(Edad_Num,
breaks = c(seq(0, 80, by = 5), Inf),
labels = c("0-4", "5-9", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54",
"55-59", "60-64", "65-69", "70-74", "75-79", "80+"),
right = FALSE)
) %>%
group_by(Grupo_Edad) %>%
summarise(
Hombres = sum(Varon_Num, na.rm = TRUE),
Mujeres = sum(Mujer_Num, na.rm = TRUE)
) %>%
mutate(Hombres = -Hombres)
ggplot(piramide_2022) +
geom_col(aes(x = Grupo_Edad, y = Hombres), fill = "steelblue") +
geom_col(aes(x = Grupo_Edad, y = Mujeres), fill = "indianred") +
coord_flip() +
labs(
title = "Pirámide Poblacional de Paraguay - 2022",
x = "Grupos de Edad",
y = "Población (Hombres a la izq. | Mujeres a la der.)"
) +
scale_y_continuous(labels = function(x) format(abs(x), scientific = FALSE, big.mark = ".")) +
theme_minimal()
piramide_dpto_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Varon_Num = as.numeric(Varón),
Mujer_Num = as.numeric(Mujer)
) %>%
filter(!is.na(Edad_Num)) %>%
mutate(
Grupo_Edad = cut(Edad_Num,
breaks = c(seq(0, 80, by = 5), Inf),
labels = c("0-4", "5-9", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54",
"55-59", "60-64", "65-69", "70-74", "75-79", "80+"),
right = FALSE)
) %>%
group_by(DEPARTAMENTO, Grupo_Edad) %>%
summarise(
Hombres = sum(Varon_Num, na.rm = TRUE),
Mujeres = sum(Mujer_Num, na.rm = TRUE),
.groups = "drop"
) %>%
group_by(DEPARTAMENTO) %>%
mutate(
Pob_Total_Dpto = sum(Hombres) + sum(Mujeres),
Pct_Hombres = -(Hombres / Pob_Total_Dpto) * 100,
Pct_Mujeres = (Mujeres / Pob_Total_Dpto) * 100
)
piramide_dpto_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Varon_Num = as.numeric(Varón),
Mujer_Num = as.numeric(Mujer)
) %>%
filter(!is.na(Edad_Num)) %>%
mutate(
Grupo_Edad = cut(Edad_Num,
breaks = c(seq(0, 80, by = 5), Inf),
labels = c("0-4", "5-9", "10-14", "15-19", "20-24", "25-29",
"30-34", "35-39", "40-44", "45-49", "50-54",
"55-59", "60-64", "65-69", "70-74", "75-79", "80+"),
right = FALSE)
) %>%
group_by(DEPARTAMENTO, Grupo_Edad) %>%
summarise(
Hombres = sum(Varon_Num, na.rm = TRUE),
Mujeres = sum(Mujer_Num, na.rm = TRUE),
.groups = "drop"
) %>%
group_by(DEPARTAMENTO) %>%
mutate(
Pob_Total_Dpto = sum(Hombres) + sum(Mujeres),
Pct_Hombres = -(Hombres / Pob_Total_Dpto) * 100,
Pct_Mujeres = (Mujeres / Pob_Total_Dpto) * 100
)
ggplot() +
geom_col(data = piramide_dpto_2022, aes(x = Grupo_Edad, y = Pct_Hombres, fill = "2022 (Hombres)"), alpha = 0.6) +
geom_col(data = piramide_dpto_2022, aes(x = Grupo_Edad, y = Pct_Mujeres, fill = "2022 (Mujeres)"), alpha = 0.6) +
geom_col(data = piramide_dpto_2002, aes(x = Grupo_Edad, y = Pct_Hombres, color = "2002 (Contorno)"), fill = NA, linewidth = 0.5) +
geom_col(data = piramide_dpto_2002, aes(x = Grupo_Edad, y = Pct_Mujeres, color = "2002 (Contorno)"), fill = NA, linewidth = 0.5) +
coord_flip() +
facet_wrap(~ DEPARTAMENTO, ncol = 4) +
scale_fill_manual(
name = "Censo 2022",
values = c("2022 (Hombres)" = "steelblue", "2022 (Mujeres)" = "indianred")
) +
scale_color_manual(
name = "Censo 2002",
values = c("2002 (Contorno)" = "black")
) +
labs(
title = "Evolución de la Estructura Poblacional por Departamento (2002 vs 2022)",
subtitle = "Porcentaje relativo respecto a la población departamental total",
x = "Grupo de Edad",
y = "% Población (Izquierda: Hombres | Derecha: Mujeres)"
) +
scale_y_continuous(labels = function(x) paste0(abs(x), "%")) +
theme_minimal() +
theme(
legend.position = "bottom",
strip.background = element_rect(fill = "gray90", color = NA),
strip.text = element_text(face = "bold", size = 9),
axis.text.y = element_text(size = 6)
)
total_pob_2002 <- sum(abs(piramide_2002$Hombres) + piramide_2002$Mujeres)
piramide_2002_pct <- piramide_2002 %>%
mutate(
Pct_Hombres = (Hombres / total_pob_2002) * 100,
Pct_Mujeres = (Mujeres / total_pob_2002) * 100
)
total_pob_2022 <- sum(abs(piramide_2022$Hombres) + piramide_2022$Mujeres)
piramide_2022_pct <- piramide_2022 %>%
mutate(
Pct_Hombres = (Hombres / total_pob_2022) * 100,
Pct_Mujeres = (Mujeres / total_pob_2022) * 100
)
ggplot() +
geom_col(data = piramide_2002_pct, aes(x = Grupo_Edad, y = Pct_Hombres), fill = "steelblue", alpha = 0.8) +
geom_col(data = piramide_2002_pct, aes(x = Grupo_Edad, y = Pct_Mujeres), fill = "indianred", alpha = 0.8) +
geom_col(data = piramide_2022_pct, aes(x = Grupo_Edad, y = Pct_Hombres), fill = NA, color = "darkblue", linewidth = 0.9) +
geom_col(data = piramide_2022_pct, aes(x = Grupo_Edad, y = Pct_Mujeres), fill = NA, color = "darkred", linewidth = 0.9) +
coord_flip() +
labs(
title = "Evolución Estructural de la Población (2002 vs 2022)",
subtitle = "Color sólido: Censo 2002 | Líneas de borde: Censo 2022",
x = "Grupos de Edad",
y = "Porcentaje de la Población Total"
) +
scale_y_continuous(labels = function(x) paste0(format(abs(x), digits = 1, nsmall = 1), "%")) +
theme_minimal()
Este indicador mide la carga económica potencial que soporta la población en edad activa (15 a 64 años). Se calcula relacionando a la población dependiente (0 a 14 años y 65 años o más) con la población productiva.
dependencia_2002 <- censo_2002 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Total_Num = as.numeric(Total)
) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_Dependiente = sum(ifelse(Edad_Num <= 14 | Edad_Num >= 65, Total_Num, 0), na.rm = TRUE),
Pob_Activa = sum(ifelse(Edad_Num >= 15 & Edad_Num <= 64, Total_Num, 0), na.rm = TRUE),
.groups = "drop"
) %>%
mutate(Dep_2002 = (Pob_Dependiente / Pob_Activa) * 100)
ggplot(dependencia_2002, aes(x = reorder(DEPARTAMENTO, Dep_2002), y = Dep_2002)) +
geom_col(fill = "steelblue", alpha = 0.9) +
geom_text(aes(label = round(Dep_2002, 1)), hjust = -0.2, size = 3.2) +
coord_flip(ylim = c(0, max(dependencia_2002$Dep_2002, na.rm = TRUE) * 1.15)) +
labs(
title = "Relación de Dependencia Demográfica por Departamento",
subtitle = "Censo 2002 (Dependientes por cada 100 personas en edad activa)",
x = "Departamento",
y = "Relación de Dependencia (%)",
caption = "Fuente: Elaboración propia con datos del Censo 2002 (INE)"
) +
theme_minimal()
dependencia_2022 <- censo_2022 %>%
filter(DEPARTAMENTO %in% dptos_py) %>%
mutate(
Edad_Num = as.numeric(`Edad en años cumplidos`),
Total_Num = as.numeric(Total)
) %>%
group_by(DEPARTAMENTO) %>%
summarise(
Pob_Dependiente = sum(ifelse(Edad_Num <= 14 | Edad_Num >= 65, Total_Num, 0), na.rm = TRUE),
Pob_Activa = sum(ifelse(Edad_Num >= 15 & Edad_Num <= 64, Total_Num, 0), na.rm = TRUE),
.groups = "drop"
) %>%
mutate(Dep_2022 = (Pob_Dependiente / Pob_Activa) * 100)
ggplot(dependencia_2022, aes(x = reorder(DEPARTAMENTO, Dep_2022), y = Dep_2022)) +
geom_col(fill = "indianred", alpha = 0.9) +
geom_text(aes(label = round(Dep_2022, 1)), hjust = -0.2, size = 3.2) +
coord_flip(ylim = c(0, max(dependencia_2022$Dep_2022, na.rm = TRUE) * 1.15)) +
labs(
title = "Relación de Dependencia Demográfica por Departamento",
subtitle = "Censo 2022 (Dependientes por cada 100 personas en edad activa)",
x = "Departamento",
y = "Relación de Dependencia (%)",
caption = "Fuente: Elaboración propia con datos del Censo 2022 (INE)"
) +
theme_minimal()
comparativa_dep <- dependencia_2002 %>%
select(DEPARTAMENTO, Dep_2002) %>%
inner_join(
dependencia_2022 %>% select(DEPARTAMENTO, Dep_2022),
by = "DEPARTAMENTO"
) %>%
mutate(Variacion_Dep = Dep_2022 - Dep_2002)
ggplot(comparativa_dep) +
geom_segment(
aes(x = reorder(DEPARTAMENTO, Dep_2002), xend = DEPARTAMENTO,
y = Dep_2002, yend = Dep_2022),
color = "gray70", linewidth = 1.2
) +
geom_point(aes(x = DEPARTAMENTO, y = Dep_2002, color = "2002"), size = 4) +
geom_point(aes(x = DEPARTAMENTO, y = Dep_2022, color = "2022"), size = 4) +
coord_flip() +
scale_color_manual(values = c("2002" = "steelblue", "2022" = "indianred")) +
labs(
title = "Caida de la Relacion de Dependencia (2002 vs 2022)",
subtitle = "Evidencia del Bono Demografico: Desplazamiento del nivel de carga por departamento",
x = "Departamento",
y = "Dependientes por cada 100 personas activas",
color = "Censo"
) +
theme_minimal() +
theme(legend.position = "bottom")
Como cierre del análisis de la dinámica demográfica, se integran las proyecciones de fertilidad con la finalidad de dejar en evidencia como ha ido cayendo a lo largo de las dos ultimas décadas.
datos_fertilidad <- read_excel("Datos/Estim_y_Proy_1950-2050.xlsx", sheet = "TEFE-TGF")
datos_fertilidad <- read_excel("Datos/Estim_y_Proy_1950-2050.xlsx", sheet = "TEFE-TGF", skip = 5) %>%
rename(Grupo_Edad = 1) %>%
filter(!is.na(Grupo_Edad) & Grupo_Edad != "TGF")
A continuación, se analizan las Tasas Específicas de Fecundidad (TEFE) proyectadas para los periodos cercanos a los censos de estudio, evidenciando el cambio en el comportamiento reproductivo de la población femenina.
library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)
library(stringr)
datos_fertilidad <- read_excel("Datos/Estim_y_Proy_1950-2050.xlsx", sheet = "TEFE-TGF", skip = 5)
fertilidad_comp <- datos_fertilidad %>%
select(Grupo_Edad = 1, `2000`, `2020`) %>%
filter(Grupo_Edad %in% c("15-19", "20-24", "25-29", "30-34", "35-39", "40-44", "45-49")) %>%
pivot_longer(cols = c(`2000`, `2020`), names_to = "Anio", values_to = "Tasa") %>%
mutate(Tasa = as.numeric(Tasa))
ggplot(fertilidad_comp, aes(x = Grupo_Edad, y = Tasa, color = Anio, group = Anio)) +
geom_line(linewidth = 1.2) +
geom_point(size = 3) +
scale_color_manual(values = c("2000" = "darkred", "2020" = "steelblue")) +
labs(
title = "Evolucion de las Tasas Especificas de Fecundidad (TEFE)",
subtitle = "Comparativa de la estructura reproductiva (2000 vs 2020)",
x = "Grupos de Edad de la Mujer",
y = "Hijos por mujer",
color = "Anio"
) +
theme_minimal() +
theme(legend.position = "bottom")
El análisis comparativo de la estructura poblacional del Paraguay, en base a los Censos Nacionales de los años 2002 y 2022 arrojó los siguientes resultados:
Relación de Masculinidad: Se evidenció una caída generalizada en la proporción de hombres por cada 100 mujeres en casi todos los departamentos. Territorios con fuerte impronta rural o productiva que en 2002 superaban la paridad (más de 100), se han desplazado por debajo de esa línea en 2022, reflejando posibles movimientos migratorios internos o diferenciales de mortalidad.
Índice de Envejecimiento: El gráfico de mancuernas demostró un salto abrupto en la relación de adultos mayores frente a niños. Departamentos como Asunción lideran este proceso, pero la tendencia al alza se replicó sin excepciones en los 18 departamentos del país, marcando el fin de la estructura poblacional extremadamente joven.
Edad Mediana: La edad que divide a la población en dos mitades iguales experimentó un incremento notorio. En 2002, la mayoría de los departamentos presentaban medianas que rondaban los 20 años; para 2022, el bloque se desplazó masivamente hacia la derecha, superando los 25 a 30 años en gran parte del territorio nacional.
Pirámides Poblacionales: La superposición de las pirámides (2002 vs 2022) visibilizó físicamente el cambio. La reducción drástica de la base (0 a 14 años) confirmando así la caída en la natalidad, mientras que el engrosamiento del tronco central y superior refleja el aumento de la esperanza de vida.
Relación de Dependencia y Fecundidad: Se comprobó una caída en picada de la carga de dependientes (niños y ancianos) por cada 100 personas en edad activa. A su vez, el análisis de las Tasas Específicas de Fecundidad (TEFE) demostró que las mujeres paraguayas de 2020 tienen significativamente menos hijos en todas sus etapas reproductivas en comparación con el año 2000.
Al finalizar el presente trabajo queda en evidencia la acelerada transición demográfica por la cual está atravesando el Paraguay en las últimas dos décadas. Aunque el análisis se basa en los censos nacionales de 2002 y 2022, esta transición viene gestándose desde mucho antes. Esto se puede deducir gracias a las proyecciones de la tasa de fecundidad, que pasó de un promedio histórico mayor a 5 hijos por mujer (en edad reproductiva) a niveles inferiores a 2,4 hijos en los últimos años.
Con base en esto, queda definitivamente demostrado que el país ha dejado atrás la histórica “pirámide expansiva” de base ancha, característica de altas tasas de fecundidad y mortalidad, para consolidar una estructura de perfil cada vez más rectangular. Este cambio se explica a través de la fuerte caída en las tasas de fecundidad y el estiramiento en los índices de envejecimiento y edad mediana. Cabe mencionar que estos fenómenos responden directamente a los avances de la medicina, el mayor acceso a la información y el desarrollo tecnológico, factores que han facilitado la planificación familiar y han contribuido a prolongar la esperanza de vida de la población.
El ensanchamiento del tronco de la pirámide y la caída en la relación de dependencia confirman que Paraguay se encuentra atravesando el fenómeno conocido como Bono Demográfico, una ventana de oportunidad donde la población productiva supera con creces a la población inactiva. Sin embargo, el rápido desplazamiento del índice de envejecimiento advierte que este bono es temporal: el país envejecerá de forma inminente, lo que representa el próximo gran desafío para los sistemas de salud, previsión social y mercado laboral.