跳到主要内容

SIR 与 SEIR 传染病模型

一、直观理解:人群在几个“仓室”之间流动​

仓室模型把人群按疾病状态分成几格(仓室),用微分方程描述格与格之间的流动。

SIR 三格:

  • SS:易感(Susceptible)
  • II:感染(Infectious)
  • RR:移除/康复/隔离(Removed/Recovered)

基本故事:易感者因接触感染者而变成感染者,感染者按一定速率康复并获得免疫(进入 RR)。若没有新生与免疫丧失,RR 只进不出,疫情最终结束,SS 剩下一底部。

SEIR 增加潜伏仓室 EE(Exposed):感染后尚未具传染性的阶段。对潜伏期不可忽略的疾病,SEIR 比 SIR 更合理。

这类模型的力量在于:用少量参数(接触传播、康复、潜伏)解释

  • 为何会有疫情高峰;
  • 基本再生数 R0R_0 如何决定爆发与否;
  • 隔离、降接触、加快康复等干预如何压低峰值。

它们描述的是平均场机制,不是每一个体的精确轨迹。

二、适用场景与优缺点​

类型说明
适用场景传染病趋势的机制解释与情景比较;评估降低接触率、缩短传染期等干预;教学 R0R_0、群体免疫阈值;在数据粗、需要可解释参数时作为基线。
核心优点参数具有流行病学含义;总人口守恒(标准封闭模型)便于检查;易算 R0R_0 与最终规模关系;数值实现简单(ode45)。
局限与缺点均匀混合假设强;忽略年龄、空间、超传播;参数时变(行为变化)时经典常系数不够;检测率使“报告病例 ≠I\neq I”;随机性在小种群重要。

使用前应确认:

  1. 仓室设置是否匹配疾病自然史(有无潜伏、有无再感染);
  2. 人口是否近似封闭,是否需出生死亡;
  3. 数据是感染、发病还是仅确诊,观测模型如何连;
  4. 目标是机制情景还是精确短期预报。

三、核心原理:方程、R0R_0 与阈值​

1. 标准 SIR(频率依赖接触)​

S′=−βSIN,I′=βSIN−γI,R′=γI,\begin{aligned} S' &= -\beta \frac{S I}{N},\\ I' &= \beta \frac{S I}{N} - \gamma I,\\ R' &= \gamma I, \end{aligned}

其中 N=S+I+RN=S+I+R 常为常数,β\beta 为有效接触传播率,γ\gamma 为康复率,1/γ1/\gamma 为平均感染期。

2. 基本再生数​

在无病平衡 (S,I,R)=(N,0,0)(S,I,R)=(N,0,0) 附近,

R0=βγ.R_0=\frac{\beta}{\gamma}.
  • R0<1R_0<1:引入少量感染趋于消亡;
  • R0>1R_0>1:可引发入侵增长,直到易感者降到不足。

群体免疫阈值近似 1−1/R01-1/R_0(在简单 SIR 意义下)。

3. SEIR​

S′=−βSIN,E′=βSIN−σE,I′=σE−γI,R′=γI,\begin{aligned} S' &= -\beta \frac{S I}{N},\\ E' &= \beta \frac{S I}{N} - \sigma E,\\ I' &= \sigma E - \gamma I,\\ R' &= \gamma I, \end{aligned}

1/σ1/\sigma 为平均潜伏期。R0R_0 仍为 β/γ\beta/\gamma(标准设定下),但高峰形状与时间滞后不同。

4. 最终规模(SIR 经典关系)​

若从近似全易感开始,最终仍易感比例 s∞=S(∞)/Ns_\infty=S(\infty)/N 满足

ln⁡s∞=−R0(1−s∞)\ln s_\infty = -R_0(1-s_\infty)

(在合适初值极限下)。可用于不靠全程曲线估计 R0R_0。

四、关键决策​

  1. SIR 还是 SEIR
    潜伏期相对感染期不可忽略、或数据有明显“延迟峰”时用 SEIR。

  2. 参数标定

    • γ\gamma:由感染期文献;
    • β\beta:由早期指数增长率 r≈γ(R0−1)r\approx\gamma(R_0-1) 或曲线拟合;
    • 注意可辨识性与检测率。
  3. 干预怎么进模型
    降 β(t)\beta(t)、提高 γ\gamma、隔离(从 II 流出到隔离仓)等,必须说明时间段。

  4. 数值与约束
    NonNegative,检查 S+I+R(=+E)S+I+R(=+E) 守恒。

  5. 验证
    R0<1R_0<1 时疫情应萎缩;最终规模关系;参数扰动下峰值是否稳健。

五、MATLAB 示例​

%% SIR 基本模拟
N = 1e5;
beta = 0.45;
gamma = 0.15; % 感染期约 1/0.15 ≈ 6.7 天
R0 = beta/gamma;
fprintf("R0 = %.3f\n", R0);

fSIR = @(t, y) [ -beta*y(1)*y(2)/N;
beta*y(1)*y(2)/N - gamma*y(2);
gamma*y(2) ];
y0 = [N-20; 20; 0];
opts = odeset("RelTol", 1e-7, "AbsTol", 1e-9, "NonNegative", 1:3);
[t, y] = ode45(fSIR, [0 180], y0, opts);

figure;
plot(t, y(:,1), t, y(:,2), t, y(:,3), "LineWidth", 1.2);
grid on; legend("S","I","R");
xlabel("天"); ylabel("人数");
title(sprintf("SIR:R_0=%.2f", R0));

% 守恒检查
consErr = max(abs(sum(y,2) - N));
fprintf("人数守恒最大偏差 = %.3e\n", consErr);

%% 峰值与最终感染比例
[Ipeak, idx] = max(y(:,2));
fprintf("I 峰值 = %.1f, 出现在 t = %.1f\n", Ipeak, t(idx));
attack = (N - y(end,1)) / N;
fprintf("累计感染比例 ≈ %.3f\n", attack);

%% 最终规模关系检验
sInf = y(end,1)/N;
lhs = log(sInf);
rhs = -R0*(1 - sInf);
fprintf("ln(s_inf)=%.4f, -R0(1-s_inf)=%.4f\n", lhs, rhs);

%% 干预情景:t>=30 天后接触率降为 0.6 倍
beta2 = @(t) beta * (0.6*(t>=30) + 1.0*(t<30));
fSIRt = @(t, y) [ -beta2(t)*y(1)*y(2)/N;
beta2(t)*y(1)*y(2)/N - gamma*y(2);
gamma*y(2) ];
[t2, y2] = ode45(fSIRt, [0 180], y0, opts);

figure;
plot(t, y(:,2), t2, y2(:,2), "LineWidth", 1.2); grid on;
xline(30, "--");
legend("无干预 I(t)", "t=30 降接触", "干预开始");
title("干预压低并推迟/改变高峰");

%% SEIR
sigma = 1/5; % 潜伏期 5 天
fSEIR = @(t, y) [ -beta*y(1)*y(3)/N;
beta*y(1)*y(3)/N - sigma*y(2);
sigma*y(2) - gamma*y(3);
gamma*y(3) ];
% y = [S E I R]
y0E = [N-20; 0; 20; 0];
opts4 = odeset("RelTol", 1e-7, "NonNegative", 1:4);
[tE, yE] = ode45(fSEIR, [0 200], y0E, opts4);

figure;
plot(tE, yE(:,1), tE, yE(:,2), tE, yE(:,3), tE, yE(:,4), "LineWidth", 1.1);
grid on; legend("S","E","I","R");
title("SEIR 时间序列");

%% 由早期增长粗估 R0(示意)
% 取 I(t) 早期对 t 的对数斜率 r,则 R0 ≈ 1 + r/gamma (SIR)
idxE = t < 15;
p = polyfit(t(idxE), log(y(idxE,2)+1e-12), 1);
r = p(1);
R0hat = 1 + r/gamma;
fprintf("早期增长率 r≈%.3f, 粗估 R0≈%.3f(真值 %.3f)\n", r, R0hat, R0);

六、如何解释结果​

报告仓室模型时建议结构:

  1. 仓室定义、流程图与假设(均匀混合、封闭、免疫是否永久);
  2. 参数表:数值、单位、来源(文献/估计);
  3. R0R_0 与阈值含义;
  4. 曲线:峰值时间与高度、最终感染规模、干预对比;
  5. 守恒与非负检查;
  6. 敏感性:R0R_0 或 β\beta 变化 ±10%\pm10\% 的影响;
  7. 局限:数据偏差、结构不确定性、不适用于个体级精准预测。

把“模型里的 II”与“每日新增确诊”对齐时,必须说明观测过程,否则拟合会偏。

七、常见误区​

1. 把 R0R_0 当成固定自然常数​

R0R_0 依赖接触行为与防控,会随时间变。

2. 用全程最小二乘硬拟合常系数 SIR​

行为变化、防疫政策会使 β(t)\beta(t) 显著时变,常系数只能分段或作粗基线。

3. 忽略潜伏却解释“延迟”​

有明显潜伏期却用 SIR,峰形与时间滞后可能系统偏差。

4. 总人数不守恒仍继续解释​

多半是方程写错或数值炸掉,应先修模型。

5. 把仓室结果直接当精准病例预报​

无结构化、无观测模型时,更适合情景比较与机制讨论。

八、小结​

SIR/SEIR 的核心思想可以概括为:

将人群按疾病状态分仓,用接触传播与康复(及潜伏)速率描述流动,从而用 R0R_0 与动力学曲线解释爆发、高峰与干预效果。

它们是传染病数学建模的标准起点:参数可解释、结构可扩展、数值易实现。使用时牢记均匀混合与常系数假设的边界,把数据观测过程说清楚,并用守恒、R0R_0 阈值和敏感性支撑结论,而不是只展示一条拟合曲线。