seir Module#
SEIR compartmental epidemic model with incubation period.
The SEIR model adds an **E**xposed (latent) compartment for diseases with an incubation period where individuals are infected but not yet infectious.
Equations#
\[\begin{split}\\frac{dS}{dt} &= -\\frac{\\beta S I}{N} \\\\
\\frac{dE}{dt} &= \\frac{\\beta S I}{N} - \\sigma E \\\\
\\frac{dI}{dt} &= \\sigma E - \\gamma I \\\\
\\frac{dR}{dt} &= \\gamma I\end{split}\]
where: - \(\\beta\) = transmission rate (day⁻¹) - \(\\sigma\) = progression rate E→I (day⁻¹) - \(\\gamma\) = recovery rate (day⁻¹) - \(1/\\sigma\) = mean incubation period - \(1/\\gamma\) = mean infectious period - \(R_0 = \\beta / \\gamma\)
Class#
- class episia.models.seir.SEIRModel(parameters)[source]#
Bases:
CompartmentalModelSEIR epidemic model with explicit incubation compartment.
- Parameters:
parameters (SEIRParameters) – SEIRParameters instance.
Example:
from episia.models import SEIRModel from episia.models.parameters import SEIRParameters params = SEIRParameters( N=1_000_000, I0=1, E0=10, beta=0.35, sigma=1/5.2, # COVID-19-like incubation gamma=1/14, t_span=(0, 365), ) result = SEIRModel(params).run() result.plot().show()
- __init__(parameters)[source]#
- Parameters:
parameters (SEIRParameters)
Examples#
COVID-19 modeling:
from episia.models import SEIRModel
from episia.models.parameters import SEIRParameters
params = SEIRParameters(
N=1_000_000,
I0=10,
E0=50, # Initial exposed
beta=0.35,
sigma=1/5.2, # 5.2 days incubation
gamma=1/14, # 14 days infectious
t_span=(0, 365)
)
model = SEIRModel(params)
result = model.run()
print(f"R₀: {params.r0:.2f}")
print(f"Peak infected: {result.peak_infected:,.0f}")
print(f"Peak exposed: {result.metadata['metrics']['peak_exposed']:,.0f}")
result.plot().show()
Comparing with SIR:
from episia.models import SIRModel, SEIRModel
from episia.models.parameters import SIRParameters, SEIRParameters
# SIR (no incubation)
sir_params = SIRParameters(N=1e6, I0=10, beta=0.3, gamma=0.1)
sir_result = SIRModel(sir_params).run()
# SEIR (5 days incubation)
seir_params = SEIRParameters(N=1e6, I0=10, E0=50, beta=0.3,
sigma=0.2, gamma=0.1)
seir_result = SEIRModel(seir_params).run()
print(f"SIR peak: {sir_result.peak_time:.0f} days")
print(f"SEIR peak: {seir_result.peak_time:.0f} days")