使用Python实现SEIR-SEI模型,模拟流行病在“人群-传播媒介”的跨物种传播过程
该模型是基于SEIR-SEI的跨物种传播动力学模型。此案例将基于“人群-传播媒介”的传播路径,将模型分为两个主要部分:人群和传播媒介,模拟病毒在两部分之间的传播过程,并分别用下标p、m表示。
在构建基于SEIR-SEI的跨物种传播动力学模型时,我们做出以下假设:
(1) 人群与媒介的划分:
(2) 人群部分的假设:
(3) 媒介部分的假设:
(4) 传播动力学假设:
参数符号 | 含义 |
---|---|
β_mp | 媒介对人群的传播系数 |
β_pm | 人群对媒介的传播系数 |
ω_p | 人群感染的潜伏期相对速率 |
ω_m | 媒介感染的潜伏期相对速率 |
γ | 感染者的移除相对速率 |
a | 媒介的每日出生率 |
c | 媒介种群的季节性参数 |
n | 媒介的垂直传播比例 |
d | 媒介的每日死亡率 |
$$
\begin{cases}
\frac{dS_p}{dt} = -\beta_{mp} \cdot \frac{S_p \cdot I_m}{N_p} \\
\frac{dE_p}{dt} = \beta_{mp} \cdot \frac{S_p \cdot I_m}{N_p} - \omega_p \cdot E_p \\
\frac{dI_p}{dt} = \omega_p \cdot E_p - \gamma \cdot I_p \\
\frac{dR_p}{dt} = \gamma \cdot I_p \\
\frac{dS_m}{dt} = a \cdot c_t \cdot (N_m - I_m) - \beta_{pm} \cdot \frac{S_m \cdot I_p}{N_p} - d \cdot S_m \\
\frac{dE_m}{dt} = \beta_{pm} \cdot \frac{S_m \cdot I_p}{N_p} - \omega_m \cdot E_m - d \cdot E_m \\
\frac{dI_m}{dt} = \omega_m \cdot E_m - d \cdot I_m
\end{cases}
$$
这个基于SEIR-SEI的跨物种传播动力学模型适用于描述通过媒介传播的疾病,特别是那些在人群和媒介之间双向传播的传染病。以下是该模型适用的疾病条件:
(1) 媒介传播的疾病:
(2) 双向传播机制:
(3) 潜伏期和传染期:
(4) 媒介种群动态:
(5) 垂直传播:
适用于该模型的典型疾病包括登革热、疟疾等,这些疾病符合上述条件,并且通过媒介在人群中传播。
import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
# 参数
β_mp = 1.4 # 媒介对人群的传播系数
β_pm = 1.3 # 人群对媒介的传播系数
ω_p = 0.1 # 人群感染的潜伏期相对速率
ω_m = 0.1 # 媒介感染的潜伏期相对速率
γ = 0.1 # 感染者的移除相对速率
d = 0.07 # 媒介的每日死亡率
a = 0.07 # 媒介的每日出生率
c0 = 0.1 # 季节性参数
A = 0.5 # 季节性参数幅度
T = 365 # 周期
# 初始条件
S_p0, E_p0, I_p0, R_p0 = 999, 0, 1, 0 # 人群
S_m0, E_m0, I_m0 = 4999, 0, 1 # 媒介
# 定义季节性函数 c(t)
def seasonal_c(t, c0, A, T):
return c0 * (1 + A * np.sin(2 * np.pi * t / T))
# 定义微分方程组
def dengue_model_seasonal(y, t, β_mp, β_pm, ω_p, ω_m, γ, d, a, c0, A, T):
S_p, E_p, I_p, R_p, S_m, E_m, I_m = y
N_p = S_p + E_p + I_p + R_p # 总人群人口
N_m = S_m + E_m + I_m # 总媒介人口
c_t = seasonal_c(t, c0, A, T) # 季节性参数
# 人群方程
dS_p = -β_mp * S_p * I_m / N_p
dE_p = β_mp * S_p * I_m / N_p - ω_p * E_p
dI_p = ω_p * E_p - γ * I_p
dR_p = γ * I_p
# 媒介方程
dS_m = a * c_t * (N_m - I_m) - β_pm * S_m * I_p / N_p - d * S_m
dE_m = β_pm * S_m * I_p / N_p - ω_m * E_m - d * E_m
dI_m = ω_m * E_m - d * I_m
return [dS_p, dE_p, dI_p, dR_p, dS_m, dE_m, dI_m]
# 初始条件向量
y0 = [S_p0, E_p0, I_p0, R_p0, S_m0, E_m0, I_m0]
# 时间点(以天为单位)
t = np.linspace(0, 365, 365) # 模拟1年
# 求解微分方程
result = odeint(dengue_model_seasonal, y0, t, args=(β_mp, β_pm, ω_p, ω_m, γ, d, a, c0, A, T))
S_p, E_p, I_p, R_p, S_m, E_m, I_m = result.T
plt.figure(figsize=(12, 8))
plt.plot(t, S_p, label='Susceptible Humans (S_p)', color='blue')
plt.plot(t, E_p, label='Exposed Humans (E_p)', color='orange')
plt.plot(t, I_p, label='Infectious Humans (I_p)', color='red')
plt.plot(t, R_p, label='Recovered Humans (R_p)', color='green')
plt.xlabel('Time (days)')
plt.ylabel('Population')
plt.title('SEIR_SEI Model Simulation')
plt.legend()
plt.grid()
plt.show()
结果图展示了SEIR_SEI传播动力学模型在1年(365天)内的模拟结果,分为以下四个群体:
从整体趋势可以看出,该模型成功模拟了疾病传播的动态过程,包括易感人群的减少、暴露人群和感染人群的逐渐增加与下降,以及康复人群的最终稳定。这表明疾病传播高峰在早期迅速达到,随后逐渐恢复。
为了更全面地描述疾病传播过程并评估干预措施的效果,可以在现有SEIR-SEI模型的基础上进行扩展。以下是几种扩展方向:
干预措施是控制疾病传播的重要手段。可以在模型中引入以下干预措施:
疫苗接种:
在人群部分加入疫苗接种仓室 ( V_p ),假设疫苗接种可以使人从易感者 ( S_p ) 直接转移到免疫状态 ( V_p )。
修改人群部分的方程: $$ \frac{dS_p}{dt} = -\beta_{mp} \frac{S_p I_m}{N_m} - v S_p $$ $$ \frac{dV_p}{dt} = v S_p $$
其中,( v ) 是疫苗接种率。
媒介控制:
引入媒介控制措施(如杀虫剂使用、环境管理等),降低媒介的出生率或增加媒介的死亡率。
修改媒介部分的方程: $$ \frac{dS_m}{dt} = a c_t (N_m - I_m) - \beta_{pm} \frac{S_m I_p}{N_h} - (d + u) S_m $$ 其中,( u ) 是媒介控制措施导致的额外死亡率。
隔离和治疗:
在人群部分加入隔离仓室 ( Q_p ),假设感染者 ( I_p ) 可以通过隔离措施转移到 ( Q_p )。
修改人群部分的方程: $$ \frac{dI_p}{dt} = \omega_p E_p - \gamma I_p - q I_p $$ $$ \frac{dQ_p}{dt} = q I_p - \gamma Q_p $$ 其中,( q )是隔离率。
可以通过改变仓室之间的流向来模拟不同的疾病传播机制:
再感染:
假设康复者 ( R_p ) 可能会再次感染病毒,重新成为易感者 ( S_p )。
修改人群部分的方程: $$ \frac{dR_p}{dt} = \gamma I_p - \sigma R_p $$ $$ \frac{dS_p}{dt} = -\beta_{mp} \frac{S_p I_m}{N_m} + \sigma R_p $$ 其中,( σ ) 是再感染率。
空间分层:
网络模型: