SIRS模型

使用Python实现SIRS模型,模拟流行病传播过程


日期

SIRS模型

1 概述

SIRS模型(易感-感染-恢复-易感模型)是一种经典的传染病模型,用于描述疾病在一个固定人群中传播、康复并失去免疫力后重新成为易感者的过程。与SIR模型不同,SIRS模型考虑了免疫衰减的因素,使得个体在恢复后可能会失去免疫力,重新回到易感状态。这种模型适用于那些感染后获得的免疫力不是永久的疾病,如某些流感病毒株。

1.1 模型假设

SIRS模型基于以下几个基本假设:

  1. 固定人群规模:总人口数 ( N ) 保持不变,不考虑出生、死亡和迁移。
  2. 同质混合:人群中每个人都有相同的概率与其他任何个体接触。
  3. 瞬时接触:传染过程发生在接触时,不考虑接触的持续时间。
  4. 易感、感染与恢复状态:个体只能处于易感(S)、感染(I)或恢复(R)三种状态。
  5. 有限免疫力:恢复者在一段时间后可能会失去免疫力,重新回到易感状态。
  6. 恒定参数:传播率β、康复率γ和免疫衰减速率k在整个过程中保持不变。

1.2 模型描述

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

其中:

1.3 模型仓室及参数含义

参数 含义
N 总人口数
β 传播率,疾病传播的速率
γ 康复率,感染者康复的速率
k 免疫衰减速率,恢复者失去免疫力的速率
S 易感者数量
I 感染者数量
R 恢复者数量

2 模型流程图及方程

2.1 模型流程图

以下是SIRS模型的流程图,展示了易感者、感染者和恢复者之间的转化过程:

SIRS模型流程图

2.2 模型方程

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

3 适用疾病流行条件

SIRS模型适用于以下类型的传染病流行条件:

  1. 有限免疫力:疾病感染后,个体获得的免疫力不是永久的,康复后可能会失去免疫力,重新成为易感者。例如,某些流感病毒株、麻疹等。
  2. 固定人群规模:总人口数在模型的时间范围内保持相对稳定,不考虑出生、死亡和人口迁移的影响。
  3. 同质混合:假设人群中的个体随机接触,没有特定的群体结构或网络限制。
  4. 适度康复时间:疾病的康复时间适中,个体能够在康复后保持一段时间的免疫力。
  5. 简单传播途径:疾病的传播方式较为直接,如通过呼吸道、直接接触等。

在这些条件下,SIRS模型能够有效地描述疾病的传播动态,并为公共卫生决策提供参考。

4 代码(Python)

本节将详细展示如何使用Python实现SIRS模型,包括条件设定、代码实现以及结果分析。

4.1 条件设定

在进行模型模拟前,需要设定以下条件和参数:

具体参数设定如下:

4.2 代码

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

4.2 结果

运行上述代码后,得到如下模拟结果:

SIRS模型模拟结果

图表解释

从图中可以观察到

这些结果表明,在SIRS模型下,疾病在群体中会反复出现,并维持在一个相对稳定的感染水平。免疫衰减是导致疾病能够持续存在的关键因素。

关键观察点

  1. 传播与康复的平衡:当传播率 β、康复率 γ 和免疫衰减速率 k 达到一定平衡时,感染者人数进入动态平衡。

  2. 免疫衰减的影响:免疫衰减速率 k 的存在使得恢复者能够重新成为易感者,导致疾病可能长期存在于群体中。

  3. 模型的敏感性:通过调整 βγk 的值,可以显著改变感染者、易感者和恢复者的动态变化,反映出模型对这些参数的高度敏感性。

进一步分析

通过这些结果,我们可以更好地理解疾病在群体中的传播机制,以及不同参数对疾病动态的影响,为公共卫生决策提供科学依据。

5 扩展(保证仓室不变)

在实际应用中,传染病的传播过程可能会受到各种干预措施的影响。为了进一步提高模型的现实性,可以在SIRS模型的基础上进行扩展,加入干预措施或改变状态流向。以下是一些可能的扩展方向:

5.1 加入干预措施

5.1.1 隔离措施

引入隔离状态(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} $$

其中:

5.1.2 疫苗接种

引入疫苗接种,将一部分易感者转化为恢复者(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} $$

其中:

5.2 改变状态流向

5.2.1 考虑潜伏期

引入潜伏者状态(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} $$

其中:

5.2.2 多阶段感染

将感染者分为轻度感染和重度感染,分别对应不同的传播率和康复率。

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

其中:

5.3 其他扩展方向

除了疫苗接种和隔离措施外,还可以考虑以下扩展,以进一步提高模型的现实性和应用范围:

5.3.1 人口流动

描述:考虑不同地区之间的人口迁移,模拟疾病在多个区域的传播。

实现方法

应用示例

5.3.2 年龄结构

描述:引入年龄分层,不同年龄组的传播率和康复率可能不同。

实现方法

应用示例

5.3.3 接触网络

描述:不再假设同质混合,采用复杂的接触网络模型,更真实地反映人群互动结构。

实现方法

应用示例

5.3.4 季节性因素

描述:考虑季节变化对传播率的影响,如流感在冬季传播更为严重。

实现方法

应用示例

5.3.5 多病原体竞争

描述:在同一人群中模拟多种病原体的竞争与共存,研究不同疾病之间的相互影响。

实现方法

应用示例

5.3.6 环境传播

描述:考虑疾病通过环境媒介(如水源、空气)传播,增加模型的复杂性和现实性。

实现方法

应用示例

5.3.7 经济与社会因素

描述:将经济和社会因素纳入模型,研究其对疾病传播和控制的影响。

实现方法

应用示例

通过这些扩展,传染病模型能够更全面地反映现实世界中的复杂因素,提供更精准的预测和有效的干预策略支持,为公共卫生决策者提供更有力的科学依据。

赵虹锋
壮汉二米五