Getting startedΒΆ

At the core of eugene lies a simple outbreak model, which starts with number of index cases \(n\). The user must also specify \(\mathcal{R}_0\), \(k\), the generation time between incidences \(D\), the shape of the Gamma distribution parameterized by parameter gamma_shape, maximum number of days to simulate days_elapsed_max and the maximum number of cases beyond which to stop simulating max_cases. We can specify those parameters in code like so:

import numpy as np
import matplotlib.pyplot as plt


parameters = dict(
    R0 = 2,  # reproduction number
    k = 1,   # overdispersion factor
    n = 1,   # number of index cases
    D = 10,  # generation time interval
    gamma_shape = 2,  # gamma function shape parameter
    max_time = 90,    # maximum simulation time
    days_elapsed_max = 52,  # number of days from index case to measurement
    max_cases = 1e4   # maximum number of cases to simulate

Now we can simulate 100 outbreaks with these initial parameters:

from eugene import simulate_outbreak

fig, ax = plt.subplots(figsize=(4, 3))

for i in range(100):
    times, cumulative_incidence = simulate_outbreak(**parameters)
    ax.semilogy(times, cumulative_incidence, '.-', color='k', alpha=0.2)

ax.set_xlabel('Time [days]')
ax.set_ylabel('Cumulative Incidence')

(Source code, png, hires.png, pdf)


Every epidemic curve starts at incidence of unity, and the cumulative incidence grows roughly exponentially, sometimes terminating with zero new cases before it reaches the end of the simulation domain (set by the days_elapsed_max parameter).