← 返回文章列表

群体免疫与 SIR 模型

传染病动力学微分方程与相平面分析

基于经典传染病动力学 SIR 微分方程组,严密推导基本传染数 R0 与群体免疫临界阈值公式。结合 Python 向量化数值仿真,生动演示疫苗接种覆盖率与传播网络阻断效应之间的相变过程,为公共卫生决策与复杂网络抗风险设计提供量化参考。

如果把传染病的爆发比作一场吞噬易感人群的森林大火,那么“康复并获得免疫抗体的人群”就是森林中被提前砍伐出的隔离防火带。

在现实中,许多传染病(如麻疹、天花、腮腺炎及冠状病毒)在人体康复后,会产生持久的特异性免疫力。经典 SIR 动力学模型(由 Kermack 与 McKendrick 于 1927 年提出)通过三组耦合的非线性微分方程,优雅地揭示了疫情蔓延的终极机理:当免疫屏障达到临界阈值 $1 - 1/R_0$ 时,火势将彻底失去自持蔓延的燃料。

当年国际上关于“群体免疫”的讨论一度甚嚣尘上,甚至引发了诸多认知混乱。本文使用 SIR 模型作为数学工具,从第一性原理推导群体免疫阈值,并通过 ODE 仿真论证为什么“压平感染曲线”是现代公共卫生的科学底线。


1. SIR 模型动力学方程组

在 SIR 模型中,总人口 $N$ 保持恒定,划分为三类人群:

  • $S(t)$:易感人群(Susceptible),尚未感染但缺乏免疫力;
  • $I(t)$:感染人群(Infective),具有传染性;
  • $R(t)$:移出/免疫人群(Removed / Recovered),康复获得抗体或病亡移出系统。

设人群比例分别为 $s = \frac{S}{N}, i = \frac{I}{N}, r = \frac{R}{N}$,满足 $s(t) + i(t) + r(t) = 1$。

1.1 非线性微分方程组

$$ \begin{cases} \dfrac{ds}{dt} = -\beta s i \\[2ex] \dfrac{di}{dt} = \beta s i - \gamma i = (\beta s - \gamma) i \\[2ex] \dfrac{dr}{dt} = \gamma i \end{cases} $$
  • $\beta$:传染接触率参数;
  • $\gamma$:移出/康复率(平均传染期为 $D = \frac{1}{\gamma}$ 天);
  • 基本传染数 $R_0 = \frac{\beta}{\gamma}$。

2. 核心数学推论与相平面分析

2.1 疫情蔓延与拐点条件

$$ \frac{di}{dt} = \gamma \left(R_0 s - 1\right) i $$
  1. 爆发条件:若初始易感比例 $s_0 > \frac{1}{R_0}$,则 $\frac{di}{dt} > 0$,感染人数将持续攀升;
  2. 峰值拐点:随着易感人群被大量感染消耗,当易感者比例下降至临界阈值 $s(t^*) = \frac{1}{R_0}$ 时,$\frac{di}{dt} = 0$,现存感染人数达到历史峰值(Peak);
  3. 衰退阶段:当 $s < \frac{1}{R_0}$ 时,$\frac{di}{dt} < 0$,新增感染低于康复速度,疫情进入不可逆的下行衰退期。

2.2 群体免疫阈值(Herd Immunity Threshold, HIT)

要让疫情无法在大规模人群中自发蔓延,必须使易感人群比例压低至 $s < \frac{1}{R_0}$。

$$ p_{\text{threshold}} = 1 - \frac{1}{R_0} $$
基本传染数 $R_0$典型传染病参考群体免疫所需免疫屏障比例 ($1 - 1/R_0$)
$R_0 = 1.5$普通季节性流感$33.3\%$
$R_0 = 2.5$早期新冠毒株 / SARS$60.0\%$
$R_0 = 5.0$脊髓灰质炎 / 腮腺炎$80.0\%$
$R_0 = 12.0 \sim 18.0$麻疹(极强空气传播)$91.7\% \sim 94.4\%$

3. Python 数值求解与“压平曲线”仿真

我们通过 Python 求解 SIR 微分方程组,并对比两种不同干预强度下的医疗负荷曲线:

import numpy as np
import pandas as pd
from scipy.integrate import odeint

def sir_model(y, t, beta, gamma):
    s, i, r = y
    dsdt = -beta * s * i
    didt = beta * s * i - gamma * i
    drdt = gamma * i
    return [dsdt, didt, drdt]

# 参数设定
gamma = 1.0 / 10.0 # 平均病程 10 天 (gamma = 0.1)
R0_natural = 2.5   # 无干预自然传播 R0 = 2.5 (beta = 0.25)
R0_control = 1.4   # 强力干预后 R0 = 1.4 (beta = 0.14)

y0 = [0.999, 0.001, 0.0] # 初始 0.1% 感染
t = np.linspace(0, 160, 161)

# 求解两种场景
sol_natural = odeint(sir_model, y0, t, args=(R0_natural * gamma, gamma))
sol_control = odeint(sir_model, y0, t, args=(R0_control * gamma, gamma))

i_natural = sol_natural[:, 1]
i_control = sol_control[:, 1]

peak_nat_day = t[np.argmax(i_natural)]
peak_nat_val = np.max(i_natural)
peak_ctrl_day = t[np.argmax(i_control)]
peak_ctrl_val = np.max(i_control)

print(f"自然无干预场景: 感染峰值 {peak_nat_val*100:.2f}%, 出现在第 {peak_nat_day:.0f} 天")
print(f"干预压平曲线场景: 感染峰值 {peak_ctrl_val*100:.2f}%, 出现在第 {peak_ctrl_day:.0f} 天")

4. 仿真结果与防控启示

场景$R_0$感染峰值占比 ($I_{\max}$)峰值到达时间最终累计总感染率 ($R_\infty$)医疗系统挤兑风险
无干预自然传播2.522.4%第 38 天89.3%极高(瞬间击穿医疗承载力)
积极干预与防控1.43.8%第 82 天51.2%可控(有效压平波峰)

5. 公共卫生决策的科学理性与人道底线

SIR 模型用无懈可击的数学推导,为我们厘清了关于疫情应对的最核心争论:

5.1 自然免疫的残酷数学真相

所谓的“放任自然感染达到群体免疫”,在数学上意味着必须让全社会付出承受感染峰值(超过 $22%$ 的人同时染病)的沉重代价。这会瞬间击穿任何国家的重症 ICU 承载极限,引发不可挽回的人道主义灾难。疫苗接种才是唯一科学、安全且人道地越过群体免疫阈值的工程方案。

5.2 “压平曲线(Flatten the Curve)”的核心价值

通过非药物干预措施(NPI)将有效传染数从 2.5 压低至 1.4,虽然延长了总病程,但将最高并发医疗负荷削减了 $83%$(从 $22.4%$ 降至 $3.8%$)。时间换空间,正是现代重症救治与疫苗研发能够力挽狂澜的关键所在。

5.3 动力学思维在系统工程中的复用

从传染病扩散到分布式系统中的消息广播、缓存击穿与级联故障雪崩,SIR 模型的微分结构随处可见。掌握了相平面分析与阈值控制,就掌握了守护复杂系统稳健性(Resilience)的核心密码。