Hello,大家好!好久没有更新了,今天给大家介绍一个非常经典的模型——SEIR传染病模型!

SEIR传染病模型

  • 模型介绍
    • S、E、I、R代表的含义
    • 模型建立
      • 变量解释
      • 建立微分方程
      • 转化迭代形式
  • Python实现
  • 总结
  • 获得源代码

模型介绍

传染病的基本数学模型,研究传染病的传播速度、空间范围、传播途径、动力学机理等问题,以指导对传染病的有效地预防和控制。常见的传染病模型按照传染病类型分为 SI、SIR、SIRS、SEIR 模型等,按照传播机理又分为基于常微分方程、偏微分方程、网络动力学的不同类型。

S、E、I、R代表的含义

S、E、I、R是传染病流行范围内的四类人群:易感者(Susceptible)、暴露者(Exposed)、感染者(Infectious)、康复者(Recovered)

类型 解释
易感者(Susceptible) 未得病者,但缺乏免疫能力,与感染者接触后容易受到感染
暴露者(Exposed) 接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用
感染者(Infectious) 染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员
康复者(Recovered) 被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类

注:有些文章里面对于R的解释会用抵抗者(Resistant)来解释,会将死亡人群也划分在R中。

模型建立

变量解释

变量 解释
SSS 易感者人数
EEE 潜伏者人数
III 感染者人数
RRR 康复者人数
r1r_1r1​ 每个感染者每天接触的平均人数
r2r_2r2​ 每个潜伏着每天接触的平均人数
β1\beta_1β1​ 易感者被感染者感染的概率
β2\beta_2β2​ 易感者被潜伏者感染的概率
α\alphaα 潜伏者转化为感染者的概率(潜伏期的倒数)
γ\gammaγ 康复概率
NNN 总人数

建立微分方程

dSdt=−r1βISN−r2β2ESNdEdt=r1β1ISN+r2β2ESN−αEdIdt=αE−γIdRdt=γI\frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N}\\ \frac{dE}{dt}=\frac{r_1\beta_1IS}{N}+\frac{r_2\beta_2ES}{N}-\alpha E\\ \frac{dI}{dt}=\alpha E-\gamma I\\ \frac{dR}{dt}=\gamma I dtdS​=−Nr1​βIS​−Nr2​β2​ES​dtdE​=Nr1​β1​IS​+Nr2​β2​ES​−αEdtdI​=αE−γIdtdR​=γI

转化迭代形式

以dSdt=−r1βISN−r2β2ESN\frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N}dtdS​=−Nr1​βIS​−Nr2​β2​ES​为例

dSdt=−r1βISN−r2β2ESN\frac{dS}{dt}=-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N} dtdS​=−Nr1​βIS​−Nr2​β2​ES​
左右两边求积分
∫n−1ndSdtdt=∫n−1n(−r1βISN−r2β2ESN)dt\int_{n-1}^{n}\frac{dS}{dt}dt=\int_{n-1}^{n}(-\frac{r_1\beta IS}{N}-\frac{r_2\beta_2 ES}{N})dt ∫n−1n​dtdS​dt=∫n−1n​(−Nr1​βIS​−Nr2​β2​ES​)dt
等号右边使用左矩形公式(∫abf(x)dx≈(b−a)f(a)\int_a^bf(x)dx\approx(b-a)f(a)∫ab​f(x)dx≈(b−a)f(a))
Sn−Sn−1=−r1β1In−1Sn−1N−r2β2En−1Sn−1NS_{n}-S_{n-1}=-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N} Sn​−Sn−1​=−Nr1​β1​In−1​Sn−1​​−Nr2​β2​En−1​Sn−1​​
整理得
Sn=Sn−1−r1β1In−1Sn−1N−r2β2En−1Sn−1NS_{n}=S_{n-1}-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N} Sn​=Sn−1​−Nr1​β1​In−1​Sn−1​​−Nr2​β2​En−1​Sn−1​​

同理可得
Sn=Sn−1−r1β1In−1Sn−1N−r2β2En−1Sn−1NEn=En−1+r1β1In−1Sn−1N+r2β2En−1Sn−1N−αEn−1In=In−1+αEn−1−γIn−1Rn=Rn−1+γIn−1S_{n}=S_{n-1}-\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}-\frac{r_2\beta_2 E_{n-1}S_{n-1}}{N}\\ E_{n}=E_{n-1}+\frac{r_1\beta_1I_{n-1}S_{n-1}}{N}+\frac{r_2\beta_2E_{n-1}S_{n-1}}{N}-\alpha E_{n-1}\\ I_{n}=I_{n-1}+\alpha E_{n-1}-\gamma I_{n-1}\\ R_{n}=R_{n-1}+\gamma I_{n-1} Sn​=Sn−1​−Nr1​β1​In−1​Sn−1​​−Nr2​β2​En−1​Sn−1​​En​=En−1​+Nr1​β1​In−1​Sn−1​​+Nr2​β2​En−1​Sn−1​​−αEn−1​In​=In−1​+αEn−1​−γIn−1​Rn​=Rn−1​+γIn−1​

Python实现

首先,定义S、E、I、R四类人群,并设置初始人数:

N = 96400000  # 人口总数
E = []  # 潜伏携带者
E.append(0)
I = []  # 传染者
I.append(17)
S = []  # 易感者
S.append(N - I[0])
R = []  # 抵抗者
R.append(0)

设置各参数的初始值:

r = 21  # 传染者接触人数
b = 0.048  # 传染者传染概率
a = 0.13  # 潜伏者患病概率
r2 = 21  # 潜伏者接触人数
b2 = 0.048  # 潜伏者传染概率
y = 0.066  # 康复概率
T = [i for i in range(0, 160)]  # 时间

利用迭代公式计算每一天四类群体的人数:

for i in range(0, len(T) - 1):S.append(S[i] - r * b * S[i] * I[i] / N - r2 * b2 * S[i] * E[i] / N)E.append(E[i] + r * b * S[i] * I[i] / N - a * E[i] + r2 * b2 * S[i] * E[i] / N)I.append(I[i] + a * E[i] - y* I[i])R.append(R[i] + y * I[i])

最后,可视化来看下模拟的效果*(完整代码已封装,文末关注公众号即可获得)*:

if __name__ == "__main__":T = [i for i in range(160)]s = SEIR(T, 96400000, 0, 17, 0, 21, 21, 0.048, 0.048, 0.13, 0.066)s.plot()

总结

传染病模型是一个非常经典的模型,不仅可以用在疾病的传播模拟上,经济领域、网络舆情传播等都可以使用。并且本文仅仅做了最简单的建模,里面的各类参数的设定都可以根据具体问题或实际情况,做更优的调整。

获得源代码

关注公众号,回复“SEIR”即可获得源代码,谢谢大家支持!

Python:SEIR传染病模型相关推荐

  1. 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响

    目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...

  2. SEIR传染病模型Netlogo仿真程序

    2019年年底,一场突如其来的传染病席卷中国湖北武汉,新型冠状病毒感染的肺炎疫情悄然蔓延,从武汉波及全国,牵动人心.受到B站某UP主仿真程序的启发,想通过计算机仿真实现一个更加真实的病毒传播仿真模型, ...

  3. R语言应用实战-基于R浅谈SEIR传染病模型以以及马尔萨斯,logistic模型(推导过程和源代码)

    前言 关于传染病SEIR模型,接下来我们分为以下几块内容讨论:一传染病的数学模型原理,二.R语言代码实现,三.常见错误以及相关其他模型的讨论(马尔萨斯模型和logistic模型). 以下是我为大家准备 ...

  4. 瘟疫模拟相关知识总结(传染病模型+马尔可夫链)

    瘟疫模拟相关知识总结 总览 模型 SI模型 SIS模型 SIR模型 SEIR模型 马尔可夫链 简介 理解 举个栗子 需要注意 实验设计 实验群体:人 实验思路 代码搭建(暂) 社区类(Communit ...

  5. Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型

    传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SEIR 模型考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫 ...

  6. Python学习:SIR传染病模型

    SIR模型是传染病模型中最经典的一个,类似的还有SI和SIS两种.SIR是三个单词首字母的缩写,其中S是Susceptible的缩写,表示易感者:I是Infective的缩写,表示感染者,R是Remo ...

  7. 数学建模清风第一次直播:传染病模型和微分方程拟合

    学习网址:课件下载 数学建模清风第一次直播:传染病模型和微分方程拟合 数学建模清风第二次直播:模拟退火算法 数学建模清风第三次直播:excel在数学建模中的应用 博客笔记: 数学建模清风第一次直播:传 ...

  8. 微分方程(人口预测与传染病模型)

    一.定义 微分方程:含导数或微分的方程 微分方程的阶数:所含导数或微分的最高阶数,如y'''+2y''-2x=0是三阶微分方程 微分方程的解:使得微分方程成立的函数 例如y'-2x=0的解可以为x²或 ...

  9. 传染病模型(1)——SI模型及matlab详解

    前言 常见的传染病模型按照具体的传染病的特点可分为 SI.SIS.SIR.SIRS.SEIR 模型.其中"S""E""I""R&q ...

  10. 基于SEIR微分方程模型对疫情传播的简单预测

    目录 一.模型的建立 传染病模型概念 模型假设 SEIR模型 模型中涉及的函数S(t).E(t).I(t).R(t) 更改后的微分方程 二.模型的求解 三.模型的缺点 祝语 随着疫情的再次爆发,全国疫 ...

最新文章

  1. Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
  2. 操作系统学习:系统调用与Linux0.12初始化详细流程
  3. 教你用PyTorch实现“看图说话”(附代码、学习资源)
  4. 数据结构 - 把二元查找树转变成排序的双向链表(C++)
  5. 关于JS中的JSON
  6. linux c程序中获取shell脚本输出
  7. 数据中心传输需求成以太网市场巨大推动力
  8. origin画图_3分钟浏览,Origin绘图中的12个经典问题集锦,早看早知道,躲坑没烦恼!!!...
  9. linux操作系统基础与实训教程,清华大学出版社-图书详情-《Linux操作系统基础与实训教程》...
  10. 电脑计算机软件硬盘不足,磁盘空间不足-电脑在运行程序的时候,总是要弹出磁盘空间不足,是什么原因造成磁盘? 爱问知识人...
  11. 中兴通讯徐子阳:不破不立 用“加减乘除”建理想5G
  12. common java socket,JAVA I/O(四)网络Socket和ServerSocket
  13. Verilog HDL中使用系统任务 $readmemh遇到问题及解决方法
  14. angular2学习笔记之服务和http
  15. java微服务实战.pdf_Spring微服务实战 ([美]约翰·卡内尔) 中文完整pdf扫描版[172MB]...
  16. Chrome常用插件和油猴(Tampermonkey)脚本使用及常用脚本分享(网盘)
  17. 高通平台文档下载【学习笔记】
  18. xml中外部引用DTD文档
  19. 分布式数据库原理解析
  20. 百度地图 获取经纬度为4.9E-324

热门文章

  1. 带通 带阻滤波器 幅频响应_方程推导:二阶有源带通滤波器设计!(内附教程+原理图+视频+代码下载)...
  2. 尚学堂马士兵Oracle教程笔记
  3. 数据结构与算法分析:C语言描述(原书第2版) PDF+源代码+习题答案
  4. 5G网络能力开放的“接头人“——NEF
  5. delphi中panel控件应用
  6. Struts 2拦截器
  7. Linux Shell基础教程
  8. 网管必备知识全套=做为一个网管必备的基础知识
  9. 非线性系统的神经网络控制(常用介绍)--理论
  10. JS+CSS实现幻灯片