Overview
Epidemiological disease modeling with compartmental models (SIR, SEIR), R0 estimation, outbreak simulation, incidence/prevalence forecasting, and intervention impact analysis. Covers the core ODE-based approach used in public health and infectious disease research.
Installation
uv pip install scipy numpy matplotlib
SIR Model
import numpy as np
from scipy.integrate import solve_ivp
def sir(t, y, beta, gamma):
S, I, R = y
dS = -beta * S * I
dI = beta * S * I - gamma * I
dR = gamma * I
return [dS, dI, dR]
beta, gamma = 0.3, 0.1
R0 = beta / gamma
print(f"R0 = {R0:.2f}")
sol = solve_ivp(sir, [0, 160], [0.99, 0.01, 0], args=(beta, gamma), dense_output=True)
SEIR Model
def seir(t, y, beta, sigma, gamma):
S, E, I, R = y
dS = -beta * S * I
dE = beta * S * I - sigma * E
dI = sigma * E - gamma * I
dR = gamma * I
return [dS, dE, dI, dR]
sol = solve_ivp(seir, [0, 200], [0.99, 0.005, 0.005, 0], args=(0.3, 0.2, 0.1))
Key Parameters
- R0 (basic reproduction number): average secondary cases from one infected in a naive population
- Beta: transmission rate (contacts * probability of infection per contact)
- Gamma: recovery rate (1 / infectious period)
- Sigma: incubation rate (1 / incubation period)
Workflow
- Estimate parameters from literature or case data
- Define compartment equations (SIR, SEIR, extended with age/risk strata)
- Solve ODE with
solve_ivp
- Plot S, I, R curves vs time
- Run sensitivity: change beta/gamma and observe peak timing, total cases
- Add interventions by reducing beta over time (lockdown, masking, vaccination)
- Compare scenarios: no intervention vs vaccination vs NPIs
References
1---2name: epidemiology3description: Disease modeling and epidemiological analysis: SIR/SEIR compartmental models, R0 estimation, outbreak simulation, incidence/prevalence forecasting, and intervention impact modeling.4---5## Overview67Epidemiological disease modeling with compartmental models (SIR, SEIR), R0 estimation, outbreak simulation, incidence/prevalence forecasting, and intervention impact analysis. Covers the core ODE-based approach used in public health and infectious disease research.89## Installation1011```bash12uv pip install scipy numpy matplotlib13```1415## SIR Model1617```python18import numpy as np19from scipy.integrate import solve_ivp2021def sir(t, y, beta, gamma):22 S, I, R = y23 dS = -beta * S * I24 dI = beta * S * I - gamma * I25 dR = gamma * I26 return [dS, dI, dR]2728beta, gamma = 0.3, 0.129R0 = beta / gamma30print(f"R0 = {R0:.2f}")3132sol = solve_ivp(sir, [0, 160], [0.99, 0.01, 0], args=(beta, gamma), dense_output=True)33```3435## SEIR Model3637```python38def seir(t, y, beta, sigma, gamma):39 S, E, I, R = y40 dS = -beta * S * I41 dE = beta * S * I - sigma * E42 dI = sigma * E - gamma * I43 dR = gamma * I44 return [dS, dE, dI, dR]4546sol = solve_ivp(seir, [0, 200], [0.99, 0.005, 0.005, 0], args=(0.3, 0.2, 0.1))47```4849## Key Parameters5051- **R0 (basic reproduction number)**: average secondary cases from one infected in a naive population52- **Beta**: transmission rate (contacts * probability of infection per contact)53- **Gamma**: recovery rate (1 / infectious period)54- **Sigma**: incubation rate (1 / incubation period)5556## Workflow57581. Estimate parameters from literature or case data592. Define compartment equations (SIR, SEIR, extended with age/risk strata)603. Solve ODE with `solve_ivp`614. Plot S, I, R curves vs time625. Run sensitivity: change beta/gamma and observe peak timing, total cases636. Add interventions by reducing beta over time (lockdown, masking, vaccination)647. Compare scenarios: no intervention vs vaccination vs NPIs6566## References67- [SciPy ODE docs](https://docs.scipy.org/doc/scipy/reference/integrate.html)68- [Compartmental models in epidemiology](https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology)