Introducción

El presente trabajo se desarrolla en el marco del análisis exploratorio de datos, el cual tiene como finalidad estudiar la evolución de las coberturas de vacunación Triple Viral en Argentina y su relación con la incidencia de enfermedades prevenibles. Para realizarlo se construyó un dataset integrado a partir de información proveniente de fuentes oficiales de datos abiertos y del Sistema Integrado de Información Sanitaria Argentino (SISA).

La base de datos reúne información correspondiente al período 2009-2026 e incluye dos tipos de registros: por un lado, los registros de cobertura de vacunación por provincia, año y tipo de dosis (disponibles para 2009-2024); por otro, los registros de casos notificados de sarampión, rubéola y parotiditis. La integración de estas fuentes permitió disponer de una base más completa para analizar la evolución de los indicadores de vacunación y su relación con la situación epidemiológica observada en el país.

Problemática y su contexto

La vacuna Triple Viral es una de las principales herramientas para la prevención del sarampión, la rubéola y la parotiditis; estas enfermedades son transmisibles y pueden reaparecer cuando los niveles de vacunación de la población disminuyen. Para mantener la protección colectiva y evitar la ocurrencia de brotes, las autoridades sanitarias recomiendan alcanzar y sostener coberturas de vacunación iguales o superiores al 95% en todas las jurisdicciones.

Factores como las diferencias regionales, el acceso a los servicios de salud, las características demográficas de la población y diversos acontecimientos políticos, sociales o sanitarios pueden generar variaciones entre provincias y a lo largo del tiempo. Entre estos acontecimientos se destaca la reciente pandemia de COVID-19, que interrumpió servicios de salud en todo el mundo.

En este contexto, resulta importante analizar cómo evolucionaron las coberturas de vacunación Triple Viral en Argentina, identificar posibles desigualdades territoriales y estudiar si existen jurisdicciones que presentan niveles de cobertura inferiores a los parámetros recomendados. Asimismo, la incorporación de información epidemiológica permite explorar la relación entre las coberturas de vacunación y la aparición de casos notificados.

Descripción del dataset

El dataset utilizado en este trabajo presenta información sobre las coberturas de vacunación de la vacuna Triple Viral y los casos notificados de las enfermedades que previene, en las distintas jurisdicciones de la República Argentina.

La base de datos original está compuesta por 816 registros y 7 variables, abarcando el período 2009-2026. Los registros tienen dos naturalezas distintas:

  • Registros de cobertura (2009-2024): cada provincia y año cuenta con dos filas, una por cada tipo de dosis (primera dosis a los 12 meses y segunda dosis al ingreso escolar). Estas filas tienen cargada la variable Cobertura_Vacunacion, lo que suma un total de 768 registros.
  • Registros epidemiológicos (2018-2026): cada provincia cuenta con una única fila por año, sin dato de cobertura ni de tipo de dosis (NA), pero con los casos notificados de enfermedades. En los registros de cobertura (2018-2024) este valor se repite en las dos filas de dosis de cada provincia, ya que los casos son a nivel provincia-año, no por dosis, con lo que se agregan 48 registros.

Las variables incluidas son:

  • ID_Provincia: identificador numérico de la jurisdicción.
  • Provincia: nombre de la provincia o jurisdicción argentina (24 jurisdicciones: 23 provincias + CABA).
  • Año: año al que corresponde el registro.
  • Tipo_Dosis: indica si la cobertura corresponde a la primera dosis (12 meses) o a la segunda dosis (ingreso escolar). Vacío en los registros epidemiológicos de 2025-2026.
  • Cobertura_Vacunacion: proporción de la población objetivo que recibió la vacuna (ej.: 0.95 = 95%). Puede superar 1 (100%) debido a que el denominador poblacional es una estimación.
  • Casos_Sarampion_Rubeola: casos notificados de sarampión o rubéola para esa provincia y año. En los registros de cobertura (2009-2024) este valor se repite en las dos filas de dosis de cada provincia, ya que los casos son a nivel provincia-año, no por dosis.
  • Casos_Parotiditis: casos notificados de parotiditis para esa provincia y año (misma lógica que la variable anterior).

Nota sobre los registros de 2009-2017: en esos años los casos figuran como cero en toda la base. Dado que dicho valor corresponde a una ausencia de notificación registrada y no necesariamente a la inexistencia real de casos, en el análisis epidemiológico (Pregunta 4) se excluyen esos años y se trabaja a partir de 2018, momento desde el cual se dispone de registros de casos efectivos. La información de cobertura, en cambio, es válida en todo el período 2009-2024 y se utiliza completa.

Justificación de la elección del dataset

Los datos fueron obtenidos a partir de fuentes públicas oficiales, principalmente del portal de Datos Abiertos de la República Argentina y del Sistema Integrado de Información Sanitaria Argentino (SISA). Inicialmente contábamos con distintos datasets independientes que no cumplían con las condiciones necesarias para ser analizados; fue necesario realizar un proceso de modificación en la disposición de los datos de cobertura por dosis, provincia y año e integración de la cantidad de casos notificados de las enfermedades que previenen la vacuna para construir una única base que permitiera efectuar un análisis completo, combinando indicadores de cobertura con indicadores epidemiológicos.

Objetivos del análisis

El objetivo de este trabajo es realizar un análisis exploratorio de las coberturas de vacunación Triple Viral en Argentina y su relación con la incidencia de enfermedades prevenibles, a fin de:

  • Identificar tendencias temporales en la cobertura de vacunación.
  • Evaluar las diferencias existentes entre provincias.
  • Analizar el impacto de la pandemia de COVID-19 sobre los niveles de cobertura.
  • Detectar jurisdicciones con coberturas inferiores a las recomendadas.
  • Examinar la relación entre cobertura y casos notificados de enfermedades prevenibles en el período 2018-2026.

Limpieza y Preparación de Datos

Carga del dataset y separación en dos bases

El dataset original contiene dos tipos de registros con naturalezas distintas. Por ello, lo separamos en dos bases de trabajo: una para el análisis de cobertura y otra para el análisis epidemiológico. Esto evita perder los datos de casos de 2025-2026 y, al mismo tiempo, garantiza que cada análisis utilice los registros adecuados.

datos_raw <- read_excel("Dataset_Vacuna_Sisa.xlsx")

# Vista rápida de la estructura original
glimpse(datos_raw)
## Rows: 816
## Columns: 7
## $ ID_Provincia            <dbl> 2, 2, 6, 6, 10, 10, 14, 14, 18, 18, 22, 22, 26…
## $ Año                     <dbl> 2009, 2009, 2009, 2009, 2009, 2009, 2009, 2009…
## $ Provincia               <chr> "CABA", "CABA", "BUENOS AIRES", "BUENOS AIRES"…
## $ Tipo_Dosis              <chr> "1ra Dosis (12 meses)", "2da Dosis (Ingreso Es…
## $ Cobertura_Vacunacion    <dbl> 0.950, 0.953, 1.054, 0.988, 1.127, 0.956, 1.17…
## $ Casos_Sarampion_Rubeola <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
## $ Casos_Parotiditis       <dbl> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0…
# Base 1: COBERTURA (2009-2024) — solo filas con dosis y cobertura cargadas
datos_cobertura <- datos_raw %>%
  filter(!is.na(Tipo_Dosis), !is.na(Cobertura_Vacunacion), Año <= 2024)

# Base 2: CASOS NOTIFICADOS — un registro por provincia y año.
# Excluimos 2009-2017 porque los casos figuran como cero por ausencia de
# notificación registrada, no por inexistencia real de casos.
datos_casos <- datos_raw %>%
  group_by(ID_Provincia, Provincia, Año) %>%
  summarise(
    Casos_Sarampion_Rubeola = first(Casos_Sarampion_Rubeola),
    Casos_Parotiditis       = first(Casos_Parotiditis),
    .groups                 = "drop"
  ) %>%
  filter(Año >= 2018)

cat("Registros de cobertura (2009-2024):", nrow(datos_cobertura), "\n")
## Registros de cobertura (2009-2024): 768
cat("Registros epidemiológicos (2018-2026):", nrow(datos_casos), "\n")
## Registros epidemiológicos (2018-2026): 216

Corrección de formatos

La variable Cobertura_Vacunacion se encuentra expresada como proporción (ej: 0.95 equivale a 95%). La convertimos a porcentaje multiplicando por 100 para facilitar la interpretación en los gráficos. Cabe aclarar que algunos valores superan el 100%, lo cual es esperable en estadísticas de cobertura cuando el denominador poblacional es una estimación que difiere de la población efectivamente vacunada.

datos_cobertura <- datos_cobertura %>%
  mutate(
    Cobertura_Pct = Cobertura_Vacunacion * 100,
    Año           = as.integer(Año),
    Provincia     = as.factor(Provincia),
    Tipo_Dosis    = as.factor(Tipo_Dosis)
  )

datos_casos <- datos_casos %>%
  mutate(Año = as.integer(Año))

# Resumen estadístico de la cobertura
summary(datos_cobertura$Cobertura_Pct)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   30.80   82.70   91.25   89.48   98.40  138.50

Creación de nuevas variables

Para poder responder de manera analítica a las preguntas formuladas y darle a los gráficos un mayor sentido, se procedió a la creación de dos nuevas variables categóricas derivadas de los datos originales.

Variable estado_inmunidad

Su propósito es clasificar el porcentaje de cobertura numérico continuo en tres niveles discretos de riesgo epidemiológico:

  • Óptimo: cobertura ≥ 95%
  • Riesgo moderado: cobertura entre 80% y 94%
  • Riesgo crítico: cobertura < 80%
datos_cobertura <- datos_cobertura %>%
  mutate(
    estado_inmunidad = case_when(
      Cobertura_Pct >= 95 ~ "Óptimo",
      Cobertura_Pct >= 80 ~ "Riesgo moderado",
      TRUE                ~ "Riesgo crítico"
    ),
    estado_inmunidad = factor(
      estado_inmunidad,
      levels = c("Óptimo", "Riesgo moderado", "Riesgo crítico")
    )
  )

table(datos_cobertura$estado_inmunidad)
## 
##          Óptimo Riesgo moderado  Riesgo crítico 
##             281             335             152

Esto nos permite visualizar fácilmente la cantidad de provincias que se encuentran en zona de vulnerabilidad ante posibles brotes.

Variable contexto_sanitario

El propósito de esta nueva columna es agrupar la variable continua de años en tres grandes períodos históricos:

  • Pre-pandemia: antes de 2020
  • Pandemia: 2020-2021
  • Post-pandemia: 2022 en adelante
asignar_contexto <- function(anio) {
  case_when(
    anio < 2020  ~ "Pre-pandemia",
    anio <= 2021 ~ "Pandemia",
    TRUE         ~ "Post-pandemia"
  )
}

datos_cobertura <- datos_cobertura %>%
  mutate(
    contexto_sanitario = factor(
      asignar_contexto(Año),
      levels = c("Pre-pandemia", "Pandemia", "Post-pandemia")
    )
  )

datos_casos <- datos_casos %>%
  mutate(
    contexto_sanitario = factor(
      asignar_contexto(Año),
      levels = c("Pre-pandemia", "Pandemia", "Post-pandemia")
    )
  )

table(datos_cobertura$contexto_sanitario)
## 
##  Pre-pandemia      Pandemia Post-pandemia 
##           528            96           144

Esta variable facilita la medición directa del impacto del COVID-19 sobre los promedios de vacunación y permite evaluar si el sistema de salud logró recuperar sus niveles previos a la emergencia.


Análisis Exploratorio

Preguntas de análisis

  1. ¿Qué porcentaje de las jurisdicciones argentinas alcanzó la cobertura recomendada del 95% para la vacuna Triple Viral?
  2. ¿Cuál fue el impacto de la pandemia de COVID-19 en la tendencia histórica de la cobertura de vacunación Triple Viral en Argentina?
  3. ¿Existe una tasa de abandono significativa en el esquema de vacunación entre la primera dosis y la segunda?
  4. ¿Cómo evolucionó la desigualdad territorial en las coberturas de vacunación y en qué medida estos focos de vulnerabilidad se relacionan con la incidencia de casos notificados?

Visualización de Datos

Pregunta 1: ¿Qué porcentaje de jurisdicciones alcanzó la cobertura recomendada del 95% para la vacuna Triple Viral?

Para responder esta pregunta, calculamos la proporción de registros que cumplen o superan el umbral del 95% recomendado por las autoridades sanitarias.

# Proporción global que cumple el umbral
cumplen <- datos_cobertura$Cobertura_Pct >= 95
prop_tabla <- prop.table(table(cumplen)) * 100
print(round(prop_tabla, 1))
## cumplen
## FALSE  TRUE 
##  63.4  36.6
# Proporción por estado_inmunidad
datos_cobertura %>%
  count(estado_inmunidad) %>%
  mutate(porcentaje = round(n / sum(n) * 100, 1))

Distribución de cobertura
# Usamos breaks que hacen coincidir 80 y 95 con bordes de bin, de modo que
# cada barra pertenezca a una sola categoría de estado_inmunidad y los colores
# no queden superpuestos.
ggplot(datos_cobertura, aes(x = Cobertura_Pct, fill = estado_inmunidad)) +
  geom_histogram(
    breaks = seq(30, 140, by = 5),
    color  = "white",
    alpha  = 0.9
  ) +
  geom_vline(
    xintercept = 95,
    color      = "red",
    linewidth  = 1.2,
    linetype   = "dashed"
  ) +
  annotate("text", x = 96.5, y = 95, label = "Meta: 95%",
           color = "red", fontface = "bold", hjust = 0, size = 3.5) +
  scale_fill_manual(
    values = c("Óptimo" = "#2196F3", "Riesgo moderado" = "#FFA726", "Riesgo crítico" = "#EF5350"),
    name   = "Estado de inmunidad"
  ) +
  labs(
    title    = "Distribución de la cobertura de vacunación Triple Viral (2009–2024)",
    subtitle = "Clasificada según el umbral recomendado del 95%",
    x        = "Cobertura (%)",
    y        = "Frecuencia"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")

Evolución del estado de inmunidad
# Evolución anual del porcentaje de registros en cada estado
datos_cobertura %>%
  group_by(Año, estado_inmunidad) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Año) %>%
  mutate(pct = n / sum(n) * 100) %>%
  ggplot(aes(x = Año, y = pct, fill = estado_inmunidad)) +
  geom_area(alpha = 0.8, position = "stack") +
  geom_vline(xintercept = 2020, color = "black", linetype = "dashed", linewidth = 1) +
  annotate("text", x = 2020.5, y = 50, label = "Inicio\npandemia",
           hjust = 0, size = 3, fontface = "italic") +
  scale_fill_manual(
    values = c("Óptimo" = "#2196F3", "Riesgo moderado" = "#FFA726", "Riesgo crítico" = "#EF5350"),
    name   = "Estado de inmunidad"
  ) +
  scale_y_continuous(labels = label_percent(scale = 1)) +
  labs(
    title    = "Evolución anual del estado de inmunidad (2009–2024)",
    subtitle = "Proporción de jurisdicciones en cada categoría de cobertura",
    x        = "Año",
    y        = "Porcentaje de registros"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")


Pregunta 2: ¿Cuál fue el impacto de la pandemia de COVID-19 en la tendencia histórica de la cobertura de vacunación Triple Viral en Argentina?

promedio_anual <- datos_cobertura %>%
  group_by(Año) %>%
  summarise(
    Cobertura_Promedio = mean(Cobertura_Pct, na.rm = TRUE),
    DS                 = sd(Cobertura_Pct,   na.rm = TRUE),
    .groups            = "drop"
  )

promedio_anual

Evolución temporal
ggplot(promedio_anual, aes(x = Año, y = Cobertura_Promedio)) +
  geom_ribbon(
    aes(ymin = Cobertura_Promedio - DS, ymax = Cobertura_Promedio + DS),
    fill = "steelblue", alpha = 0.15
  ) +
  geom_line(linewidth = 1.2, color = "steelblue") +
  geom_point(size = 2.5, color = "steelblue") +
  geom_hline(yintercept = 95, color = "red", linetype = "dashed", linewidth = 0.9) +
  annotate("text", x = 2009.3, y = 96, label = "Meta 95%",
           color = "red", size = 3.2, fontface = "bold") +
  geom_vline(xintercept = 2020, color = "darkorange", linetype = "dashed", linewidth = 1) +
  annotate("text", x = 2020.2, y = 107, label = "Pandemia",
           color = "darkorange", hjust = 0, size = 3.2, fontface = "italic") +
  annotate("rect", xmin = 2020, xmax = 2021.9, ymin = -Inf, ymax = Inf,
           fill = "orange", alpha = 0.08) +
  labs(
    title    = "Evolución de la cobertura promedio de vacunación Triple Viral (2009–2024)",
    subtitle = "La banda gris representa ±1 desvío estándar entre provincias",
    x        = "Año",
    y        = "Cobertura promedio (%)"
  ) +
  theme_minimal(base_size = 12)

Comparación por contexto sanitario
datos_cobertura %>%
  group_by(contexto_sanitario) %>%
  summarise(
    Media   = round(mean(Cobertura_Pct, na.rm = TRUE), 2),
    Mediana = round(median(Cobertura_Pct, na.rm = TRUE), 2),
    DS      = round(sd(Cobertura_Pct, na.rm = TRUE), 2),
    .groups = "drop"
  ) %>%
  ggplot(aes(x = contexto_sanitario, y = Media, fill = contexto_sanitario)) +
  geom_col(width = 0.6, alpha = 0.9) +
  geom_errorbar(aes(ymin = Media - DS, ymax = Media + DS), width = 0.2) +
  geom_hline(yintercept = 95, color = "red", linetype = "dashed") +
  scale_fill_manual(values = c(
    "Pre-pandemia"  = "#42A5F5",
    "Pandemia"      = "#EF5350",
    "Post-pandemia" = "#66BB6A"
  )) +
  labs(
    title    = "Cobertura promedio por contexto sanitario",
    subtitle = "Las barras de error representan ±1 DS. Línea roja = meta 95%",
    x        = NULL,
    y        = "Cobertura promedio (%)"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")


Pregunta 3: ¿Existe una tasa de abandono significativa en el esquema de vacunación entre la primera dosis y la segunda?

promedio_dosis <- datos_cobertura %>%
  group_by(Tipo_Dosis) %>%
  summarise(
    Media   = round(mean(Cobertura_Pct, na.rm = TRUE), 2),
    Mediana = round(median(Cobertura_Pct, na.rm = TRUE), 2),
    DS      = round(sd(Cobertura_Pct, na.rm = TRUE), 2),
    Min     = round(min(Cobertura_Pct, na.rm = TRUE), 2),
    Max     = round(max(Cobertura_Pct, na.rm = TRUE), 2),
    .groups = "drop"
  )

promedio_dosis

Promedio por dosis
ggplot(promedio_dosis, aes(x = Tipo_Dosis, y = Media, fill = Tipo_Dosis)) +
  geom_col(width = 0.5, alpha = 0.9) +
  geom_errorbar(aes(ymin = Media - DS, ymax = Media + DS), width = 0.15) +
  geom_text(aes(label = paste0(Media, "%")), vjust = -0.8, fontface = "bold", size = 4) +
  geom_hline(yintercept = 95, color = "red", linetype = "dashed", linewidth = 0.9) +
  annotate("text", x = 0.6, y = 96, label = "Meta 95%",
           color = "red", size = 3.2, fontface = "bold") +
  scale_fill_manual(values = c(
    "1ra Dosis (12 meses)"        = "#42A5F5",
    "2da Dosis (Ingreso Escolar)" = "#FFA726"
  )) +
  labs(
    title    = "Cobertura promedio según tipo de dosis (2009–2024)",
    subtitle = "Barras de error = ±1 DS. Línea roja = meta del 95%",
    x        = NULL,
    y        = "Cobertura promedio (%)"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "none")

Distribución (densidad)
ggplot(datos_cobertura, aes(x = Cobertura_Pct, fill = Tipo_Dosis)) +
  geom_density(alpha = 0.5, color = "white", linewidth = 0.4) +
  geom_vline(xintercept = 95, color = "red", linetype = "dashed", linewidth = 0.9) +
  annotate("text", x = 96.5, y = 0.005, label = "Meta 95%",
           color = "red", fontface = "bold", hjust = 0, size = 3.2) +
  scale_fill_manual(values = c(
    "1ra Dosis (12 meses)"        = "#42A5F5",
    "2da Dosis (Ingreso Escolar)" = "#FFA726"
  )) +
  labs(
    title    = "Distribución de la cobertura por tipo de dosis",
    subtitle = "Curvas de densidad. Línea roja = meta del 95%",
    x        = "Cobertura (%)",
    y        = "Densidad",
    fill     = "Tipo de dosis"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")

Evolución por dosis
datos_cobertura %>%
  group_by(Año, Tipo_Dosis) %>%
  summarise(Cobertura_Promedio = mean(Cobertura_Pct, na.rm = TRUE), .groups = "drop") %>%
  ggplot(aes(x = Año, y = Cobertura_Promedio, color = Tipo_Dosis, group = Tipo_Dosis)) +
  geom_line(linewidth = 1.2) +
  geom_point(size = 2) +
  geom_hline(yintercept = 95, color = "red", linetype = "dashed") +
  geom_vline(xintercept = 2020, color = "darkorange", linetype = "dashed") +
  annotate("text", x = 2020.2, y = 110, label = "Pandemia",
           color = "darkorange", hjust = 0, size = 3.2, fontface = "italic") +
  scale_color_manual(
    values = c("1ra Dosis (12 meses)" = "#1565C0", "2da Dosis (Ingreso Escolar)" = "#E65100"),
    name   = "Tipo de dosis"
  ) +
  labs(
    title    = "Evolución comparativa de cobertura por tipo de dosis (2009–2024)",
    x        = "Año",
    y        = "Cobertura promedio (%)"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")


Pregunta 4: ¿Cómo evolucionó la desigualdad territorial en las coberturas de vacunación y en qué medida estos focos de vulnerabilidad se relacionan con la incidencia de casos notificados?

Cobertura vs. casos
# Cobertura promedio nacional por año (solo hasta 2024, que son los datos que tenemos)
cobertura_anual <- datos_cobertura %>%
  filter(Año >= 2018) %>%
  group_by(Año) %>%
  summarise(Cobertura_Media = mean(Cobertura_Pct, na.rm = TRUE), .groups = "drop")

# Casos totales (Sarampión/Rubéola + Parotiditis) por año, hasta 2026
casos_total_anual <- datos_casos %>%
  group_by(Año) %>%
  summarise(
    Casos_Totales = sum(Casos_Sarampion_Rubeola, na.rm = TRUE) +
                    sum(Casos_Parotiditis,       na.rm = TRUE),
    .groups = "drop"
  )

# full_join: la cobertura queda como NA en 2025-2026 (no se inventa dato),
# pero los casos siguen hasta 2026.
combinado <- full_join(cobertura_anual, casos_total_anual, by = "Año") %>%
  arrange(Año)

# Factor de escala para llevar los casos al rango del eje de cobertura
escala <- max(combinado$Cobertura_Media, na.rm = TRUE) /
          max(combinado$Casos_Totales,   na.rm = TRUE)

ggplot(combinado, aes(x = Año)) +
  # Cobertura (eje izquierdo) — termina en 2024; na.rm evita extender la línea
  geom_line(aes(y = Cobertura_Media, color = "Cobertura promedio (%)"),
            linewidth = 1.3, na.rm = TRUE) +
  geom_point(aes(y = Cobertura_Media, color = "Cobertura promedio (%)"),
             size = 2.5, na.rm = TRUE) +
  # Casos totales (reescalados) — continúan hasta 2026
  geom_line(aes(y = Casos_Totales * escala, color = "Casos totales notificados"),
            linewidth = 1.3, na.rm = TRUE) +
  geom_point(aes(y = Casos_Totales * escala, color = "Casos totales notificados"),
             size = 2.5, na.rm = TRUE) +
  geom_hline(yintercept = 95, color = "red", linetype = "dashed", linewidth = 0.7) +
  annotate("text", x = 2018.2, y = 97, label = "Meta 95%",
           color = "red", fontface = "bold", size = 3, hjust = 0) +
  scale_y_continuous(
    name     = "Cobertura promedio (%)",
    sec.axis = sec_axis(~ . / escala, name = "Casos totales notificados (S/R + Parotiditis)")
  ) +
  scale_x_continuous(breaks = seq(2018, 2026, 1)) +
  scale_color_manual(values = c(
    "Cobertura promedio (%)"      = "#1565C0",
    "Casos totales notificados"   = "#E53935"
  )) +
  labs(
    title    = "Cobertura de vacunación vs. casos notificados (2018–2026)",
    subtitle = "Cobertura promedio (hasta 2024) y casos totales S/R + Parotiditis (hasta 2026)",
    x        = "Año",
    color    = NULL
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")

Heatmap de cobertura
# Heatmap de cobertura promedio por provincia y año (2009-2024)
datos_cobertura %>%
  group_by(Provincia, Año) %>%
  summarise(Cobertura_Media = mean(Cobertura_Pct, na.rm = TRUE), .groups = "drop") %>%
  ggplot(aes(x = factor(Año), y = reorder(Provincia, Cobertura_Media), fill = Cobertura_Media)) +
  geom_tile(color = "white", linewidth = 0.3) +
  scale_fill_gradient2(
    low      = "#B71C1C",
    mid      = "#FFF59D",
    high     = "#1565C0",
    midpoint = 95,
    name     = "Cobertura (%)"
  ) +
  labs(
    title    = "Distribución de la cobertura de vacunación por provincia y año",
    subtitle = "El punto medio de color (amarillo) corresponde a la meta del 95%",
    x        = "Año",
    y        = NULL
  ) +
  theme_minimal(base_size = 11) +
  theme(
    axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),
    panel.grid  = element_blank()
  )


Conclusiones

Hallazgos principales

A partir del análisis exploratorio se identificaron los siguientes hallazgos:

  1. Cobertura por debajo de la meta: Solo alrededor del 40% de los registros del período 2009-2024 alcanzaron el umbral recomendado del 95% de cobertura recomendada por la Organización Mundial de la Salud (OMS). Esto indica que Argentina enfrenta un desafío persistente para garantizar la inmunidad de rebaño contra estas enfermedades.

  2. Impacto de la pandemia de COVID-19: Se observó una marcada caída en la cobertura promedio durante 2020 y 2021, período en el que la pandemia interrumpió los servicios de salud y redujo la accesibilidad a los centros de vacunación. La recuperación post-pandémica fue parcial y no logró retomar los niveles previos en la mayoría de las provincias.

  3. Tasa de abandono entre dosis: El análisis comparativo de la distribución de cobertura por tipo de dosis revela una caída significativa en la adherencia de la segunda dosis (ingreso escolar) respecto de la primera. Esta brecha sugiere fallas en el sistema de salud y el sistema escolar para que los pacientes completen los esquemas de inmunización.

  4. Desigualdad territorial: Existe una heterogeneidad marcada entre provincias. Algunas jurisdicciones registran coberturas promedio sostenidamente por debajo del umbral recomendado a lo largo de todo el período analizado, lo que representa focos de vulnerabilidad potencial ante posibles brotes.

  5. Resurgimiento de enfermedades y relación con la cobertura: El análisis epidemiológico (2018-2026) muestra una cronología elocuente del efecto rezago. Los brotes de 2018-2019 coinciden con coberturas ya deterioradas en años previos; y tras la baja de circulación generada por el confinamiento, los casos vuelven a crecer hasta alcanzar en 2025 el pico máximo de la serie de Sarampión/Rubéola. Este resurgimiento acompaña la caída sostenida de las coberturas, confirmando que las brechas de inmunización tienen consecuencias epidemiológicas concretas.

Reflexión final

La materialización del riesgo advertido en los datos presentados quedó documentada inicialmente en el Boletín Epidemiológico Nacional N° 689 (SE 4, 2024), donde se emitió una alerta por un caso autóctono de sarampión en un niño no vacunado en Salta. Sin embargo, la problemática ha escalado y trascendido las fronteras nacionales: tal como confirmó la Organización Panamericana de la Salud (OPS) a fines de 2025, la región de las Américas ha perdido formalmente su estatus de territorio “libre de sarampión” tras evaluar la sostenida circulación viral (La Nación, 2025). Este hecho refleja la importancia de mantener coberturas de vacunación homogéneas y superiores al 95% tal como lo destacó el propio director de la OPS tras el anuncio: “Garantizar la vacunación homogénea y sostenida hacia el interior del país por encima del 95% es lo que nos mantendrá seguros”. Precisamente, nuestros datos demuestran que Argentina ha fallado de manera sistemática en sostener esa meta de homogeneidad territorial. La acumulación de individuos susceptibles —ya sea por abandono del esquema, personas inmunosuprimidas, barreras de acceso o disminución de la percepción de riesgo de la población— se ha traducido inevitablemente en la reactivación de cadenas de contagio que hoy nos cuestan este estatus sanitario internacional.

Los resultados de este análisis ponen de manifiesto la urgencia de monitorear de forma continua las coberturas de inmunización y de implementar estrategias diferenciadas según las necesidades de cada jurisdicción. La pandemia de COVID-19 evidenció la fragilidad del sistema, y la reaparición de casos confirmada en 2025/2026 demuestra empíricamente que el debilitamiento de la barrera inmunológica impacta directamente en el resurgimiento de enfermedades que ya se consideraban controladas.

Para trabajos futuros, sería valioso incorporar variables socioeconómicas a nivel provincial, analizar la cobertura por grupos etarios específicos y profundizar en los factores políticos, logísticos o culturales que explican la menor adherencia a la segunda dosis del esquema. Estos análisis permitirían diseñar intervenciones más focalizadas y efectivas para alcanzar y sostener las coberturas recomendadas en todo el territorio nacional.


Bibliografía