Python:SEIR传染病模型
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β2ESdtdE=Nr1β1IS+Nr2β2ES−α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β2ES为例
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β2ES
左右两边求积分
∫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−1ndtdSdt=∫n−1n(−Nr1βIS−Nr2β2ES)dt
等号右边使用左矩形公式(∫abf(x)dx≈(b−a)f(a)\int_a^bf(x)dx\approx(b-a)f(a)∫abf(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β1In−1Sn−1−Nr2β2En−1Sn−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β1In−1Sn−1−Nr2β2En−1Sn−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β1In−1Sn−1−Nr2β2En−1Sn−1En=En−1+Nr1β1In−1Sn−1+Nr2β2En−1Sn−1−αEn−1In=In−1+αEn−1−γIn−1Rn=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传染病模型相关推荐
- 【Python数学建模】SEIR传染病模型模型延伸-SEIDR模型(一),加入疫苗接种、政府管控、病毒变异等因素的影响
目录 一. SEIR传染病模型 二. SEIR模型的延伸--SEIDR模型 三. 模型延伸--影响因素1:疫苗接种 四. 模型延伸--影响因素2:政府管控 五. 模型延伸--影响因素3:病毒变异 写在 ...
- SEIR传染病模型Netlogo仿真程序
2019年年底,一场突如其来的传染病席卷中国湖北武汉,新型冠状病毒感染的肺炎疫情悄然蔓延,从武汉波及全国,牵动人心.受到B站某UP主仿真程序的启发,想通过计算机仿真实现一个更加真实的病毒传播仿真模型, ...
- R语言应用实战-基于R浅谈SEIR传染病模型以以及马尔萨斯,logistic模型(推导过程和源代码)
前言 关于传染病SEIR模型,接下来我们分为以下几块内容讨论:一传染病的数学模型原理,二.R语言代码实现,三.常见错误以及相关其他模型的讨论(马尔萨斯模型和logistic模型). 以下是我为大家准备 ...
- 瘟疫模拟相关知识总结(传染病模型+马尔可夫链)
瘟疫模拟相关知识总结 总览 模型 SI模型 SIS模型 SIR模型 SEIR模型 马尔可夫链 简介 理解 举个栗子 需要注意 实验设计 实验群体:人 实验思路 代码搭建(暂) 社区类(Communit ...
- Python小白的数学建模课-B6. 新冠疫情 SEIR 改进模型
传染病的数学模型是数学建模中的典型问题,常见的传染病模型有 SI.SIR.SIRS.SEIR 模型. SEIR 模型考虑存在易感者.暴露者.患病者和康复者四类人群,适用于具有潜伏期.治愈后获得终身免疫 ...
- Python学习:SIR传染病模型
SIR模型是传染病模型中最经典的一个,类似的还有SI和SIS两种.SIR是三个单词首字母的缩写,其中S是Susceptible的缩写,表示易感者:I是Infective的缩写,表示感染者,R是Remo ...
- 数学建模清风第一次直播:传染病模型和微分方程拟合
学习网址:课件下载 数学建模清风第一次直播:传染病模型和微分方程拟合 数学建模清风第二次直播:模拟退火算法 数学建模清风第三次直播:excel在数学建模中的应用 博客笔记: 数学建模清风第一次直播:传 ...
- 微分方程(人口预测与传染病模型)
一.定义 微分方程:含导数或微分的方程 微分方程的阶数:所含导数或微分的最高阶数,如y'''+2y''-2x=0是三阶微分方程 微分方程的解:使得微分方程成立的函数 例如y'-2x=0的解可以为x²或 ...
- 传染病模型(1)——SI模型及matlab详解
前言 常见的传染病模型按照具体的传染病的特点可分为 SI.SIS.SIR.SIRS.SEIR 模型.其中"S""E""I""R&q ...
- 基于SEIR微分方程模型对疫情传播的简单预测
目录 一.模型的建立 传染病模型概念 模型假设 SEIR模型 模型中涉及的函数S(t).E(t).I(t).R(t) 更改后的微分方程 二.模型的求解 三.模型的缺点 祝语 随着疫情的再次爆发,全国疫 ...
最新文章
- Linux环境安装卸载JDK以及安装Tomcat和发布Java的web程序
- 操作系统学习:系统调用与Linux0.12初始化详细流程
- 教你用PyTorch实现“看图说话”(附代码、学习资源)
- 数据结构 - 把二元查找树转变成排序的双向链表(C++)
- 关于JS中的JSON
- linux c程序中获取shell脚本输出
- 数据中心传输需求成以太网市场巨大推动力
- origin画图_3分钟浏览,Origin绘图中的12个经典问题集锦,早看早知道,躲坑没烦恼!!!...
- linux操作系统基础与实训教程,清华大学出版社-图书详情-《Linux操作系统基础与实训教程》...
- 电脑计算机软件硬盘不足,磁盘空间不足-电脑在运行程序的时候,总是要弹出磁盘空间不足,是什么原因造成磁盘? 爱问知识人...
- 中兴通讯徐子阳:不破不立 用“加减乘除”建理想5G
- common java socket,JAVA I/O(四)网络Socket和ServerSocket
- Verilog HDL中使用系统任务 $readmemh遇到问题及解决方法
- angular2学习笔记之服务和http
- java微服务实战.pdf_Spring微服务实战 ([美]约翰·卡内尔) 中文完整pdf扫描版[172MB]...
- Chrome常用插件和油猴(Tampermonkey)脚本使用及常用脚本分享(网盘)
- 高通平台文档下载【学习笔记】
- xml中外部引用DTD文档
- 分布式数据库原理解析
- 百度地图 获取经纬度为4.9E-324
热门文章
- 带通 带阻滤波器 幅频响应_方程推导:二阶有源带通滤波器设计!(内附教程+原理图+视频+代码下载)...
- 尚学堂马士兵Oracle教程笔记
- 数据结构与算法分析:C语言描述(原书第2版) PDF+源代码+习题答案
- 5G网络能力开放的“接头人“——NEF
- delphi中panel控件应用
- Struts 2拦截器
- Linux Shell基础教程
- 网管必备知识全套=做为一个网管必备的基础知识
- 非线性系统的神经网络控制(常用介绍)--理论
- JS+CSS实现幻灯片