SEIR-SEI模型

使用Python实现SEIR-SEI模型,模拟流行病在“人群-传播媒介”的跨物种传播过程


日期

1 概述

该模型是基于SEIR-SEI的跨物种传播动力学模型。此案例将基于“人群-传播媒介”的传播路径,将模型分为两个主要部分:人群和传播媒介,模拟病毒在两部分之间的传播过程,并分别用下标p、m表示。

1.1 模型假设

在构建基于SEIR-SEI的跨物种传播动力学模型时,我们做出以下假设:

(1) 人群与媒介的划分

(2) 人群部分的假设

(3) 媒介部分的假设

(4) 传播动力学假设

1.2 模型描述

1.3 模型参数含义

参数符号 含义
β_mp 媒介对人群的传播系数
β_pm 人群对媒介的传播系数
ω_p 人群感染的潜伏期相对速率
ω_m 媒介感染的潜伏期相对速率
γ 感染者的移除相对速率
a 媒介的每日出生率
c 媒介种群的季节性参数
n 媒介的垂直传播比例
d 媒介的每日死亡率

2 模型流程图及方程

$$ \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} $$

3 适用疾病流行条件

这个基于SEIR-SEI的跨物种传播动力学模型适用于描述通过媒介传播的疾病,特别是那些在人群和媒介之间双向传播的传染病。以下是该模型适用的疾病条件:

(1) 媒介传播的疾病

(2) 双向传播机制

(3) 潜伏期和传染期

(4) 媒介种群动态

(5) 垂直传播

适用于该模型的典型疾病包括登革热、疟疾等,这些疾病符合上述条件,并且通过媒介在人群中传播。

4 代码(Python)

4.1 条件设定

4.2 代码

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

4.3 结果

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()

4.4 结果分析

结果图展示了SEIR_SEI传播动力学模型在1年(365天)内的模拟结果,分为以下四个群体:

从整体趋势可以看出,该模型成功模拟了疾病传播的动态过程,包括易感人群的减少、暴露人群和感染人群的逐渐增加与下降,以及康复人群的最终稳定。这表明疾病传播高峰在早期迅速达到,随后逐渐恢复。

5 扩展

为了更全面地描述疾病传播过程并评估干预措施的效果,可以在现有SEIR-SEI模型的基础上进行扩展。以下是几种扩展方向:

5.1 加入干预措施

干预措施是控制疾病传播的重要手段。可以在模型中引入以下干预措施:

5.2 改变仓室流向

可以通过改变仓室之间的流向来模拟不同的疾病传播机制:

5.3 考虑空间异质性

王冰冰
正在飞的泡泡