A composable ecosystem for infectious disease modelling
Why we are building EpiAware, and where it is today.
Composable tools for infectious disease modelling in Julia.
Compose distributions
Assemble and fit a model
using ComposableTuringIDModels, Distributions
# AR(1) log-Rt → renewal infections → negative-binomial reports
latent = AR(; ϵ_t = HierarchicalNormal(std_prior = HalfNormal(0.1)))
data = IDData(gen_distribution = Gamma(1.4, 1 / 0.38))
model = IDModel(
Renewal(data; rt = latent,
initialisation_prior = Normal(log(1.0), 1.0)),
NegativeBinomialError())
# Fit it to case data with Turing
chain = sample(as_turing_model(model, cases, length(cases)),
NUTS(), MCMCThreads(), 1_000, 2)Assemble infectious disease models from interchangeable parts as a single Turing model. Docs ↗
Handle the censoring and truncation biases common in epidemiological delay data. Docs ↗
A grammar for composing distributions into event trees. Docs ↗
Rescale, weight, or modify distributions, keeping the full interface. Docs ↗
We build in Julia for its type system, multiple dispatch, and automatic differentiation, and on the scientific infrastructure already there:
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.
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 — here is how to get involved.