> 技术文档 > 传染病监测(二):模型搭建实战 —— 从流感预测看数学建模的骨架_如何快速高效建立传染病监测预警模型

传染病监测(二):模型搭建实战 —— 从流感预测看数学建模的骨架_如何快速高效建立传染病监测预警模型

“当一种新型流感突袭 10 万人的小镇,我们如何预测疫情走势?本章揭晓:传染病学家如何用数学方程‘预演’疫情!” 在上一篇博客中,我们了解了传染病监测的基础概念,如 R0、潜伏期等。今天,我们将深入到模型构建的底层逻辑中,以教材中的流感案例为线索,带你一步步看懂数学建模的全流程。

一、模型搭建七步法

我们的核心目标是回答 “流感入侵 10 万人小镇后,易感 / 感染 / 免疫者数量如何变化?最终多少人感染?”。下面给出的建模七步曲,就像搭建一座房子的蓝图,指引我们完成整个模型的构建:

  1. 明确问题:确定我们要解决的具体问题,比如上述的流感预测。
  2. 收集感染病学事实:了解疾病的各种特性,像潜伏期、传染期等。
  3. 选择模型结构:这是关键决策!不同的模型结构适用于不同的场景。
  4. 设定输入参数:给模型提供具体的数据,比如感染率、康复率等。
  5. 建立模型方程:将前面的步骤整合起来,形成描述疫情变化的方程。
  6. 模型验证:检查模型是否符合实际情况。
  7. 预测与优化:用模型进行预测,并根据结果优化模型。

小白提示:建模就像组装乐高,先选框架(步骤 3),再填参数(步骤 4),最后拼装成方程(步骤 5),一步步来,其实没那么难!

二、模型类型:三大选择决定预测风格

1. 结构选择:SIR?SIS?SEIR?SIRS?

模型类型

适用场景

疾病举例

SI

终身感染

HIV

SIS

治愈后无免疫

淋病

SEIR

有潜伏期 + 免疫

流感 / 麻疹

SIRS

免疫力逐渐减弱

百日咳 / 季节性流感

上面研究的疾病是流感,因此我们选择SEIR。为什么流感选 SEIR?因为流感有 1 - 2 天的潜伏期(E 状态),传染期约 5 天(I 状态),康复后还有短期免疫(R 状态),SEIR 模型能更好地描述这些特点。

2. 确定性 vs 随机性模型

类型

核心特点

输出结果

类比

确定性模型

忽略随机波动

单一 “平均预测值”

天气预报 “平均气温”

随机性模型

引入随机事件(如接触偶然性)

概率分布(区间预测)

天气预报 “降水概率”

随机模型能展现出疫情可能消失或爆发的情况,更贴近现实中的不确定性。

3. 其他模型分类
  • 分室模型(Compartmental):把人群按状态分组(如 S/E/I/R),追踪组间流动。
  • 个体模型(Individual-based):模拟每个人的行为,但计算成本高。
  • 网络模型(Network):模拟真实接触链,比如性传播网络。

三、方程实战:流感 SEIR 模型的搭建

假设前提

  • 小镇 10 万人全易感(S₀=99,999),1 名感染者(I₀=1)。
  • 随机混合接触(简化计算)。
  • 忽略出生 / 死亡 / 迁移。

核心方程(差分方程形式)

\\( S_{t+1} = S_t - \\lambda_t S_t \\)

\\( E_{t+1} = E_t + \\lambda_t S_t - f E_t \\)

\\( I_{t+1} = I_t + f E_t - r I_t \\)

\\( R_{t+1} = R_t + r I_t \\)

参数解读

  • \\(\\lambda_t = \\beta I_t\\):当日感染风险,和感染者数量\\(I_t\\)成正比。
  • \\(\\beta\\):有效接触率,两人每日有效接触概率,在这个例子中\\(\\beta = 10^{-5}\\)。
  • \\(f\\):结束潜伏率,如果潜伏期是 2 天,那么\\(f=0.5/天\\)。
  • \\(r\\):康复率,如果传染期 5 天,那么\\(r=0.2/天\\)。

为什么\\(\\lambda_t = \\beta I_t\\)?这是基于质量作用定律,感染风险和感染者密度、易感者密度都成正比。\\(\\beta\\)还有深层意义,它可以通过公式\\(\\beta = \\frac{R_0}{N \\times D} = \\frac{2}{100,000 \\times 2} = 10^{-5}\\)计算得出(\\(R_0=2\\), \\(D\\)= 传染期 2 天,\\(N\\)=10 万人)。

四、参数争议:频率依赖 vs 密度依赖

假设

核心观点

适用场景

频率依赖

每人每日接触数固定

人群规模变化时(推荐)

密度依赖

接触数随人口密度增加而上升

动物 / 植物疾病

决策关键:如果我们要模拟城市扩张(人口增长),选择频率依赖(\\(\\lambda_t = \\frac{c_e I_t}{N_t}\\))会更合理。

根据上述建模的过程,我们可以使用MATLAB对其进行仿真,代码如下:

clear; clc% 初始化参数N = 100000; % 总人数S0 = 99999; % 初始易感者E0 = 0; % 初始暴露者I0 = N - S0; % 初始感染者R0 = 0; % 初始康复者br = 2; % 基本再生数D = 2; % 传染期beta = br / (N * D); % 接触感染率(β)f = 0.5; % 暴露者转化率(/天)r = 0.2; % 康复率(/天)T = 200; % 模拟天数z% 初始化状态向量S = zeros(1, T);E = zeros(1, T);I = zeros(1, T);R = zeros(1, T);% 初始条件S(1) = S0;E(1) = E0;I(1) = I0;R(1) = R0;% 差分方程迭代for t = 1:T-1 lambda_t = beta * I(t); % 有效接触率(λ_t = β*I_t,假设λ_t与感染者数量成正比) S(t+1) = S(t) - lambda_t * S(t); E(t+1) = E(t) + lambda_t * S(t) - f * E(t); I(t+1) = I(t) + f * E(t) - r * I(t); R(t+1) = R(t) + r * I(t);end% 生成时间序列t = 1:T;% 绘制演化曲线figure(\'Color\', \'white\', \'Position\', [100 100 800 500]);plot(t, S, \'b-\', \'LineWidth\', 1.5, \'DisplayName\', \'易感者(S)\');hold on;plot(t, E, \'g--\', \'LineWidth\', 1.5, \'DisplayName\', \'暴露者(E)\');plot(t, I, \'r-.\', \'LineWidth\', 1.5, \'DisplayName\', \'感染者(I)\');plot(t, R, \'m:\', \'LineWidth\', 1.5, \'DisplayName\', \'康复者(R)\');% 添加图表属性xlabel(\'时间(天)\', \'FontSize\', 12);ylabel(\'人数\', \'FontSize\', 12);title(\'SEIR模型群体演化曲线\', \'FontSize\', 14, \'FontWeight\', \'bold\');legend(\'Location\', \'northeast\', \'FontSize\', 10);grid on;

运行结果如下:

输出结果显示:

  • 疫情高峰在第40天左右;
  • 暴露者高峰先于感染者高峰。 

五、模型验证:避免 “垃圾进,垃圾出”

  • 校验依据:把模型结果和历史疫情数据对比,比如 1957 年流感血清抗体分布。
  • 参数校准:要是\\(R_0\\)未知,可以调整参数,让模型曲线和真实病例数更贴合。
  • 敏感度分析:测试不同\\(R_0\\)(1.5 vs 3.0)对结果的影响。

六、总结与预告

本章精华:模型是现实的 “简笔画”,SEIR 框架描述人群状态流动,\\(\\beta\\)量化传播强度,差分方程推进时间演化。通过一步步搭建模型,我们能更好地理解疫情传播的规律。

下篇预告:差分方程升级版来了!微分方程模型如何实现 “连续时间模拟”?我们将用 SIR 模型解析疫情拐点与疫苗策略,敬请期待!