当前位置: 首页 > news >正文

SEIR 传染病模型 Python 实战:基于 2020 新冠数据拟合与参数灵敏度分析

SEIR 传染病模型 Python 实战:基于 2020 新冠数据拟合与参数灵敏度分析

传染病建模一直是公共卫生领域的重要工具。2020年新冠疫情的爆发,让更多人认识到数学模型在疫情预测和防控策略评估中的价值。本文将带您用Python实现经典的SEIR模型,并通过真实数据拟合和参数分析,掌握传染病建模的核心技术。

1. SEIR 模型基础与 Python 实现

SEIR模型将人群分为四类:

  • S(Susceptible):易感者
  • E(Exposed):潜伏期感染者
  • I(Infectious):发病感染者
  • R(Recovered):康复或死亡者

对应的微分方程组为:

dS/dt = -βSI/N dE/dt = βSI/N - σE dI/dt = σE - γI dR/dt = γI

让我们用Python实现这个模型:

import numpy as np from scipy.integrate import odeint class SEIRModel: def __init__(self, beta, sigma, gamma, N): self.beta = beta # 接触率 self.sigma = sigma # 潜伏期倒数 self.gamma = gamma # 恢复率 self.N = N # 总人口 def equations(self, y, t): S, E, I, R = y dSdt = -self.beta * S * I / self.N dEdt = self.beta * S * I / self.N - self.sigma * E dIdt = self.sigma * E - self.gamma * I dRdt = self.gamma * I return [dSdt, dEdt, dIdt, dRdt] def solve(self, initial_conditions, t): solution = odeint(self.equations, initial_conditions, t) return solution

2. 数据准备与模型拟合

要拟合真实数据,我们需要:

  1. 获取公开的新冠疫情数据
  2. 选择合适的优化算法
  3. 定义损失函数

以下是数据预处理的关键步骤:

import pandas as pd from scipy.optimize import minimize # 加载数据示例 data = pd.read_csv('covid_data.csv') confirmed_cases = data['confirmed'].values days = np.arange(len(confirmed_cases)) def loss_function(params, data): beta, sigma, gamma = params model = SEIRModel(beta, sigma, gamma, N=1e6) solution = model.solve([0.99, 0.01, 0, 0], days) predicted_I = solution[:, 2] * N return np.sum((predicted_I - data)**2) initial_guess = [0.5, 0.2, 0.1] result = minimize(loss_function, initial_guess, args=(confirmed_cases,)) optimal_params = result.x

参数拟合的常见挑战包括:

  • 数据质量不一致
  • 模型假设与现实差异
  • 多峰优化问题

3. 参数灵敏度分析方法

灵敏度分析帮助我们理解哪些参数对结果影响最大。常用方法包括:

  1. 局部灵敏度分析:计算参数变化对输出的偏导数
  2. 全局灵敏度分析:如Sobol指数法
  3. 参数扫描法:系统性地改变参数值

实现一个简单的参数扫描:

def parameter_sweep(base_params, index, range_values): results = [] for value in range_values: params = base_params.copy() params[index] = value model = SEIRModel(*params, N=1e6) solution = model.solve([0.99, 0.01, 0, 0], days) results.append(solution[:, 2][-1]) # 取最终感染人数 return results # 测试接触率β的影响 beta_values = np.linspace(0.1, 0.9, 20) beta_sensitivity = parameter_sweep(optimal_params, 0, beta_values)

关键参数的影响通常呈现以下规律:

参数生物学意义对疫情规模影响
β接触率正相关
σ潜伏期倒数影响疫情速度
γ恢复率负相关

4. 模型扩展与实践建议

基础SEIR模型可以扩展为:

  • SEIRS:考虑免疫力丧失
  • SEIQR:增加隔离人群
  • 空间异质性模型

实际应用中的注意事项:

  1. 数据质量比模型复杂度更重要
  2. 参数应定期重新拟合
  3. 结合多种模型结果综合判断

一个考虑隔离措施的改进模型实现:

class SEIQRModel(SEIRModel): def __init__(self, beta, sigma, gamma, q, N): super().__init__(beta, sigma, gamma, N) self.q = q # 隔离强度 def equations(self, y, t): S, E, I, Q, R = y dSdt = -self.beta * S * I / self.N dEdt = self.beta * S * I / self.N - self.sigma * E dIdt = self.sigma * E - (self.gamma + self.q) * I dQdt = self.q * I - self.gamma * Q dRdt = self.gamma * (I + Q) return [dSdt, dEdt, dIdt, dQdt, dRdt]

在项目实践中发现,模型对初始条件非常敏感,特别是潜伏期人群比例。建议通过多次随机初始化来评估结果稳定性。

http://www.gsyq.cn/news/1643847.html

相关文章:

  • /proc/kmsg 与 /dev/kmsg 深度对比:实时内核日志捕获的 2 种方案与 3 个陷阱
  • 3种人体关键点算法对比:OpenPose vs AlphaPose vs MobilePose 在行为识别中的精度与速度权衡
  • VFX Graph vs. Shuriken 粒子系统:10万火花特效性能与工作流深度对比
  • CH348 Linux驱动 v1.0 在树莓派5上部署:Ubuntu 24.04 内核头文件缺失的3步修复
  • 2026最新5款AI编程工具权威实测合集|Cursor中文氛围开发低成本平替决策指南
  • 3款古汉语BERT模型对比:bert-ancient-chinese vs SikuBERT vs GuwenBERT,38K词表与6倍语料实测
  • Cangaroo:开源CAN总线分析利器,让汽车电子调试变得简单高效
  • MariaDB 10.5.4 二进制包安装:CentOS 7 逻辑卷(LVM)配置与多实例脚本实战
  • UE4/5 资产重定向器(Redirector)创建逻辑解析:4个条件与1个核心函数
  • 2026国内企业级智能体推荐:6款主流产品功能、适用场景全对比
  • 小产和流产有什么区别?
  • 7.3量化
  • vsftpd 3.0.5 安全配置实战:5项关键设置加固FTP服务器
  • HarmonyKit | 鸿蒙新特性对比:Tabs vs HdsTabs 选型深度解析
  • 2026最新8款AI编程助手学生党平替实测合集
  • NVMe 2.0b 控制器架构解析:3种控制器类型与2种模型的核心差异
  • 2026最新5款AI编程工具平替实测合集|开发者全方位权威榜单
  • 河南洛阳无人机维修机构推荐|河南筋斗云翼航空一站式低空产业实训基地
  • 首月半价cursor
  • PCIe 6.0 DMWr 实战:3步配置与 64B/128B 负载性能对比
  • 26-MCP协议是什么
  • 深度学习过拟合实战:L1/L2正则化与Dropout在Auto MPG回归任务中的5方案对比
  • VOC、COCO、YOLO 3 种目标检测数据集格式对比与 Python 转换脚本
  • R-CNN系列3大模型演进对比:从53.7%到73.2% mAP的性能跃迁分析
  • 2026最新8款AI编程工具平替实测深度对比
  • Home Assistant Android应用mTLS证书闪退问题排查与修复指南
  • Grok Build:从构建工具到工作流语义引擎的范式跃迁
  • ESP-NOW 低功耗设备的可靠唤醒:一个被忽视的时序问题
  • AKShare金融数据接口:一站式解决Python量化投资的数据获取难题
  • 你每天用的 Claude Code,可能在偷偷标记你——阿里全员卸载背后的真相