library(tidyverse)
library(scales)
library(maps)Global Measles Resurgence: Regional Trends, High-Income Comparisons, and Geographic Synchronization
cases_year_raw <- read_csv("data/cases_year.csv")Introduction
The dataset used in this project comes from the TidyTuesday “Measles cases across the world” repository (https://github.com/rfordatascience/tidytuesday/blob/main/data/2025/2025-06-24/readme.md).It contains global records of measles cases reported by different countries and regions over time. The dataset contains 2382 observations and 19 variables with 194 unique countries and 14 years of aggregated data. The variables included in the dataset are: region, country, iso3, year, total_population, annualized_population_most_recent_year_only, total_suspected_measles_rubella_cases, measles_total, measles_lab_confirmed, measles_epi_linked, measles_clinical, measles_incidence_rate_per_1000000_total_population, rubella_total, rubella_lab_confirmed, rubella_epi_linked, rubella_clinical, rubella_incidence_rate_per_1000000_total_population, discarded_cases, discarded_non_measles_rubella_cases_per_100000_total_population.
We chose this dataset because it contains time, geographic location, and disease incidence in a single dataset, which makes it suitable for exploring global trends using data visualization with ggplot2. The data also covers many countries and multiple years, which helps reveal regional patterns in measles outbreaks. By analyzing how measles incidence changes across regions and over time, we can better understand global outbreak patterns and why ongoing vaccination and monitoring remain important.
Data cleaning and preparation
- Standardized WHO region labels
- Converted case and incidence variables to numeric
- Removed rows with missing key values
- Created consistent region colors and labels for plots
- Built a custom ggplot theme for visual consistency
region_full_map <- c(
AFR = "African Region",
AFRO = "African Region",
AMR = "Region of the Americas",
AMRO = "Region of the Americas",
EMR = "Eastern Mediterranean Region",
EMRO = "Eastern Mediterranean Region",
EUR = "European Region",
EURO = "European Region",
SEAR = "South-East Asia Region",
SEARO = "South-East Asia Region",
WPR = "Western Pacific Region",
WPRO = "Western Pacific Region"
)
year_clean <- cases_year_raw |>
mutate(
region = recode(region, !!!region_full_map),
measles_total = as.numeric(measles_total),
measles_incidence = as.numeric(
measles_incidence_rate_per_1000000_total_population
)
) |>
filter(
!is.na(year),
!is.na(country),
!is.na(region),
!is.na(measles_incidence)
)
region_palette <- c(
"African Region" = "#1b9e77",
"Region of the Americas" = "#d95f02",
"Eastern Mediterranean Region" = "#7570b3",
"European Region" = "#e7298a",
"South-East Asia Region" = "#66a61e",
"Western Pacific Region" = "#1f78b4"
)
region_abbr_map <- c(
"African Region" = "AFR",
"Region of the Americas" = "AMR",
"Eastern Mediterranean Region" = "EMR",
"European Region" = "EUR",
"South-East Asia Region" = "SEAR",
"Western Pacific Region" = "WPR"
)
theme_measles <- function(base_size = 13) {
theme_minimal(base_size = base_size) +
theme(
plot.title = element_text(face = "bold", size = 16, color = "#1b1f3b"),
plot.subtitle = element_text(size = 11, color = "#3f4a5a"),
axis.title = element_text(face = "bold", color = "#1b1f3b"),
axis.text = element_text(color = "#2f3640"),
panel.grid.minor = element_blank(),
panel.grid.major = element_line(color = "#dfe6e9"),
legend.title = element_text(face = "bold"),
legend.position = "bottom",
strip.text = element_text(face = "bold", color = "#1b1f3b"),
plot.background = element_rect(fill = "#fcfcfd", color = NA)
)
}Question 1
How have measles incidence rates changed over time across regions, and is recent US resurgence part of a broader high-income trend?
This question looks at how measles incidence has changed over time across different WHO regions and whether the recent increase in the United States is part of a broader trend among high-income countries. To analyze this, we use the variables year, region, country, and measles_incidence to track how incidence changes over time. We first aggregate the data to the region–year level (q1_region_year) to observe regional trends. Then we subset the data to high-income countries (q1_slope) so that we can compare the United States with similar countries.
We are interested in this question because measles is a vaccine-preventable disease, but the reality is outbreaks still occur in many countries. Studying these patterns can help us understand whether recent increases are isolated events or part of a broader global trend, which is important for evaluating vaccination coverage and public health responses.
Approach
To examine how measles incidence changes across regions over time, we first create a heatmap that shows regional incidence intensity by year. In this plot, the x-axis represents year, the y-axis represents WHO region, and the color of each tile represents the log-transformed mean incidence in that region and year. A heatmap is useful for this question because it allows us to compare many regions across many years at the same time. The color mapping makes it easy to quickly see periods when incidence is higher or lower and to identify whether multiple regions experience increases during similar time periods.
To evaluate whether the recent US resurgence is part of a broader trend among high-income countries, we create a slope chart comparing the average measles incidence in an earlier period (2012–2018) with a recent period (2023–2025). Each line represents one high-income country, and the US is highlighted in red to make it easier to compare with other countries. A slope chart works well for this comparison because it clearly shows the direction and magnitude of change between two time periods. By looking at whether most lines slope upward or downward, we can easily see whether the increase in the US is unique or shared by other high-income countries.
Plot 1: Regional change over time (heatmap)
q1_region_year <- year_clean |>
group_by(region, year) |>
summarise(
mean_incidence = mean(measles_incidence, na.rm = TRUE),
.groups = "drop"
)
q1_region_year |>
ggplot(aes(x = year, y = region, fill = log1p(mean_incidence))) +
geom_tile(color = "white", linewidth = 0.2) +
scale_y_discrete(labels = region_abbr_map) +
scale_x_continuous(breaks = seq(2012, 2025, 2)) +
scale_fill_gradientn(
colors = c("#f7fbff", "#c6dbef", "#6baed6", "#2171b5", "#08306b"),
labels = label_number(accuracy = 0.1)
) +
labs(
title = "Measles Incidence by WHO Region Over Time",
subtitle = "Darker colors indicate higher average measles incidence per 1,000,000 people",
x = "Year",
y = "Region",
fill = "Incidence (log scale)",
caption = paste(
"Region abbreviations:",
"AFR = African Region; AMR = Region of the Americas; EMR = Eastern Mediterranean Region;",
"EUR = European Region; SEAR = South-East Asia Region; WPR = Western Pacific Region",
sep = "\n"
)
) +
theme_measles() +
theme(
legend.position = "right",
plot.caption = element_text(size = 9, color = "gray40", hjust = 0),
plot.margin = margin(t = 10, r = 10, b = 25, l = 10) # add bottom space
)
Interpretation: The heatmap shows how measles incidence changes across WHO regions from 2012 to 2025. Overall, incidence levels vary across regions and over time. The AFR and EMR often have darker colours, which indicates higher measles incidence in many years. The EUR also shows several darker periods, especially around the mid-2010s and again in the early 2020s, suggesting temporary increases in outbreaks. In contrast, the AMR remains mostly light, which means measles incidence is generally lower in this region.
The WPR show a severe outbreak in 2014-2016.The SEAR show moderate incidence with some fluctuations over time. Overall, the heatmap suggests that some regions are experiencing higher or recurring outbreaks, while others maintain relatively lower levels.
Discussion
The results show that measles incidence has changed over time across different regions rather than following a single global pattern. The heatmap indicates that some regions, such as the African Region (AFR) and Eastern Mediterranean Region (EMR), often have higher incidence levels across many years. The European Region (EUR) also shows several periods of higher incidence, especially in the late 2010s and again in the early 2020s. In contrast, the Region of the Americas (AMR) generally remains lighter on the heatmap, suggesting relatively lower measles incidence during most years. Overall, these patterns suggest that measles outbreaks occur at different times across regions, with some regions experiencing repeated increases while others maintain lower levels.
The slope chart helps answer whether the recent increase in the United States is part of a broader trend among high-income countries. The United States shows a small increase in measles incidence between the earlier period (2012–2018) and the recent period (2023–2025). However, several other high-income countries also show increases, and some countries experience even larger changes than the US. At the same time, a few countries show decreases over the same period. This pattern suggests that the recent rise in the United States is not unique, but instead appears alongside changes in other high-income countries.
One possible explanation for these patterns is that measles outbreaks are strongly influenced by vaccination coverage and population immunity. Even small gaps in vaccination coverage can allow outbreaks to occur. Increased international travel can also introduce cases across countries and regions, which may contribute to the spread of measles outbreaks. In addition, disruptions to routine immunization programs in recent years may have created temporary immunity gaps in some populations. Together, these factors may help explain why measles incidence fluctuates across regions and why several high-income countries, including the United States, have recently experienced increases.
Question 2
Are resurgence patterns geographically clustered, and do regions show synchronized increases over time?
In this question, we want to see whether outbreaks tend to occur in nearby countries or whether several regions show rising incidence during the same period. Understanding these patterns helps determine whether measles resurgence is mainly caused by local outbreaks or whether it reflects *roader global trends that affect multiple countries at the same time.
To answer this question, we focus on the variables country, region, year, and measles_incidence. Using these variables, we calculate a resurgence index, which compares recent incidence levels to a baseline period. We then use country-level data to create a world map showing where resurgence occurs geographically in year 2025, and region-level data to create a time trend smoothed line plot that shows how resurgence changes across regions over time. We are interested in this question because if resurgence appears in geographic clusters or shows synchronized increases across regions, it may indicate that factors such as international travel, regional transmission, or shared vaccination challenges influence measles outbreaks.
Definition of resurgence pattern
In this question, we define resurgence pattern before plotting:
- Baseline period: 2012-2018 for each analysis unit (country on map, region on timeline).
- Resurgence index:
current incidence / unit-specific baseline incidence(country-level on map, region-level on timeline). - Resurgence condition: a unit is in resurgence when its index is above
1(higher than its own baseline level). - Synchronized increase: regions are synchronized when multiple regional curves move upward in the same years, especially while remaining above
1.
Approach
To examine whether measles resurgence is geographically clustered, we create a choropleth world map that shows the resurgence index for each country in 2025. The resurgence index is calculated as the country’s recent incidence divided by its baseline incidence during 2012–2018. In the map, each country is colored based on this value, which allows us to see whether incidence is lower or higher than its historical baseline. A choropleth map is appropriate because it preserves the geographic location of countries, making it easier to observe whether higher resurgence values appear in nearby areas. The use of color mapping helps highlight spatial patterns and allows us to visually identify possible geographic clustering of outbreaks.
To examine whether regions show synchronized increases over time, we create a smoothed time-series line chart that plots the resurgence index for each WHO region across years. Each line represents one region, and the y-axis shows the resurgence index relative to the baseline period. A line chart is appropriate for this question because it clearly shows how values change over time and allows us to compare trends across multiple regions. By plotting several regional lines on the same timeline and using different colors for each region, we can easily see whether multiple regions experience increases during the same time periods, which would suggest synchronized resurgence patterns.
Plot 1: Geographic clustering (choropleth map)
world_map_base <- map_data("world")
country_baseline <- year_clean |>
filter(year >= 2012, year <= 2018) |>
group_by(country) |>
summarise(
baseline_incidence = mean(measles_incidence, na.rm = TRUE),
.groups = "drop"
)
map_2025 <- year_clean |>
filter(year == 2025) |>
group_by(country) |>
summarise(
measles_incidence_2025 = mean(measles_incidence, na.rm = TRUE),
.groups = "drop"
) |>
left_join(country_baseline, by = "country") |>
mutate(
resurgence_index = case_when(
!is.na(baseline_incidence) &
baseline_incidence > 0 ~ measles_incidence_2025 / baseline_incidence,
TRUE ~ NA_real_
)
) |>
mutate(
map_region = recode(
country,
"United States of America" = "USA",
"United Kingdom of Great Britain and Northern Ireland" = "UK",
"Russian Federation" = "Russia",
"Viet Nam" = "Vietnam",
"Syrian Arab Republic" = "Syria",
"Republic of Moldova" = "Moldova",
"Democratic People's Republic of Korea" = "North Korea",
"Lao People's Democratic Republic" = "Laos",
"Republic of Korea" = "South Korea",
"United Republic of Tanzania" = "Tanzania",
"Cabo Verde" = "Cape Verde",
"Brunei Darussalam" = "Brunei",
"Czechia" = "Czech Republic",
"North Macedonia" = "Macedonia",
"Türkiye" = "Turkey"
)
)
map_cap <- quantile(map_2025$resurgence_index, 0.95, na.rm = TRUE) |>
as.numeric()
if (!is.finite(map_cap) || map_cap < 1) {
map_cap <- 1
}
map_2025_plot <- world_map_base |>
left_join(map_2025, by = c("region" = "map_region")) |>
mutate(fill_value = pmin(resurgence_index, map_cap))
map_2025_plot |>
ggplot(aes(x = long, y = lat, group = group, fill = fill_value)) +
geom_polygon(color = "gray70", linewidth = 0.09) +
scale_fill_gradient2(
low = "#2b8cbe",
mid = "#f7f7f7",
high = "#d7301f",
midpoint = 1,
limits = c(0, map_cap),
na.value = "gray95",
labels = label_number(accuracy = 0.1)
) +
coord_quickmap(ylim = c(-55, 85), expand = FALSE) +
labs(
title = "World Distribution of Measles Resurgence (2025)",
subtitle = "Index = 2025 incidence / 2012-2018 country baseline; values capped at 95th percentile",
fill = "Resurgence index"
) +
theme_void() +
theme(
plot.title = element_text(face = "bold", size = 16, color = "#1b1f3b"),
plot.subtitle = element_text(size = 11, color = "#3f4a5a"),
legend.position = "right",
legend.title = element_text(face = "bold"),
plot.background = element_rect(fill = "#fcfcfd", color = NA)
)
Interpretation. The map shows that measles resurgence in 2025 is not evenly distributed across the world. Several countries with higher resurgence values appear in the same geographic areas, such as parts of North America, South America, Central Asia, and Southeast Asia. This pattern suggests that resurgence tends to occur in regional clusters rather than isolated countries.
Plot 2: Synchronization evidence across regions (smooth timeline chart)
q2_sync_trend <- year_clean |>
group_by(region, year) |>
summarise(
mean_incidence = mean(measles_incidence, na.rm = TRUE),
.groups = "drop"
)
q2_baseline <- q2_sync_trend |>
filter(year >= 2012, year <= 2018) |>
group_by(region) |>
summarise(
baseline_incidence = mean(mean_incidence, na.rm = TRUE),
.groups = "drop"
)
q2_sync_trend <- q2_sync_trend |>
left_join(q2_baseline, by = "region") |>
mutate(resurgence_index = mean_incidence / baseline_incidence)
q2_sync_trend |>
ggplot(aes(x = year, y = resurgence_index, color = region)) +
geom_smooth(
method = "loess",
se = FALSE,
span = 0.45,
linewidth = 1.3
) +
scale_x_continuous(
breaks = seq(min(q2_sync_trend$year), max(q2_sync_trend$year), 2),
minor_breaks = NULL
) +
geom_hline(yintercept = 1, linetype = "dashed", color = "gray50") +
scale_y_continuous(labels = label_number(accuracy = 0.1)) +
scale_color_manual(values = region_palette, labels = region_abbr_map) +
labs(
title = "Smoothed Regional Resurgence Index Over Time",
x = "Year",
y = "Resurgence index",
color = "Region (abbr)"
) +
theme_measles() +
theme(
legend.position = "bottom",
axis.text.x = element_text(size = 10)
)`geom_smooth()` using formula = 'y ~ x'

Interpretation. The smoothed timeline chart shows how the resurgence index changes over time for each WHO region. The dashed horizontal line at 1 represents the baseline level; values above this line indicate higher incidence than the historical baseline. Several regions show increases above the baseline during similar time periods, especially around 2018–2019 and again around 2023–2024, suggesting that some resurgence waves occur across multiple regions at roughly the same time. However, the peaks and timing are not identical for every region. Some regions increase earlier or later than others, and a few regions drop below the baseline during certain years. This suggests that measles resurgence is partially synchronized across regions but not perfectly aligned, meaning that global factors may influence outbreaks while regional conditions still shape the timing and intensity of resurgence.
Discussion
The two plots suggest that measles resurgence is both geographically concentrated and partially synchronized across regions. The world map shows that countries with higher resurgence indices tend to appear in clusters rather than being evenly distributed around the world. For example, higher resurgence values appear in parts of North America, Central Asia, and several countries in Africa and Southeast Asia.
The regional timeline plot provides additional evidence about how resurgence changes over time. Several regions show increases in the resurgence index during similar periods, particularly around 2018–2019 and again around 2023–2024. This suggests that measles resurgence sometimes occurs in global waves, where multiple regions experience higher incidence during the same years. However, the curves are not perfectly aligned, and some regions show increases earlier or later than others.
One possible explanation for these patterns is that measles spreads easily through international travel and cross-border movement, which can lead to outbreaks appearing in nearby countries. At the same time, differences in vaccination coverage, healthcare systems, and outbreak responses can cause the timing and intensity of resurgence to vary across regions. In addition, disruptions to routine immunization programs in recent years may have created immunity gaps in multiple countries, which could explain why several regions show increased resurgence during similar periods.
Conclusion
Question 1 – How have measles incidence rates changed over time across regions, and is the recent US resurgence part of a broader high-income trend?
- Measles incidence varies across regions and over time. Some regions (such as Africa and the Eastern Mediterranean) often show higher incidence, while the Americas generally remain lower.
- The United States shows a small increase in recent years, but several other high-income countries also show increases.
- US resurgence is not unique and may be part of a broader trend among some high-income countries.
Question 2 – Are resurgence patterns geographically clustered, and do regions show synchronized increases over time?
- countries with higher resurgence values often appear in nearby geographic areas, suggesting regional clustering of outbreaks.
- Several regions experience increases during similar time periods, although the peaks are not exactly the same.
- resurgence is partly synchronized across regions but not perfectly aligned.
Together, the results suggest that measles resurgence is not only a local issue but also a global public health challenge. Although incidence levels differ across regions, outbreaks often appear in regional clusters and sometimes increase in multiple regions during similar periods. In addition, the comparison among high-income countries shows that even countries with strong healthcare systems, including the United States, can still experience increases in measles incidence.
One possible reason is that measles spreads easily through international travel, which can allow outbreaks in one country to affect nearby regions. At the same time, gaps in vaccination coverage, vaccine hesitancy, or disruptions to routine immunization programs may create populations with lower immunity. When these factors occur together, they can lead to resurgence patterns that appear both regionally clustered and partly synchronized across the world. This highlights the importance of maintaining high vaccination coverage and coordinated public health efforts across countries.
Presentation
Our presentation can be found here.
Data
TidyTuesday. (2025). Measles cases across the world (compiled from WHO provisional measles and rubella surveillance reports). from https://github.com/rfordatascience/tidytuesday/blob/main/data/2025/2025-06-24/readme.md.
References
World Health Organization (WHO). Provisional measles and rubella surveillance reports.
