当前位置: 首页 > 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.jsqmd.com/news/1131869/

相关文章:

  • MySQL 联表查询避坑指南:从12个经典查询案例解析NULL值、重复记录与索引失效
  • SAP WM 库存地点转移:MIGO+LT06+LT12 全流程 5 个关键数据表追踪
  • 栈溢出防护绕过:3 种现代 Linux 环境下 NX/ASLR 攻击技术对比
  • 企业微信 H5 分享调试实战:3 种方法定位 agentConfig 40093 签名错误
  • RTX 3060 深度学习环境:CUDA 11.1 vs 11.8 版本选择与性能实测对比
  • 3种人体关键点算法对比:OpenPose vs AlphaPose vs MobilePose 在行为识别中的精度与速度权衡
  • /proc/kmsg 与 /dev/kmsg 深度对比:实时内核日志捕获的 2 种方案与 3 个陷阱
  • TigerVNC Server 1.13.0 开机自启:Systemd vs rc.local 3种方案对比与选择
  • VFX Graph vs. Shuriken 粒子系统:10万火花特效性能与工作流深度对比
  • Navicat无限试用终极指南:macOS用户的完整解决方案
  • ROLLUP 与 CUBE 性能对比:SQL Server 2022 处理百万行数据的3个关键指标
  • 收盘之后,别急着问 AI 明天涨不涨:我把一套“会核验证据的投委会”做成了 Skill
  • 缠论终极自动化解决方案:5分钟在通达信上实现免费缠论分析插件
  • 我用纯前端做了一个在线图片处理工具,零上传、免安装、隐私安全!
  • Cangaroo:开源CAN总线分析利器,让汽车电子调试变得简单高效
  • 关于Matlab今天我只说三点
  • 3款古汉语BERT模型对比:bert-ancient-chinese vs SikuBERT vs GuwenBERT,38K词表与6倍语料实测
  • Windows 11 资源监视器排查:5分钟定位并结束占用U盘的隐藏进程
  • CH348 Linux驱动 v1.0 在树莓派5上部署:Ubuntu 24.04 内核头文件缺失的3步修复
  • 奥维昔巴特Odevixibat婴幼儿用药,长期安全性循证说明
  • 2026最新5款AI编程工具权威实测合集|Cursor中文氛围开发低成本平替决策指南
  • MariaDB 10.5.4 二进制包安装:CentOS 7 逻辑卷(LVM)配置与多实例脚本实战
  • Hashcat掩码攻击实战:高效破解8位混合密码的策略与技巧
  • VFX Graph 与 Shuriken 粒子系统对比:10万火花粒子性能实测与5大应用场景分析
  • AEB/ACC/LKA 等 27 项 ADAS 功能解析:从传感器融合到 ECU 控制的完整技术栈
  • UE4/5 资产重定向器(Redirector)创建逻辑解析:4个条件与1个核心函数
  • 8086中断系统 256个中断向量表:从DOS功能调用到自定义中断服务程序
  • Linux 内核日志实战:printk 8级优先级详解与 /proc/sys/kernel/printk 4参数调优
  • 临界分词的存在性与最优性:从统计临界态到神经语言模型的双语实证检验 -更新
  • Linux 系统中创建符号链接(软链接)