使用Python实现SIRS模型,模拟流行病传播过程
SIRS模型(易感-感染-恢复-易感模型)是一种经典的传染病模型,用于描述疾病在一个固定人群中传播、康复并失去免疫力后重新成为易感者的过程。与SIR模型不同,SIRS模型考虑了免疫衰减的因素,使得个体在恢复后可能会失去免疫力,重新回到易感状态。这种模型适用于那些感染后获得的免疫力不是永久的疾病,如某些流感病毒株。
SIRS模型基于以下几个基本假设:
SIRS模型通过一组常微分方程(ODE)来描述易感者、感染者和恢复者人数随时间的变化:
$$
\begin{cases}
\frac{dS}{dt} = -\beta\frac{SI}{N} + kR \\
\frac{dI}{dt} = \beta\frac{SI}{N} - \gamma I \\
\frac{dR}{dt} = \gamma I - kR
\end{cases}
$$
其中:
参数 | 含义 |
---|---|
N | 总人口数 |
β | 传播率,疾病传播的速率 |
γ | 康复率,感染者康复的速率 |
k | 免疫衰减速率,恢复者失去免疫力的速率 |
S | 易感者数量 |
I | 感染者数量 |
R | 恢复者数量 |
以下是SIRS模型的流程图,展示了易感者、感染者和恢复者之间的转化过程:
SIRS模型的核心在于描述易感者、感染者和恢复者数量随时间的变化,其数学表达式如下:
$$
\begin{cases}
\frac{dS}{dt} = -\beta \frac{S I}{N} + k R \\
\frac{dI}{dt} = \beta \frac{S I}{N} - \gamma I \\
\frac{dR}{dt} = \gamma I - k R
\end{cases}
$$
SIRS模型适用于以下类型的传染病流行条件:
在这些条件下,SIRS模型能够有效地描述疾病的传播动态,并为公共卫生决策提供参考。
本节将详细展示如何使用Python实现SIRS模型,包括条件设定、代码实现以及结果分析。
在进行模型模拟前,需要设定以下条件和参数:
具体参数设定如下:
以下Python代码实现了SIRS模型的模拟过程,并生成易感者、感染者和恢复者人数随时间变化的图表。
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp
# 设置中文字体
plt.rcParams['font.family'] = ['SimHei'] # 或者 'Microsoft YaHei'
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# SIRS模型微分方程
def sirs_ode(t, y, N, beta, gamma, k):
S, I, R = y # 易感者、感染者和恢复者数量
dS = -beta * S * I / N + k * R # 易感者的变化
dI = beta * S * I / N - gamma * I # 感染者的变化
dR = gamma * I - k * R # 恢复者的变化
return [dS, dI, dR]
# 参数设置
N = 21858000 # 总人口数
beta = 1.1 # 传播率
gamma = 0.25 # 康复率
k = 0.01 # 免疫衰减速率
I0 = 170 # 初始感染人数
R0 = 0 # 初始恢复人数
# 计算初始的易感者数量
S0 = N - I0 - R0
y0 = [S0, I0, R0]
# 时间点设置
t_start = 0 # 模拟开始天数
t_end = 160 # 模拟结束天数
num_points = 160 # 时间点数量
t_eval = np.linspace(t_start, t_end, num_points)
# 求解微分方程
solution = solve_ivp(
sirs_ode,
[t_start, t_end],
y0,
args=(N, beta, gamma, k),
t_eval=t_eval
)
# 检查求解是否成功
if solution.success:
S, I, R = solution.y
else:
raise RuntimeError("微分方程求解失败!")
# 绘制图形
plt.figure(figsize=(12, 6))
plt.plot(solution.t, S, label='易感者 S', color='blue')
plt.plot(solution.t, I, label='感染者 I', color='red')
plt.plot(solution.t, R, label='恢复者 R', color='green')
plt.title(f'SIRS 模型模拟结果 (β={beta}, γ={gamma}, k={k}, N={N}, I0={I0}, R0={R0})')
plt.xlabel('天数')
plt.ylabel('人数')
plt.legend()
plt.grid(True)
plt.show()
运行上述代码后,得到如下模拟结果:
图表解释:
从图中可以观察到:
这些结果表明,在SIRS模型下,疾病在群体中会反复出现,并维持在一个相对稳定的感染水平。免疫衰减是导致疾病能够持续存在的关键因素。
关键观察点
传播与康复的平衡:当传播率 β、康复率 γ 和免疫衰减速率 k 达到一定平衡时,感染者人数进入动态平衡。
免疫衰减的影响:免疫衰减速率 k 的存在使得恢复者能够重新成为易感者,导致疾病可能长期存在于群体中。
模型的敏感性:通过调整 β、γ 和 k 的值,可以显著改变感染者、易感者和恢复者的动态变化,反映出模型对这些参数的高度敏感性。
进一步分析
基本再生数 R₀:可以通过 R₀ = β/γ 计算得到。在本模型中,R₀ = 1.1/0.25 = 4.4,意味着每个感染者平均会传染4.4个易感者。这表明疾病具有较强的传播能力。
长期趋势:由于 R₀ > 1 且存在免疫衰减,疾病在长期内可能会在群体中持续存在,形成周期性的感染高峰和低谷。
免疫力的可持续性:较低的免疫衰减速率 k 会导致恢复者保持免疫力更长时间,可能减少疾病的反复出现频率。
通过这些结果,我们可以更好地理解疾病在群体中的传播机制,以及不同参数对疾病动态的影响,为公共卫生决策提供科学依据。
在实际应用中,传染病的传播过程可能会受到各种干预措施的影响。为了进一步提高模型的现实性,可以在SIRS模型的基础上进行扩展,加入干预措施或改变状态流向。以下是一些可能的扩展方向:
引入隔离状态(Q),将一部分感染者隔离,减少他们与易感者的接触机会,从而降低传播率。
$$
\begin{cases}
\frac{dS}{dt} = -\beta \frac{S I}{N} + k R \\
\frac{dI}{dt} = \beta \frac{S I}{N} - (\gamma + \delta) I \\
\frac{dQ}{dt} = \delta I
\end{cases}
$$
其中:
引入疫苗接种,将一部分易感者转化为恢复者(R),从而减少易感者数量。
$$
\begin{cases}
\frac{dS}{dt} = -\beta \frac{S I}{N} - \nu S + k R \\
\frac{dI}{dt} = \beta \frac{S I}{N} - \gamma I \\
\frac{dR}{dt} = \gamma I + \nu S - k R
\end{cases}
$$
其中:
引入潜伏者状态(E),即个体在感染后有一段时间处于潜伏期,尚未具有传染性。
$$
\begin{cases}
\frac{dS}{dt} = -\beta \frac{S I}{N} \\
\frac{dE}{dt} = \beta \frac{S I}{N} - \sigma E \\
\frac{dI}{dt} = \sigma E - \gamma I \\
\frac{dR}{dt} = \gamma I - k R
\end{cases}
$$
其中:
将感染者分为轻度感染和重度感染,分别对应不同的传播率和康复率。
$$
\begin{cases}
\frac{dS}{dt} = -\beta_L \frac{SI_L}{N} - \beta_H \frac{SI_H}{N} + kR \\
\frac{dI_L}{dt} = \beta_L \frac{SI_L}{N} - \gamma_L I_L \\
\frac{dI_H}{dt} = \beta_H \frac{SI_H}{N} - \gamma_H I_H \\
\frac{dR}{dt} = \gamma_L I_L + \gamma_H I_H - kR
\end{cases}
$$
其中:
除了疫苗接种和隔离措施外,还可以考虑以下扩展,以进一步提高模型的现实性和应用范围:
描述:考虑不同地区之间的人口迁移,模拟疾病在多个区域的传播。
实现方法:
应用示例:
描述:引入年龄分层,不同年龄组的传播率和康复率可能不同。
实现方法:
应用示例:
描述:不再假设同质混合,采用复杂的接触网络模型,更真实地反映人群互动结构。
实现方法:
应用示例:
描述:考虑季节变化对传播率的影响,如流感在冬季传播更为严重。
实现方法:
应用示例:
描述:在同一人群中模拟多种病原体的竞争与共存,研究不同疾病之间的相互影响。
实现方法:
应用示例:
描述:考虑疾病通过环境媒介(如水源、空气)传播,增加模型的复杂性和现实性。
实现方法:
应用示例:
描述:将经济和社会因素纳入模型,研究其对疾病传播和控制的影响。
实现方法:
应用示例:
通过这些扩展,传染病模型能够更全面地反映现实世界中的复杂因素,提供更精准的预测和有效的干预策略支持,为公共卫生决策者提供更有力的科学依据。