传染病监测(二):模型搭建实战 —— 从流感预测看数学建模的骨架

“当一种新型流感突袭 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 模型解析疫情拐点与疫苗策略,敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code_Verse

下章剧情由你定~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值