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.
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.
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:
Las variables incluidas son:
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.
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.
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:
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
## Registros epidemiológicos (2018-2026): 216
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
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.
estado_inmunidadSu propósito es clasificar el porcentaje de cobertura numérico continuo en tres niveles discretos de riesgo epidemiológico:
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.
contexto_sanitarioEl propósito de esta nueva columna es agrupar la variable continua de años en tres grandes períodos históricos:
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.
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_dosisggplot(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")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")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")# 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 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()
)A partir del análisis exploratorio se identificaron los siguientes hallazgos:
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.
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.
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.
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.
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.
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.
Ministerio de Salud de la Nación. (2024). Boletín Epidemiológico Nacional N° 689, SE 4.
La Nación. (10 de noviembre de 2025). “Nos inquieta la situación”: la región dejó de ser libre de sarampión y se activan alertas sanitarias. Disponible en: https://www.lanacion.com.ar/sociedad/nos-inquieta-la-situacion-la-region-dejo-de-ser-libre-de-sarampion-y-se-activan-alertas-sanitarias-nid10112025/
Ministerio de Salud de la Nación. (s.f.). Cobertura de vacunación Triple Viral. Portal de Datos Abiertos de la República Argentina. Disponible en: https://datos.salud.gob.ar/dataset/porc-de-cobertura-de-la-vacuna-triple-viral-srp-sarampion-parotiditis-o-paperas-y-rubeola/archivo/2e316239-2718-4ee8-b896-9d23f79f104c
Ministerio de Salud de la Nación. (2026). Reportes numéricos de casos de la notificación nominal - SNVS 2.0 [Conjunto de datos]. Sistema Integrado de Información Sanitaria Argentino (SISA).