---
title: "Ebola Bundibugyo Virus Disease Outbreak, DRC 2026"
subtitle: "Epidemiological Analysis — Ituri, Nord-Kivu & Sud-Kivu Provinces"
author: "Kornelius Langga Son, MPH"
date: today
format:
html:
toc: true
toc-depth: 3
toc-float: true
theme: flatly
code-fold: true
code-tools: true
self-contained: true
fig-width: 10
fig-height: 6
execute:
warning: false
message: false
echo: true
---
```{=html}
<style>
.quarto-title-block {
background-color: #0072B2;
color: white;
padding: 2rem;
margin-bottom: 2rem;
}
.quarto-title h1.title {
color: white;
font-weight: 700;
}
.quarto-title .subtitle {
color: #D6EAF8;
}
.quarto-title-meta {
color: #AED6F1;
}
.quarto-title-meta-heading {
color: #D6EAF8 !important;
text-transform: uppercase;
font-size: 0.75rem;
}
h2 {
color: #0072B2;
border-left: 5px solid #E69F00;
padding-left: 10px;
margin-top: 2rem;
}
h3 {
color: #2C3E50;
border-left: 3px solid #56B4E9;
padding-left: 8px;
}
</style>
```
## Background
On 15 May 2026, the Ministry of Public Health, Hygiene and Social Welfare of the
Democratic Republic of the Congo (DRC) officially declared the **17th Ebola outbreak**
in DRC, caused by **Bundibugyo virus (BDBV)**. Unlike previous outbreaks caused by
Zaire ebolavirus, there is no licensed vaccine or specific therapeutic for BDBV,
making early public health measures — case detection, contact tracing, safe burials,
and supportive care — the only available interventions.
On 17 May 2026, WHO declared a **Public Health Emergency of International Concern (PHEIC)**.
The outbreak primarily affects Ituri Province, with spread to Nord-Kivu and Sud-Kivu,
and imported cases in Uganda.
This analysis uses data from **INRB-UMIE/BDBV2026-Data** — a public repository
maintained by the Institut National de Recherche Biomédicale (INRB) and partners,
containing digitised INSP SitRep MVE data updated daily.
---
## Setup
```{r}
#| label: setup
# Core packages
pacman::p_load(
readr,
dplyr,
tidyr,
lubridate,
ggplot2,
scales,
knitr,
kableExtra,
leaflet,
leaflet.extras,
sf,
epiparameter,
EpiNow2
)
# PLOS Okabe-Ito colorblind-safe palette (Wong 2011, Nature Methods)
plos <- list(
orange = "#E69F00",
blue = "#0072B2",
vermillion = "#D55E00",
green = "#009E73",
skyblue = "#56B4E9",
red = "#CC0000",
grey = "#999999"
)
```
---
## Data
### Source
All epidemiological data are sourced from the
[INRB-UMIE/BDBV2026-Data](https://github.com/INRB-UMIE/BDBV2026-Data) GitHub
repository, which transcribes values from INSP SitRep MVE PDF series. Data are
updated daily and represent the best available public record of the outbreak.
**Key limitations:**
- Suspected cases per zone available only up to 30 May 2026 (later sitreps omit zone-level breakdown)
- Spelling variants exist across sitreps (e.g. *Mongbwalu/Mongbalu*, *Nyankunde/Nyakunde*)
- SitRep 003 is missing from the repository
- A downward revision of cumulative confirmed cases occurred on 30 May 2026 (−25 cases)
### Load data
```{r}
#| label: load-data
base <- "https://raw.githubusercontent.com/INRB-UMIE/BDBV2026-Data/main/data/insp_sitrep/processed"
safe_read <- function(f) {
read_csv(paste0(base, "/", f), na = "ND", show_col_types = FALSE)
}
# National totals (nom = DRC)
nat_conf_cases <- safe_read("insp_sitrep__national_cumulative_confirmed_cases__daily.csv")
nat_conf_deaths <- safe_read("insp_sitrep__national_cumulative_confirmed_deaths__daily.csv")
nat_susp_cases <- safe_read("insp_sitrep__national_cumulative_suspected_cases__daily.csv")
nat_susp_deaths <- safe_read("insp_sitrep__national_cumulative_suspected_deaths__daily.csv")
# Zone-level
df_cum_conf <- safe_read("insp_sitrep__cumulative_confirmed_cases__daily.csv")
df_cum_cd <- safe_read("insp_sitrep__cumulative_confirmed_deaths__daily.csv")
df_cum_susp <- safe_read("insp_sitrep__cumulative_suspected_cases__daily.csv")
# Hospitalisation & PoE
hosp <- safe_read("insp_sitrep__hospitalised__daily.csv")
new_adm <- safe_read("insp_sitrep__new_hosp_admissions__daily.csv")
poe_screen <- safe_read("insp_sitrep__total_poe_screened__daily.csv")
poe_passed <- safe_read("insp_sitrep__total_poe_passed__daily.csv")
```
### Build national linelist
```{r}
#| label: national-data
df_national <- nat_conf_cases %>%
left_join(nat_conf_deaths %>% select(nom, date, national_cumulative_confirmed_deaths),
by = c("nom", "date")) %>%
left_join(nat_susp_cases %>% select(nom, date, national_cumulative_suspected_cases),
by = c("nom", "date")) %>%
left_join(nat_susp_deaths %>% select(nom, date, national_cumulative_suspected_deaths),
by = c("nom", "date")) %>%
mutate(
date = as.Date(date),
new_confirmed = national_cumulative_confirmed_cases -
lag(national_cumulative_confirmed_cases, default = 0),
revised = new_confirmed < 0,
cfr_confirmed = round(national_cumulative_confirmed_deaths /
national_cumulative_confirmed_cases * 100, 1),
cfr_suspected = round(national_cumulative_suspected_deaths /
national_cumulative_suspected_cases * 100, 1)
) %>%
arrange(date)
# Aggregate hospitalisation & PoE to national level
agg_nat <- function(df, col) {
df %>%
filter(!nom %in% c("DRC", "Sans Fiche")) %>%
mutate(date = as.Date(date)) %>%
group_by(date) %>%
summarise(!!col := sum(.data[[col]], na.rm = TRUE), .groups = "drop")
}
df_complete <- df_national %>%
left_join(agg_nat(hosp, "hospitalised"), by = "date") %>%
left_join(agg_nat(new_adm, "new_all_admissions"),by = "date") %>%
left_join(agg_nat(poe_screen,"total_poe_screened"),by = "date") %>%
left_join(agg_nat(poe_passed,"total_poe_passed"), by = "date")
```
### Province mapping
```{r}
#| label: province-map
# Based on Tableau II, SitRep MVE 27 May 2026 + WHO DON602-603
province_map <- data.frame(
nom = c(
"Aru","Aungba","Bambu","Bunia","Damas","Fataki","Gethy","Gety",
"Jiba","Kilo","Komanda","Lita","Logo","Mambasa","Mongbalu","Mongbwalu",
"Nizi","Nyakunde","Nyankunde","Oicha","Rimba","Rwampara",
"Beni","Butembo","Goma","Kalunguta","Karisimbi","Katwa","Kyondo",
"Mangala","Manguredjipa","Miti-Murhesa"
),
province = c(
rep("Ituri", 22), rep("North Kivu", 7), rep("South Kivu", 3)
),
stringsAsFactors = FALSE
)
# Latest snapshot per zone — harmonise spelling variants
latest_confirmed <- df_cum_conf %>%
filter(!nom %in% c("NA", "DRC", "Sans Fiche")) %>%
left_join(df_cum_cd %>% select(nom, date, cumulative_confirmed_deaths),
by = c("nom", "date")) %>%
left_join(province_map, by = "nom") %>%
mutate(
across(c(cumulative_confirmed_cases, cumulative_confirmed_deaths), as.numeric),
date = as.Date(date),
nom = recode(nom,
"Mongbwalu" = "Mongbalu",
"Nyankunde" = "Nyakunde",
"Gety" = "Gethy"
)
) %>%
group_by(province, nom) %>%
filter(date == max(date)) %>%
ungroup()
# Latest suspected (separate — available only to 30 May)
latest_suspected <- df_cum_susp %>%
filter(!nom %in% c("NA", "DRC", "Sans Fiche"),
!is.na(cumulative_suspected_cases)) %>%
mutate(cumulative_suspected_cases = as.numeric(cumulative_suspected_cases),
date = as.Date(date)) %>%
group_by(nom) %>%
filter(date == max(date)) %>%
ungroup() %>%
select(nom, cumulative_suspected_cases)
# Province-level summary
df_province <- latest_confirmed %>%
left_join(latest_suspected, by = "nom") %>%
group_by(province) %>%
summarise(
suspected_cases = sum(cumulative_suspected_cases, na.rm = TRUE),
confirmed_cases = sum(cumulative_confirmed_cases, na.rm = TRUE),
confirmed_deaths = sum(cumulative_confirmed_deaths, na.rm = TRUE),
cfr = round(confirmed_deaths / confirmed_cases * 100, 1),
.groups = "drop"
)
```
---
## Epidemic Curve
The epidemic curve below shows daily new confirmed cases (bars) with cumulative
confirmed cases overlaid as a line (secondary axis). Shaded areas and dashed lines
mark key WHO/DRC intervention dates.
> **Note:** The grey bar on 30 May reflects a downward revision of the cumulative
count by the DRC Ministry of Health (−25 cases), not a true negative incidence.
```{r}
#| label: fig-epicurve
#| fig-cap: "Epidemic curve — Ebola Bundibugyo Virus Disease, DRC 2026. Daily new confirmed cases (bars) with cumulative confirmed overlay (line). Source: INSP SitRep MVE / INRB-UMIE."
# Intervention dates (WHO DON602-603)
df_epi <- df_complete %>%
arrange(date) %>%
mutate(
new_confirmed = national_cumulative_confirmed_cases -
lag(national_cumulative_confirmed_cases, default = 0),
revised = new_confirmed < 0
)
# Intervention shadow areas ----
shadow <- data.frame(
xmin = as.Date(c("2026-05-15","2026-05-17","2026-05-22")),
xmax = as.Date(c("2026-05-17","2026-05-22", max(df_epi$date))),
label = c("Outbreak\nDeclared","PHEIC\nDeclared","Escalated\nResponse"),
fill = c("#FFF3D6","#D6EAF8","#D5F5E3")
)
# Intervention vertical lines ----
vlines <- data.frame(
date = as.Date(c("2026-05-15","2026-05-17","2026-05-19","2026-05-22")),
label = c("Outbreak declared\n(DRC MoH, 15 May)",
"PHEIC declared\n(WHO, 17 May)",
"IHR Emergency\nCommittee (19 May)",
"Risk: Very High\n(WHO, 22 May)"),
colour = c(plos$vermillion, plos$red, plos$orange, plos$green),
y_lab = c(78, 68, 58, 48)
)
# Scale factor for dual axis ----
scale_f <- max(df_epi$national_cumulative_confirmed_cases, na.rm = TRUE) /
max(df_epi$new_confirmed[df_epi$new_confirmed >= 0], na.rm = TRUE)
# Plot ----
ggplot(df_epi, aes(x = date)) +
geom_rect(
data = shadow,
inherit.aes = FALSE,
aes(xmin = xmin, xmax = xmax, ymin = -Inf, ymax = Inf),
fill = shadow$fill,
alpha = 0.5
) +
geom_col(
data = df_epi %>% filter(!revised),
aes(y = new_confirmed),
fill = plos$orange, colour = "white", width = 0.8
) +
geom_col(
data = df_epi %>% filter(revised),
aes(y = abs(new_confirmed)),
fill = plos$grey, colour = "white", width = 0.8, alpha = 0.7
) +
annotate(
"text",
x = as.Date("2026-05-30"), y = 30,
label = "Revised\u2193", size = 2.8, colour = plos$grey
) +
geom_line(
aes(y = national_cumulative_confirmed_cases / scale_f,
colour = "Cumulative confirmed"),
linewidth = 1.3
) +
geom_point(
aes(y = national_cumulative_confirmed_cases / scale_f),
shape = 21, size = 2.5,
fill = plos$blue, colour = "white", stroke = 1.2
) +
scale_colour_manual(
values = c("Cumulative confirmed" = plos$blue), name = NULL
) +
geom_vline(
data = vlines,
aes(xintercept = date),
colour = vlines$colour,
linetype = "dashed",
linewidth = 0.7
) +
geom_label(
data = vlines,
aes(x = date, y = y_lab, label = label),
hjust = -0.06, size = 2.5, label.size = 0.15,
fill = "white", alpha = 0.92,
colour = vlines$colour,
inherit.aes = FALSE
) +
scale_y_continuous(
name = "New confirmed cases",
labels = comma,
expand = expansion(mult = c(0, 0.12)),
sec.axis = sec_axis(
~ . * scale_f,
name = "Cumulative confirmed cases",
labels = comma
)
) +
scale_x_date(
date_breaks = "3 days",
labels = label_date_short(),
expand = c(0.01, 0)
) +
labs(
title = "Epidemic Curve — Ebola Bundibugyo Virus Disease, DRC 2026",
subtitle = "Daily new confirmed cases (bars) · Cumulative confirmed (line) | National level",
x = "Date of sitrep",
caption = paste0(
"Colour palette: Okabe-Ito (Wong 2011) — PLOS colorblind-safe standard.\n",
"Grey bar (30 May): downward revision by DRC MoH. ",
"Intervention dates: WHO DON602-603."
)
) +
theme_bw(base_size = 12) +
theme(
plot.title = element_text(face = "bold", size = 13),
plot.subtitle = element_text(size = 9, colour = "grey40"),
plot.caption = element_text(size = 8, colour = "grey50", hjust = 0),
axis.text.x = element_text(angle = 45, hjust = 1),
axis.title.y.left = element_text(colour = plos$orange, face = "bold"),
axis.title.y.right = element_text(colour = plos$blue, face = "bold"),
legend.position = "bottom",
panel.grid.minor = element_blank(),
panel.grid.major.x = element_blank()
)
```
---
## Cases by Province
The table below summarises confirmed cases, deaths, and CFR by province.
Suspected cases are aggregated from the latest available zone-level sitrep data
(available up to 30 May 2026). Ituri Province accounts for the majority of the
burden, consistent with the outbreak's origin in Mongbwalu Health Zone.
```{r}
#| label: tbl-province
#| tbl-cap: "Ebola Bundibugyo Virus Disease — Cases and Deaths by Province, DRC 2026 (Source: INSP SitRep MVE / INRB-UMIE)"
df_total <- df_province %>%
summarise(
province = "Grand Total",
suspected_cases = sum(suspected_cases),
confirmed_cases = sum(confirmed_cases),
confirmed_deaths = sum(confirmed_deaths),
cfr = round(sum(confirmed_deaths) / sum(confirmed_cases) * 100, 1)
)
total_row <- nrow(df_province) + 1
bind_rows(df_province, df_total) %>%
mutate(cfr = paste0(cfr, "%")) %>%
kable(
format = "html",
escape = FALSE,
col.names = c("Province", "Suspected Cases",
"Confirmed Cases", "Confirmed Deaths", "CFR (%)"),
align = c("l","r","r","r","r")
) %>%
kable_styling(
bootstrap_options = c("striped","hover","condensed","bordered"),
full_width = TRUE,
font_size = 13
) %>%
row_spec(0, bold = TRUE, background = "#F5F5F5") %>%
row_spec(total_row, bold = TRUE, background = "#D6EAF8") %>%
column_spec(1, bold = TRUE) %>%
column_spec(2, color = plos$blue) %>%
column_spec(3, color = plos$red) %>%
column_spec(4, color = plos$red) %>%
column_spec(5, color = plos$red)
```
---
## Interactive Map
The map below shows confirmed Ebola cases by health zone across the three affected
provinces (Ituri, Nord-Kivu, Sud-Kivu). Zones are shaded by case count using a
PLOS-compliant colour scale. Click any zone for details including confirmed cases,
deaths, and CFR.
```{r}
#| label: fig-map
#| fig-cap: "Confirmed Ebola cases by health zone, DRC 2026. Click zones for details. Source: INSP SitRep MVE / INRB-UMIE."
# Load shapefile
drc_zones <- st_read(
"https://raw.githubusercontent.com/INRB-UMIE/BDBV2026-Data/main/build/drc_health_zones.geojson",
quiet = TRUE
)
# Prepare map data
zone_data <- latest_confirmed %>%
group_by(nom) %>%
summarise(
confirmed_cases = sum(cumulative_confirmed_cases, na.rm = TRUE),
confirmed_deaths = sum(cumulative_confirmed_deaths, na.rm = TRUE),
.groups = "drop"
)
map_data <- drc_zones %>%
filter(province %in% c("Ituri","Nord-Kivu","Sud-Kivu")) %>%
left_join(zone_data, by = "nom") %>%
mutate(
confirmed_cases = replace_na(confirmed_cases, 0),
confirmed_deaths = replace_na(confirmed_deaths, 0),
cfr = ifelse(confirmed_cases > 0,
round(confirmed_deaths / confirmed_cases * 100, 1),
NA_real_)
)
# Colour palette
pal <- colorBin(
palette = c("#FFF3D6","#E69F00","#D55E00","#CC0000"),
domain = map_data$confirmed_cases,
bins = c(0, 1, 10, 50, 100, Inf),
na.color = "#F0F0F0"
)
# Popup
popup_html <- paste0(
"<b style='font-size:14px'>", map_data$nom, "</b><br>",
"<span style='color:#888;font-size:11px'>", map_data$province, "</span>",
"<hr style='margin:4px 0'>",
"<table style='font-size:12px;width:180px'>",
"<tr><td>Confirmed cases</td>",
"<td style='text-align:right;color:#E69F00'><b>",
map_data$confirmed_cases, "</b></td></tr>",
"<tr><td>Confirmed deaths</td>",
"<td style='text-align:right;color:#CC0000'><b>",
map_data$confirmed_deaths, "</b></td></tr>",
"<tr><td>CFR</td>",
"<td style='text-align:right;color:#CC0000'>",
ifelse(is.na(map_data$cfr), "\u2014", paste0(map_data$cfr, "%")),
"</td></tr></table>",
"<p style='font-size:10px;color:#aaa;margin:4px 0 0'>",
"Source: INSP SitRep MVE / INRB-UMIE</p>"
)
leaflet(map_data) %>%
addProviderTiles(providers$CartoDB.Positron,
options = tileOptions(opacity = 0.7)) %>%
addPolygons(
fillColor = ~pal(confirmed_cases),
fillOpacity = 0.8,
color = "black",
weight = 1.5,
smoothFactor = 0.5,
highlightOptions = highlightOptions(
weight = 3, color = "#333",
fillOpacity = 0.95, bringToFront = TRUE
),
popup = popup_html,
label = ~paste0(nom, ": ", confirmed_cases, " cases")
) %>%
addLegend(pal = pal, values = ~confirmed_cases,
position = "bottomright",
title = "Confirmed<br>Cases",
opacity = 0.8) %>%
addControl(
html = paste0(
"<div style='background:white;padding:8px 12px;border-radius:4px;",
"box-shadow:0 1px 5px rgba(0,0,0,0.2);font-size:12px'>",
"<b>Ebola Bundibugyo DRC 2026</b><br>",
"<span style='color:#666'>Confirmed cases by health zone</span><br>",
"<span style='color:#999;font-size:10px'>",
"Click zone for details</span></div>"
),
position = "topleft"
) %>%
addScaleBar(position = "bottomleft") %>%
addResetMapButton()
```
## Short-term Forecast of Ebola Transmission
### Epidemiological Parameters
The serial interval and incubation period are critical inputs for estimating
the effective reproduction number (Rt). As no specific parameters exist for
Bundibugyo virus (BDBV), we use Zaire ebolavirus parameters from
**Eichner et al.** as the closest available proxy, following standard practice
in outbreak analytics when pathogen-specific data are unavailable.
```{r}
#| label: epi-parameters
#| cache: true
# Retrieve incubation period parameters (Eichner et al., Zaire ebolavirus)
ebola_eichner <- epiparameter::epiparameter_db(
disease = "ebola",
epi_name = "incubation",
author = "Eichner"
)
ebola_eichner_parameters <- epiparameter::get_parameters(ebola_eichner)
# Incubation period — Log-Normal distribution
ebola_incubation_period <- EpiNow2::LogNormal(
meanlog = EpiNow2::Normal(mean = ebola_eichner_parameters["meanlog"], sd = 0.5),
sdlog = EpiNow2::Normal(mean = ebola_eichner_parameters["sdlog"], sd = 0.5),
max = 20
)
# Generation time — Gamma distribution (Van Kerkhove et al. 2015)
ebola_generation_time <- EpiNow2::Gamma(
mean = EpiNow2::Normal(mean = 15.3, sd = 0.5),
sd = EpiNow2::Normal(mean = 10.1, sd = 0.5),
max = 30
)
```
### Prepare Case Data
Daily confirmed cases are derived from the national cumulative confirmed case
series. Negative values — arising from a downward revision by the DRC Ministry
of Health on 30 May 2026 (−25 cases) — are set to zero, as negative incidence
is epidemiologically implausible and not accepted by `EpiNow2`.
```{r}
#| label: prepare-cases
ebola_cases <- df_complete %>%
tidyr::replace_na(base::list(new_confirmed = 0)) %>%
mutate(new_confirmed = pmax(as.integer(new_confirmed), 0L)) %>%
incidence2::incidence(
date_index = "date",
counts = "new_confirmed",
count_values_to = "confirm",
date_names_to = "date",
complete_dates = TRUE
) %>%
dplyr::select(-count_variable)
dplyr::as_tibble(ebola_cases)
```
### Observation Model
We apply an observation model to account for **under-reporting** — a well-documented
feature of Ebola surveillance, particularly in conflict-affected settings such as
Ituri Province. We assume that approximately **80% of true infections are reported**
(sd = 1%), consistent with estimates from comparable outbreaks.
```{r}
#| label: obs-model
# 80% reporting fraction, sd = 1%
ebola_obs_scale <- EpiNow2::Normal(mean = 0.8, sd = 0.01)
```
### Run EpiNow2
`EpiNow2` estimates the time-varying effective reproduction number (Rt) using a
Bayesian latent variable framework, accounting for delays between infection,
symptom onset, and case reporting. A **14-day forecast horizon** is specified to
generate a two-week projection.
```{r}
#| label: run-epinow2
#| cache: true
#| results: hide
ebola_estimates <- EpiNow2::epinow(
data = ebola_cases,
generation_time = EpiNow2::generation_time_opts(ebola_generation_time),
delays = EpiNow2::delay_opts(ebola_incubation_period),
obs = EpiNow2::obs_opts(scale = ebola_obs_scale),
forecast = EpiNow2::forecast_opts(horizon = 14)
)
```
### Results
```{r}
#| label: tbl-epinow2-summary
#| tbl-cap: "Summary of EpiNow2 estimates — Ebola Bundibugyo DRC 2026"
summary(ebola_estimates)
```
```{r}
#| label: fig-epinow2
#| fig-cap: "EpiNow2 estimates of Rt and case projections — Ebola Bundibugyo DRC 2026. Shaded bands represent 50% and 90% credible intervals. Dashed vertical line indicates forecast horizon."
plot(ebola_estimates)
```
### Interpretation
The EpiNow2 analysis reveals that the Ebola Bundibugyo outbreak in DRC is in an
**active growth phase**, with the following key findings:
**Effective reproduction number (Rt = 2.1, 95% CrI: 1.1–3.8)**
The estimated Rt substantially exceeds the epidemic threshold of 1.0, indicating
that each confirmed case is generating on average 2.1 secondary infections. The
lower bound of the credible interval (1.1) remaining above 1.0 provides strong
evidence of ongoing epidemic growth. This value exceeds estimates from previous
BDBV outbreaks (Uganda 2007: ~1.4; DRC 2012: ~1.7), likely reflecting delayed
detection, suboptimal contact tracing coverage (~44% in Ituri Province versus
WHO's 90% target), and restricted access in conflict-affected areas.
**New infections per day (103, 95% CrI: 29–381)**
After adjusting for the assumed 80% reporting fraction, approximately 103 new
infections are estimated daily. The wide credible interval reflects the
**limited observational data** (22 report dates) available at this stage of
the outbreak, and should be interpreted with caution.
**Rate of growth (0.066, 95% CrI: 0.004–0.13)**
The epidemic is growing at approximately **6.6% per day**, with the entire
credible interval remaining above zero — confirming sustained positive growth.
**Doubling time (11 days, 95% CrI: 5.4–180 days)**
Under current transmission dynamics, the cumulative case count is projected to
double approximately every 11 days. This trajectory underscores the urgency of
scaling up public health countermeasures.
> **Public health implication:** To bring Rt below 1.0 and halt epidemic growth,
> intervention intensity must reduce transmission by at least **52%**
> (i.e. 1 − 1/2.1 = 0.52). Priority actions include expanding contact tracing
> coverage to ≥90%, strengthening safe burial practices, and reinforcing
> infection prevention and control in healthcare facilities — noting that no
> licensed vaccine or specific therapeutic exists for Bundibugyo virus.
### Analytical Limitations
| Limitation | Implication |
|---|---|
| Only 22 observation dates | Wide credible intervals; estimates will stabilise as data accumulate |
| Confirmed cases only (not suspected) | True infection burden likely underestimated |
| Zaire ebolavirus parameters used for BDBV | Serial interval and incubation period may differ |
| Downward revision on 30 May (−25 cases) | Minor disruption to growth rate estimation |
| 80% reporting fraction assumed | Reporting completeness may be lower in conflict zones |
---
## References
- **Epiverse-TRACE tutorials** — Short-term forecast of cases and Rt:
<https://epiverse-trace.github.io/tutorials-middle/create-forecast.html>
- **WHO Disease Outbreak News** — Ebola disease caused by Bundibugyo virus,
Democratic Republic of the Congo & Uganda (DON602–DON605):
<https://www.who.int/emergencies/disease-outbreak-news>
- **WHO Ebola outbreak page, DRC 2026**:
<https://www.who.int/emergencies/situations/ebola-outbreak---drc-2026>
- **INRB-UMIE/BDBV2026-Data** — Data and scripts for epidemiological analysis
of the 2026 Bundibugyo Ebola outbreak:
<https://github.com/INRB-UMIE/BDBV2026-Data>
- **INSP SitRep MVE 2026** — Situation reports on the 17th Ebola epidemic:
<https://insp.cd/ebola-17eme-epidemie/>
- **Abbott S, Hellewell J, Thompson R, et al.** (2020). Estimating the time-varying
reproduction number of SARS-CoV-2 using national and subnational case counts.
*Wellcome Open Research*, 5, 112.
<https://doi.org/10.12688/wellcomeopenres.16006.2>
- **Eichner M, Dowell SF, Firese N** (2011). Incubation period of Ebola
hemorrhagic virus subtype Zaire. *Osong Public Health and Research
Perspectives*, 2(1), 3–7.
- **Wong B** (2011). Points of view: Color blindness.
*Nature Methods*, 8, 441. <https://doi.org/10.1038/nmeth.1618>
---
## Data Notes
| Item | Detail |
|---|---|
| Repository | [INRB-UMIE/BDBV2026-Data](https://github.com/INRB-UMIE/BDBV2026-Data) |
| Data source | INSP SitRep MVE (manually transcribed from PDF) |
| Confirmed cases available | 14 May – 4 June 2026 (20 report dates) |
| Suspected cases available | 15 May – 30 May 2026 (zone level) |
| Missing sitrep | SitRep 003 (gap between 002 and 004) |
| Colour palette | Okabe-Ito / Wong (2011) — PLOS colorblind-safe |
| Intervention dates | WHO DON602, DON603, IHR Emergency Committee 2026 |
| Shapefile | DRC health zones via INRB-UMIE build output |