Composable tools for infectious disease modelling in Julia.
Small, interchangeable parts combine into one joint model. Swap a part to test an assumption, keeping a single rigorous model rather than chaining separate ones.
Uncertainty propagated correctly from the priors through infection dynamics and observation.
Nowcasting, forecasting, and scenario modelling from one model definition, with reporting delays and ascertainment built in.
Built on the work of people who specialise in each piece, rather than as a walled garden. Inference comes from Turing.jl, dynamics from SciML, and automatic differentiation from Mooncake and Enzyme.
Aims to support more than one way of composing infectious disease models, kept interoperable. See the approaches we are exploring.
Named, composable parts give large language models a clear vocabulary to assemble and adapt models from, lowering the barrier to a first analysis.
using ComposedDistributions, Distributions
# BDBV-inspired delay tree: parallel pathways
# with Sequential, Resolve, and Compete nested together
tree = compose((
clinical = sequential(
:onset_admit => Gamma(1.2, 3.0),
:admit_resolve => resolve(
:death => (Gamma(2.0, 3.5), 0.3),
:discharge => (Gamma(1.0, 8.0), 0.7))),
surveillance = sequential(
:onset_notif => Gamma(0.7, 20.0),
:notif_compete => compete(
:confirmed => Gamma(2.0, 1.0),
:lost => Gamma(5.0, 0.5))),
))
# Inspect tree, params, and default priors
event_tree(tree)
params_table(tree)
priors = build_priors(params_table(tree))
# Draw a synthetic case, or evaluate a real one's likelihood
rand(tree)
logpdf(tree, ans)Evidence for infectious disease policy has to be timely, rigorous, and collaborative. Today’s approaches force a choice between them, and composability may let us avoid it.
The EpiAware ecosystem is built on a foundation of powerful, composable packages.
Assemble infectious disease models from interchangeable parts as a single Turing model.
Handle the censoring and truncation biases common in epidemiological delay data.
A grammar for composing distributions into event trees.
Rescale, weight, or modify distributions, keeping the full distribution interface.
Read the latest from the EpiAware team.
We build in Julia for its type system, multiple dispatch, and automatic differentiation, on top of the scientific infrastructure.
Differential equations, sensitivity analysis, and scientific machine learning.
Probabilistic programming and Bayesian inference.
The shared vocabulary of probability distributions our packages extend.
New to Julia? Start with the Using Julia guide.
From R to Julia, the story behind EpiAware.
In R we built the epinowcast ecosystem and packages such as EpiNow2 and scoringutils, now used by academics and public health teams internationally. EpiAware is the Julia equivalent, a domain-focused ecosystem in the mould of SciML or Turing.jl, with community infrastructure like rOpenSci and the domain focus of SpeedyWeather.jl.
We are at an early stage and looking for collaborators, and here is how to get involved.