Ebola DRC 2026 · WASH Cluster Dashboard

Importation-risk model — the R dashboard explained

How the dashboard decides which health zones are most likely to receive the virus next from the zones that already have it. Risk travels one step — from each outbreak zone to its direct destinations — and every value is a prioritisation ranking to guide surveillance, not a prediction or a probability of infection.

What this page covers

This is the model shown on the R WASH-Cluster dashboard (output/drc_ebola_dashboard.html) and only that model. It is single-hop: risk flows exactly one step from each outbreak zone to the zones people travel to directly. Read it once and every colour, tier, and popup number on the map should make sense.

1How it works — five plain steps

The model estimates incoming risk for every zone, one outbreak zone at a time, then ranks the receivers.

  1. Seeds — where the risk starts. The starting points are the zones currently reporting confirmed cases (the MoH Cat A foyers). Zones with more recent cases carry more weight — and each case's weight fades smoothly over the following days (the ~5-day infectious period), so influence tapers off gradually instead of counting flat and then dropping off a cliff at the window edge. An active, growing outbreak pushes more risk outward than a quiet one.
  2. Mobility — how people actually move. From each outbreak zone we follow real population-movement data (Flowminder/Vodacom) to see where people travel. Risk flows along the routes people actually use, not just to neighbours on a map.
  3. Gravity — a fallback when we have no movement data. A handful of outbreak zones aren't covered by the mobility data. For those we fall back to a sensible estimate: people tend to move toward larger population centres and toward places that are easier to reach (shorter travel time). This keeps every outbreak zone contributing instead of leaving a blind spot.
  4. Single-hop — one step at a time. We look one step out from each outbreak zone — direct destinations only. We do not chain risk several jumps ahead, because each extra hop adds more uncertainty than signal (confirmed by walk-forward backtesting).
  5. Tiers — turning it into a watchlist. Every receiving zone is ranked by how much incoming risk it accumulates, then grouped into a colour-coded watchlist (see §3).

2The mechanics, precisely

For the technically minded. Implemented in scripts/01_prepare_dashboard.R · R/seed_weights.R · R/gravity.R.

Seed weight for each Cat A origin i — the confirmed cases it accrued inside the lookback window (7, 14 or 21 days), recency-weighted so recent days count more, then square-root damped so a single dominant hotspot doesn't swamp everything:

wi = √( Σd ∈ window new_casesi(d) · e−age(d)/5 )

age(d) = days before the latest SitRep; the 5-day decay length is the Ebola infectious period. A case today counts fully, one 5 days ago ~0.37, one 14 days ago ~0.06. (Setting the decay to infinity recovers the older flat "every day counts equally" window exactly.)

Why the graded recency decay (adopted July 2026)

Earlier the window counted every day inside it equally, then dropped a case's weight to zero the moment it crossed the window edge — a hard cliff that could read as a real de-escalation when a single old case simply "aged out" of the window. Weighting each day by e−age/5 lets a case fade smoothly over the infectious period instead, removing that artefact. A walk-forward backtest confirmed it never lowers the watchlist hit-rate (14-day top-20: 82.9% → 85.4%) and flags some zones slightly earlier. It changes only how loudly each outbreak zone contributes, not where its risk flows.

Each origin becomes a destination distribution (its row sums to 1), so Flowminder rows and gravity rows live on the same scale and combine cleanly:

covered origin   Pi = normalise( Flowminder outflow rowi )
dangling origin  Pi = normalise( gravity rowi ),   gravij ∝ popj / ttij2

Currently four Cat A origins fall back to gravity because they have no Flowminder outflow row: Kilo, Mangala, Miti-Murhesa, Vuhovi.

Importation score for a receiving zone j — sum the weighted one-step contributions from every outbreak origin:

importationj = Σi wi · Pi[j]
Why single-hop is a deliberate choice, not a shortcut

The score is exactly one matrix step from seeds — there is no iteration, damping factor, or teleport vector. Walk-forward backtesting found that chaining risk through additional hops added essentially zero ranking value for importation here (most newly affected zones turn out to be one hop from a seed), while single-hop is simpler to explain and audit. The gravity destination mass uses INS 2026 population estimates for the 104 mappable eastern-province zones, WorldPop elsewhere.

Caveat — the July 2026 shapefile migration

Upstream redrew the health-zone polygons in July 2026. The gravity terms (popj and the travel-time distances) are not directly comparable before and after the migration for zones whose footprint changed a lot — notably the Cat A zones Miti Murhesa and Makiso Kisangani. This affects the four gravity-fallback origins only; Flowminder-covered origins are unchanged.

3Reading the watchlist tiers

Receivers are ranked by incoming Cat A flow, then banded. Bands are rank-based, not equal-volume cuts — so the map colour matches the rank in the popup.

TierRuleOperational read
ÉlevéRank 1–20The active watchlist — prioritise for pre-positioning & surveillance.
MoyenRank 21–50Moderate incoming flow — monitor.
FaibleRank 51 → the 97.5% coverage cutoffLow but notable — on the radar.
Non significatifThe remaining low-inflow tailNegligible flow (greyed). Stops gravity's tiny everywhere-flows from flooding "Faible".
Cat A zones, the rank, and the window switch

4How we know it works — validation

The dashboard carries its own longitudinal check, independent of any other model. Implemented in R/importation_history.R.

Every time the case totals change, the dashboard snapshots the whole watchlist to output/importation_history.csv. That lets us ask, in hindsight, a simple question: when a zone eventually became a foyer, had the watchlist flagged it first?

MetricLatest readingWhat it means
14-day top-20 hit-rate31 / 38 (82%)Of the zones that became foyers and could have been flagged beforehand, 82% were already on the Élevé watchlist first.
Lead time1–50 daysHow far ahead of confirmation the zone first entered the top-20 — days to pre-position.
An honest denominator

Some zones were already foyers the first time the panel ever saw them (e.g. Goma, Rwampara, Kilo, Miti Murhesa) — there was no earlier window in which the watchlist could have flagged them, so they are excluded from the ratio (they stay listed, greyed, with a "—" lead time). Counting them as misses would understate the model: the honest figure is 31/38 (82%), not 31/42 (74%).

5Where the ideas come from

The model adapts established methods from the human-mobility and epidemic-modelling literature. The load-bearing reference is Bengtsson et al. (2015).

SourceIdea taken into the R model
Bengtsson et al. (2015)
Sci. Reports 5:8923 — Haiti cholera
The core score. Their infectious pressure — risk ∝ cases in a source area × mobility to a destination — is exactly importationj = Σ wi·Pi[j]. Also their headline finding (observed mobility beats gravity and needs no retrospective tuning) is why we use Flowminder first and gravity only as a fallback.
Truscott & Ferguson (2012)
PLoS Comput. Biol.
The gravity fallback (popj/ttij2) for zones with no movement data — and its known caveat that plain gravity under-weights rare long-range travel between big centres.
Matson et al. (2020)
Emerg. Microbes & Infect.
Why recent cases drive the seed weights: detection delay (median ~44 days for Ebola) means a stale seed set would over-state spread. Motivates the windowed weighting — and the graded within-window recency decay, a case's influence tapering over the infectious period.
Bengtsson et al. (2011)
PLOS Medicine — Haiti
Treating operator mobility data as a trustworthy primary signal, plus the ownership-bias caveat (under-represents the poorest, who tend to move with phone-owning family).
González, Hidalgo & Barabási (2008)
Nature 453:779
Foundational evidence that human movement is regular and predictable — the justification for building a risk model on mobility matrices at all.
Possible future refinement (from Truscott & Ferguson)

The gravity fallback currently uses a single Newtonian kernel (popj/tt2). A matched kernel (different power-law for short vs. long range) would stop it under-estimating rare long-distance Cat A → distant-city importation. Not yet implemented.

One-sentence brief for partners: the dashboard colours each zone by how much movement reaches it, in one step, from zones that currently have cases — weighted by how recent and how large those outbreaks are — and turns that into a ranked watchlist. Every value is a prioritisation ranking to guide surveillance, not a prediction or a probability.