2020 年初,一种新型冠状病毒席卷全球,数学模型成为了理解疫情、制定政策的关键工具。当流行病学家预测"如果不采取措施,感染人数将呈指数增长"时,他们依靠的正是微分方程。本章我们将从最简单的 SIR 模型出发,逐步构建理解传染病传播的数学框架,并用真实数据验证这些模型的预测能力。
传染病建模的历史与动机
为什么用数学建模传染病?
在疫情爆发时,决策者面临一系列紧迫的问题: - 疫情会持续多久? - 最终会有多少人感染? - 隔离措施能降低多少感染人数? - 什么时候达到感染高峰? - 需要多高的疫苗接种率才能实现群体免疫?
这些问题的答案直接影响医疗资源分配、经济政策和社会管控措施。数学模型提供了一种系统性的方法来回答这些问题。
历史里程碑
1760 年:丹尼尔·伯努利首次用数学分析天花疫苗的效果,估计接种可以延长平均寿命约 3 年。
1906 年:威廉·哈默提出传染率与易感者和感染者的乘积成正比的假设,这成为后来所有传染病模型的基础。
1927 年:科马克和麦肯德里克发表了经典的 SIR 模型论文,奠定了现代传染病动力学的基础。
2020 年: COVID-19 疫情中,数学模型在全球政策制定中发挥了前所未有的作用。
SIR 模型:流行病学的基石
基本假设
SIR 模型将人群分为三类: - S (Susceptible):易感者,尚未感染但可能被感染 - I (Infectious):感染者,已感染且具有传染性 - R (Recovered/Removed):移除者,已康复(获得免疫)或死亡
核心假设: 1. 人口总数
模型方程
设
参数含义: -
方程解读: - 第一个方程:易感者以速率
基本再生数
定义:
$$
R_0 = $$
直觉理解: - 一个感染者的平均感染周期是
关键阈值定理: - 若
这是流行病学中最重要的结果之一!
有效再生数
在疫情进行中,并非所有人都是易感者,实际的再生数是:
$$
R_e = R_0 $$
当
例如,如果
Python 实现
1 | import numpy as np |
SIR 模型的解析性质
虽然 SIR 模型没有解析解,但我们可以推导出一些重要性质。
性质 1:守恒关系
由于
性质 2: S-I 关系
将第一个方程除以第三个方程:
积分得:
$$
S = S_0 e^{-R_0 R/N} $$
性质 3:最终规模方程
设
$$
S_= S_0 e^{-R_0 R_/N} $$
由于
$$
N - R_= S_0 e^{-R_0 R_/N} $$
这是一个超越方程,需要数值求解。
1 | from scipy.optimize import fsolve |
SEIR 模型:加入潜伏期
为什么需要潜伏期?
许多传染病有潜伏期——从感染到具有传染性之间的时间。例如: - COVID-19: 2-14 天(中位数 5 天) - 流感: 1-4 天 - 麻疹: 7-14 天 - 埃博拉: 2-21 天
在潜伏期内,个体已被感染但尚不具传染性。
SEIR 模型方程
引入新的类别 E (Exposed):已暴露/潜伏期
新参数: -
基本再生数
SEIR 模型的
$$
R_0 = $$
潜伏期影响疫情的时间尺度,但不影响
Python 实现
1 | def seir_model(y, t, N, beta, sigma, gamma): |
COVID-19 建模: SEIR 的扩展
COVID-19 的特殊挑战
COVID-19 给建模带来了新的挑战: 1.
无症状传播:很大比例的感染者无症状但有传染性 2.
报告延迟:从感染到确诊有显著延迟 3.
参数不确定性:早期对
扩展的 SEIR 模型
考虑无症状感染者的模型:
其中: -
1 | def covid_model(y, t, N, beta, sigma, gamma_a, gamma_s, p, rho): |
干预措施的数学分析
隔离与社交距离
隔离措施通过降低接触率来减少
其中
目标:使
$$
c > 1 - $$
例如,若
疫苗接种
疫苗以一定速率将易感者转为免疫者:
其中
群体免疫:当免疫比例达到
1 | def sir_with_vaccination(y, t, N, beta, gamma, v): |
检测与隔离
如果能快速检测并隔离感染者,可以有效降低传播:
其中
$$
R_{0,} = $$
参数估计:从数据到模型
最小二乘拟合
给定累积病例数据
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61from scipy.optimize import minimize
def fit_sir_model(data, t_data, N):
"""拟合 SIR 模型参数"""
def objective(params):
beta, gamma = params
if beta <= 0 or gamma <= 0:
return 1e10
y0 = [N - data[0], data[0], 0]
t = np.linspace(0, t_data[-1], 100)
try:
sol = odeint(sir_model, y0, t, args=(N, beta, gamma))
# 插值到数据时间点
R_model = np.interp(t_data, t, sol[:, 2])
error = np.sum((R_model - data)**2)
return error
except:
return 1e10
# 初始猜测
result = minimize(objective, [0.3, 0.1], method='Nelder-Mead')
return result.x
# 模拟数据
np.random.seed(42)
N = 10000
beta_true = 0.35
gamma_true = 0.1
t_true = np.linspace(0, 100, 101)
y0 = [N-1, 1, 0]
sol_true = odeint(sir_model, y0, t_true, args=(N, beta_true, gamma_true))
# 添加噪声(模拟真实数据)
data = sol_true[::10, 2] # 每 10 天一个数据点
t_data = t_true[::10]
data = data * (1 + 0.1 * np.random.randn(len(data))) # 添加 10%噪声
# 拟合
beta_fit, gamma_fit = fit_sir_model(data, t_data, N)
print(f"真实参数: beta={beta_true}, gamma={gamma_true}")
print(f"拟合参数: beta={beta_fit:.3f}, gamma={gamma_fit:.3f}")
print(f"真实 R0: {beta_true/gamma_true:.2f}, 拟合 R0: {beta_fit/gamma_fit:.2f}")
# 可视化拟合结果
sol_fit = odeint(sir_model, y0, t_true, args=(N, beta_fit, gamma_fit))
plt.figure(figsize=(10, 6))
plt.plot(t_data, data, 'ko', markersize=8, label='Data')
plt.plot(t_true, sol_true[:, 2], 'b--', linewidth=2, label='True model')
plt.plot(t_true, sol_fit[:, 2], 'r-', linewidth=2, label='Fitted model')
plt.xlabel('Time (days)', fontsize=12)
plt.ylabel('Cumulative cases', fontsize=12)
plt.title('SIR Model Parameter Estimation', fontsize=14, fontweight='bold')
plt.legend(fontsize=11)
plt.grid(True, alpha=0.3)
plt.savefig('sir_fitting.png', dpi=150, bbox_inches='tight')
plt.show()
贝叶斯推断
贝叶斯方法可以量化参数的不确定性:
$$
P(| D) P(D | ) P() $$
其中
网络上的传染病传播
为什么需要网络模型?
SIR 模型假设人群混合均匀,但现实中: - 社交网络高度异质 - 存在"超级传播者" - 社区结构影响传播
网络基本概念
- 节点:个体
- 边:接触关系
- 度
:一个节点的邻居数 - 度分布
:度为 的节点比例
度异质性的影响
在度分布为
$$
R_0^{} = R_0 $$
对于无标度网络(
1 | import networkx as nx |
空间传播模型
反应-扩散方程
当考虑空间传播时, SIR 变成偏微分方程:
其中
传播波速
疫情以"波"的形式在空间传播,波速为:
$$
c = 2 $$
这解释了为什么疫情往往以可预测的速度在地理上蔓延。
总结
本章我们学习了传染病建模的核心内容:
- SIR 模型:流行病学的基石,描述易感-感染-康复的动态
- 基本再生数
:决定疫情能否爆发的关键阈值 - SEIR 模型:加入潜伏期,更符合许多传染病的实际
- COVID-19 建模:处理无症状传播、干预措施等复杂因素
- 参数估计:从数据拟合模型参数
- 网络模型:考虑社会接触结构的异质性
- 空间传播:疫情的地理扩散
这些模型虽然简化了现实,但为理解和控制传染病提供了强有力的工具。正如 COVID-19 疫情所展示的,数学模型在公共卫生决策中发挥着越来越重要的作用。
练习题
基础题
对于 SIR 模型,证明
当且仅当 。 如果一种疾病的
,平均感染周期为 7 天: - 计算传染率
- 需要接种多少比例的人口才能实现群体免疫?
- 计算传染率
对于 SEIR 模型,假设潜伏期为 5 天,感染期为 10 天,
。计算疫情达到高峰所需的大约时间。 证明 SIR 模型中
是单调递减的, 是单调递增的。 某次疫情最终有 60%的人口被感染。假设 SIR 模型适用,估计该疾病的
。
进阶题
- 含死亡率的模型:修改 SIR
模型,假设感染者有一定死亡率
。 - 写出新的微分方程
- 分析
如何变化 - 讨论最终死亡人数与
的关系
- 季节性传播:假设传染率有季节性变化
。 - 数值求解修改后的 SIR 模型
- 讨论这如何解释流感的季节性爆发
- 接触追踪:建立一个模型,其中一部分感染者的密切接触者被追踪并隔离。
- 这如何影响有效
? - 需要追踪多大比例才能控制疫情?
- 这如何影响有效
- 证明在 SIR 模型中,最终未感染人数
满足: $$
S_= S_0 e^{-R_0(N - S_)/N}$
编程题
实现一个交互式的 SIR 模型仿真器,允许用户调整
、 和初始条件,实时观察疫情曲线的变化。 用真实的 COVID-19 数据(如约翰霍普金斯大学数据集)拟合 SEIR 模型,估计早期的
。 实现一个基于网格的空间 SIR 模型:
- 在 2D 网格上,每个格子有 S 、 I 、 R 三种状态
- 感染只在相邻格子间传播
- 可视化疫情波的传播
模拟不同干预策略(隔离、疫苗接种、戴口罩)的效果:
- 比较单独使用和组合使用的效果
- 分析成本效益(如何用最小成本最大程度降低感染)
实现一个在 Barab á si-Albert 无标度网络上的 SIR 模型:
- 比较针对高度数节点和随机节点进行疫苗接种的效果
- 验证"针对 hub 节点接种更有效"的理论预测
思考题
为什么 SIR 模型假设康复后获得终身免疫?对于哪些疾病这个假设合理?对于哪些不合理?
讨论"群体免疫"策略的伦理问题。数学模型能告诉我们什么?不能告诉我们什么?
COVID-19 的
估计在不同地区和时期有很大差异。讨论造成这种差异的可能原因。 为什么疫情初期的"指数增长"最终会减慢?从模型角度和现实角度分别解释。
机器学习方法(如 LSTM)能否取代传统的微分方程模型进行疫情预测?讨论各自的优缺点。
参考资料
Kermack, W. O., & McKendrick, A. G. (1927). "A Contribution to the Mathematical Theory of Epidemics." Proceedings of the Royal Society A, 115(772), 700-721.
Anderson, R. M., & May, R. M. (1991). Infectious Diseases of Humans: Dynamics and Control. Oxford University Press.
Keeling, M. J., & Rohani, P. (2008). Modeling Infectious Diseases in Humans and Animals. Princeton University Press.
Brauer, F., & Castillo-Chavez, C. (2012). Mathematical Models in Population Biology and Epidemiology. Springer.
Ferguson, N. M., et al. (2020). "Impact of non-pharmaceutical interventions (NPIs) to reduce COVID-19 mortality and healthcare demand." Imperial College COVID-19 Response Team.
Pastor-Satorras, R., et al. (2015). "Epidemic processes in complex networks." Reviews of Modern Physics, 87(3), 925.
本文是《常微分方程的世界》系列的第 14 章。
- 本文标题:常微分方程(十四)传染病模型与流行病学
- 本文作者:Chen Kai
- 创建时间:2019-06-14 09:00:00
- 本文链接:https://www.chenk.top/%E5%B8%B8%E5%BE%AE%E5%88%86%E6%96%B9%E7%A8%8B%EF%BC%88%E5%8D%81%E5%9B%9B%EF%BC%89%E4%BC%A0%E6%9F%93%E7%97%85%E6%A8%A1%E5%9E%8B%E4%B8%8E%E6%B5%81%E8%A1%8C%E7%97%85%E5%AD%A6/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!