Introducción

El análisis del mercado laboral y del nivel de bienestar económico de la población ocupada requiere evaluar no solo la evolución nominal del ingreso, sino también su poder adquisitivo real. En periodos inflacionarios, las variaciones en el nivel general de precios pueden erosionar sensiblemente la capacidad de compra del salario, generando heterogeneidades sectoriales según la rama de actividad económica.

El presente proyecto analiza los microdatos de la Encuesta Permanente de Hogares Continua (EPHC) elaborada por el Instituto Nacional de Estadística (INE) de Paraguay para el quinquenio reciente (2022–2025).

Objetivo General

Cuantificar el efecto de la inflación y la pérdida del poder adquisitivo sobre los ingresos salariales de la población ocupada en Paraguay durante el periodo 2022–2025.

Objetivos Específicos

  • Consolidar e integrar las bases de microdatos anuales de la EPHC del INE para el periodo 2022–2025.
  • Aplicar técnicas de minería y procesamiento de datos masivos en R para la depuración y filtrado de inconsistencias e ingresos atípicos.
  • Etiquetar y segmentar la población económicamente activa (PEA) ocupada según las ramas de actividad económica normalizadas (CIIU).
  • Ajustar el ingreso nominal principal (e01aimde) deflactándolo por el Índice de Precios al Consumidor (IPC) para calcular el salario real por sector.

Fuente de Datos

Los microdatos analizados corresponden a los registros oficiales del Instituto Nacional de Estadística (INE).


Procesamiento de Datos

1. Carga de Librerías y Configuración de Rutas

library(data.table)
library(readr)
library(dplyr)
library(ggplot2)
library(knitr)

# Ruta del espacio de trabajo local
ruta <- "C:/Users/fagu_/Desktop/Trabajo Prático Analítica de Big Data/Trabajo Práctico/"

2. Carga Masiva de Microdatos de la EPHC

EPHC2022 <- read_delim(paste0(ruta, "REG02_EPHC_ANUAL_2022.csv"), 
    delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ",", 
        grouping_mark = "."), trim_ws = TRUE)
EPHC2022 <- as.data.table(EPHC2022)

EPHC2023 <- read_delim(paste0(ruta, "REG02_EPHC_ANUAL_2023.csv"), 
    delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ",", 
        grouping_mark = "."), trim_ws = TRUE)
EPHC2023 <- as.data.table(EPHC2023)

EPHC2024 <- read_delim(paste0(ruta, "REG02_EPHC_ANUAL_2024.csv"), 
    delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ",", 
        grouping_mark = "."), trim_ws = TRUE)
EPHC2024 <- as.data.table(EPHC2024)

EPHC2025 <- read_delim(paste0(ruta, "REG02_EPHC_ANUAL_2025.csv"), 
    delim = ";", escape_double = FALSE, locale = locale(decimal_mark = ",", 
        grouping_mark = "."), trim_ws = TRUE)
EPHC2025 <- as.data.table(EPHC2025)

3. Integración y Consolidación de Bases Anuales

# Unir todas las bases anuales en una compilada única
EPHC <- rbind(EPHC2022, EPHC2023, EPHC2024, EPHC2025)

# Distribución inicial de las filas consolidadas por año
table(EPHC$AÑO)
## 
##  2022  2023  2024  2025 
## 61912 58005 57744 55934

4. Depuración, Filtrado y Normalización Sectorial

Al explorar el campo de ingresos e01aimde se identifican registros nulos o valores extremos (superiores a 500 millones) que corresponden a distorsiones como liquidaciones, finiquitos o errores de registro que alteran las métricas salariales recurrentes.

# Filtrado de salarios válidos, PEA activa ocupada y códigos válidos de rama económica
EPHCF <- EPHC[e01aimde > 0 & e01aimde < 90000000 & PEAA == 1 & RAMA_PEA > 1 & RAMA_PEA < 99]

# Resumen estadístico del ingreso nominal depurado
summary(EPHCF$e01aimde)
##     Min.  1st Qu.   Median     Mean  3rd Qu.     Max. 
##    14989  1418815  2450080  2871184  3397453 89719408

5. Etiquetado de las Ramas de Actividad Económica (CIIU)

# Diccionario de mapeo estructural para las categorías de la variable RAMA_PEA
descripcion_ramas <- data.table(
  RAMA_PEA = c(2, 3, 4, 5, 6, 7, 8),
  RAMA_DESC = c(
    "Industrias manufactureras",
    "Electricidad, gas y agua",
    "Construcciones",
    "Comercio, restaurantes y hoteles",
    "Transporte, almacenamiento y comunicaciones",
    "Finanzas, seguros e inmuebles",
    "Servicios comunales, sociales y personales"
  )
)

# Integración del diccionario al dataset de trabajo
EPHCF <- merge(EPHCF, descripcion_ramas, by = "RAMA_PEA", all.x = TRUE)
EPHCF[, RAMA_DESC := as.factor(RAMA_DESC)]

Análisis de Capacidad de Compra y Salario Real

1. Cálculo del Salario Real Deflactado (Base Diciembre 2025)

Utilizando los valores de inflación del Banco Central del Paraguay (BCP), ajustamos el ingreso nominal principal dividiéndolo por el deflactor correspondiente para homogeneizar el poder de compra.

# Asignación de factores de ajuste basados en la inflación acumulada del BCP
factores_ipc <- data.table(
  AÑO = c(2022, 2023, 2024, 2025),
  FACTOR_DEFLACTOR = c(1.0701, 1.0701, 1.0310, 1.0000)
)

EPHCF[, AÑO := as.numeric(AÑO)]
EPHCF <- merge(EPHCF, factores_ipc, by = "AÑO", all.x = TRUE)

# Obtención de la variable objetivo ajustada por IPC
EPHCF[, salario_real := e01aimde / FACTOR_DEFLACTOR]

# Comparativo agregado anual de evolución salarial
resumen_salarios <- EPHCF[, .(
  `Salario Nominal Promedio` = mean(e01aimde, na.rm = TRUE),
  `Salario Real Promedio`    = mean(salario_real, na.rm = TRUE)
), by = AÑO][order(AÑO)]

kable(resumen_salarios, digits = 0, caption = "Comparativa de Ingreso Promedio Nacional: Nominal vs. Real")
Comparativa de Ingreso Promedio Nacional: Nominal vs. Real
AÑO Salario Nominal Promedio Salario Real Promedio
2022 2651297 2477617
2023 2780875 2598705
2024 2951394 2862652
2025 3096618 3096618

2. Evolución Temporal e Impacto Heterogéneo por Rama Sectorial

# Agrupación y cálculo de métricas de pérdida del poder de compra
analisis_sectorial <- EPHCF[, .(
  Ocupados_Muestra = .N,
  Ingreso_Nominal  = mean(e01aimde, na.rm = TRUE),
  Ingreso_Real     = mean(salario_real, na.rm = TRUE)
), by = .(RAMA_DESC, AÑO)][order(RAMA_DESC, AÑO)]

analisis_sectorial[, Perdida_Poder_Compra := Ingreso_Real - Ingreso_Nominal]

# Pivotar datos temporales para evaluar variaciones absolutas del periodo
tabla_evolucion <- dcast(
  analisis_sectorial, 
  RAMA_DESC ~ AÑO, 
  value.var = c("Ingreso_Nominal", "Ingreso_Real")
)

# Cálculo de la variación porcentual del salario real (2025 vs 2022)
tabla_evolucion[, Variacion_Real_Pct := ((Ingreso_Real_2025 - Ingreso_Real_2022) / Ingreso_Real_2022) * 100]

# Despliegue de resultados estructurados para evaluación sectorial
kable(
  tabla_evolucion[, .(RAMA_DESC, `Ingreso Real 2022` = Ingreso_Real_2022, `Ingreso Real 2025` = Ingreso_Real_2025, `Variación Real %` = Variacion_Real_Pct)], 
  digits = 2,
  caption = "Evolución y Variación Porcentual del Salario Real Promedio por Sector"
)
Evolución y Variación Porcentual del Salario Real Promedio por Sector
RAMA_DESC Ingreso Real 2022 Ingreso Real 2025 Variación Real %
Comercio, restaurantes y hoteles 2116063 2703480 27.76
Construcciones 2404979 2990297 24.34
Electricidad, gas y agua 6922584 8630276 24.67
Finanzas, seguros e inmuebles 3646066 4297269 17.86
Industrias manufactureras 2272662 3039769 33.75
Servicios comunales, sociales y personales 2519772 3101705 23.09
Transporte, almacenamiento y comunicaciones 3264532 3745256 14.73

Diagnóstico Visual e Impacto Inflacionario

A continuación, evaluamos gráficamente la brecha generada por el fenómeno inflacionario sobre los ingresos de la fuerza laboral, mostrando qué actividades absorbieron con mayor severidad la pérdida del poder adquisitivo.

ggplot(analisis_sectorial[AÑO == 2024], aes(x = reorder(RAMA_DESC, Perdida_Poder_Compra), y = Perdida_Poder_Compra, fill = Perdida_Poder_Compra)) +
  geom_bar(stat = "identity", width = 0.7) +
  coord_flip() +
  scale_fill_gradient(low = "#e74c3c", high = "#f39c12") +
  labs(
    title = "Brecha por Inflación: Pérdida del Poder Adquisitivo por Sector Económico",
    subtitle = "Diferencia neta registrada entre el ingreso real y el nominal (EPHC)",
    x = "Rama de Actividad Económica",
    y = "Brecha en Guaraníes Ajustados",
    fill = "Magnitud de la Pérdida"
  ) +
  theme_minimal(base_size = 12) +
  theme(
    plot.title = element_text(face = "bold", size = 14),
    axis.title = element_text(face = "bold"),
    panel.grid.minor = element_blank(),
    legend.position = "right"
  )