python实现SI、SIS、SIR、SIRS、SEIR、SEIRS模型

article/2025/9/26 9:50:14

传染病传播模型

  • SI
  • SIS
  • SIR
  • SIRS
  • SEIR(相比较贴合新冠状病毒)
  • SEIRS

在家闲着无事,搜了一些关于传染病模型的知识,在此做个总结。

SI

最简单的SI模型首先把人群分为2种,一种是易感者(Susceptibles),易感者是健康的人群,用S表示其人数,另外一种是感染者(The Infected),人数用 I来表示。
假设:
1、在疾病传播期间总人数N不变,N=S+I
2、每个病人每天接触人数为定值

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.25
# gamma为恢复率系数
gamma = 0
# I_0为感染者的初始人数
I_0 = 1
# S_0为易感者的初始人数
S_0 = N - I_0
# 感染者每天接触人数
P = 1
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,I_0)def funcSI(inivalue,_):Y = np.zeros(2)X = inivalue# 易感个体变化Y[0] = - (P * beta * X[0] * X[1]) / N + gamma * X[1]# 感染个体变化Y[1] = (P * beta * X[0] * X[1]) / N - gamma * X[1]return YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSI,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'red',label = 'Infection',marker = '.')
plt.title('SI Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述

SIS

在SI模型基础上加入康复的概率

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.25
# gamma为恢复率系数
gamma = 0.05
# I_0为感染者的初始人数
I_0 = 1
# S_0为易感者的初始人数
S_0 = N - I_0
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,I_0)def funcSIS(inivalue,_):Y = np.zeros(2)X = inivalue# 易感个体变化Y[0] = - (beta * X[0]) / N * X[1] + gamma * X[1]# 感染个体变化Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1]return YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSIS,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'red',label = 'Infection',marker = '.')
plt.title('SIS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述

SIR

SIR是三个单词首字母的缩写,其中S是Susceptible的缩写,表示易感者;I是Infective的缩写,表示感染者;R是Removal的缩写,表示移除者。这个模型本身是在研究这三者的关系。在病毒最开始的时候,所有人都是易感者,也就是所有人都有可能中病毒;当一部分人在接触到病毒以后中病毒了,变成了感染者;感染者会接受各种治疗,最后变成了移除者。
在这里插入图片描述
该模型有两个假设条件
1.一段时间内总人数N是不变的,也就是不考虑新生以及自然死亡的人数
2.从S到I的变化速度α、从I到R的变化速度β也是保持不变的
3.移除者不再被感染

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.25
# gamma为恢复率系数
gamma = 0.05
# I_0为感染者的初始人数
I_0 = 1
# R_0为治愈者的初始人数
R_0 = 0
# S_0为易感者的初始人数
S_0 = N - I_0 - R_0
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,I_0,R_0)def funcSIR(inivalue,_):Y = np.zeros(3)X = inivalue# 易感个体变化Y[0] = - (beta * X[0] * X[1]) / N# 感染个体变化Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1]# 治愈个体变化Y[2] = gamma * X[1]return YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSIR,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'red',label = 'Infection',marker = '.')
plt.plot(RES[:,2],color = 'green',label = 'Recovery',marker = '.')
plt.title('SIR Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述

SIRS

与SIR不同在于,康复者的免疫力是暂时的,康复者会转化为易感者

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.25
# gamma为恢复率系数
gamma = 0.05
# Ts为抗体持续时间
Ts = 7
# I_0为感染者的初始人数
I_0 = 1
# R_0为治愈者的初始人数
R_0 = 0
# S_0为易感者的初始人数
S_0 = N - I_0 - R_0
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,I_0,R_0)def funcSIRS(inivalue,_):Y = np.zeros(3)X = inivalue# 易感个体变化Y[0] = - (beta * X[0] * X[1]) / N + X[2] / Ts# 感染个体变化Y[1] = (beta * X[0] * X[1]) / N - gamma * X[1]# 治愈个体变化Y[2] = gamma * X[1] - X[2] / Tsreturn YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSIRS,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'red',label = 'Infection',marker = '.')
plt.plot(RES[:,2],color = 'green',label = 'Recovery',marker = '.')
plt.title('SIRS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述

SEIR(相比较贴合新冠状病毒)

在其他模型的基础上,加入传染病潜伏期的存在,更贴合这次的新冠状病毒

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.6
# gamma为恢复率系数
gamma = 0.1
# Te为疾病潜伏期
Te = 14
# I_0为感染者的初始人数
I_0 = 1
# E_0为潜伏者的初始人数
E_0 = 0
# R_0为治愈者的初始人数
R_0 = 0
# S_0为易感者的初始人数
S_0 = N - I_0 - E_0 - R_0
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,E_0,I_0,R_0)def funcSEIR(inivalue,_):Y = np.zeros(4)X = inivalue# 易感个体变化Y[0] = - (beta * X[0] * X[2]) / N# 潜伏个体变化(每日有一部分转为感染者)Y[1] = (beta * X[0] * X[2]) / N - X[1] / Te# 感染个体变化Y[2] = X[1] / Te - gamma * X[2]# 治愈个体变化Y[3] = gamma * X[2]return YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSEIR,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'orange',label = 'Exposed',marker = '.')
plt.plot(RES[:,2],color = 'red',label = 'Infection',marker = '.')
plt.plot(RES[:,3],color = 'green',label = 'Recovery',marker = '.')plt.title('SEIR Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述

SEIRS

同时有潜伏期且免疫暂时的条件

import scipy.integrate as spi
import numpy as np
import matplotlib.pyplot as plt# N为人群总数
N = 10000
# β为传染率系数
beta = 0.6
# gamma为恢复率系数
gamma = 0.1
# Ts为抗体持续时间
Ts = 7
# Te为疾病潜伏期
Te = 14
# I_0为感染者的初始人数
I_0 = 1
# E_0为潜伏者的初始人数
E_0 = 0
# R_0为治愈者的初始人数
R_0 = 0
# S_0为易感者的初始人数
S_0 = N - I_0 - E_0 - R_0
# T为传播时间
T = 150# INI为初始状态下的数组
INI = (S_0,E_0,I_0,R_0)def funcSEIRS(inivalue,_):Y = np.zeros(4)X = inivalue# 易感个体变化Y[0] = - (beta * X[0] * X[2]) / N + X[3] / Ts# 潜伏个体变化Y[1] = (beta * X[0] * X[2]) / N - X[1] / Te# 感染个体变化Y[2] = X[1] / Te - gamma * X[2]# 治愈个体变化Y[3] = gamma * X[2] - X[3] / Tsreturn YT_range = np.arange(0,T + 1)RES = spi.odeint(funcSEIRS,INI,T_range)plt.plot(RES[:,0],color = 'darkblue',label = 'Susceptible',marker = '.')
plt.plot(RES[:,1],color = 'orange',label = 'Exposed',marker = '.')
plt.plot(RES[:,2],color = 'red',label = 'Infection',marker = '.')
plt.plot(RES[:,3],color = 'green',label = 'Recovery',marker = '.')plt.title('SEIRS Model')
plt.legend()
plt.xlabel('Day')
plt.ylabel('Number')
plt.show()

在这里插入图片描述


http://chatgpt.dhexx.cn/article/YGvnT4ch.shtml

相关文章

流行病模型(SIR Model)

流行病模型(SIR Model) by : ZhuoFei, Zhou 首先定义一个函数bernoulli(p) #以概率p判断是否会被感染或恢复 function bernoulli(p::Number)if rand(1)[1] < preturn trueelsereturn falseend endbernoulli (generic function with 1 method)恢复所需的时间函数recovery_…

SIR模型与R模拟

SIR病毒模型R模拟 文章目录 SIR病毒模型R模拟[toc]1.SIR病毒模型2.R模拟 1.SIR病毒模型 SIR病毒模型的的三个字母分别为病毒传播过程中的三种状态&#xff0c;其中 S&#xff0c;表示易感染者&#xff0c;即没有被感染病毒的人群I&#xff0c;表示已感染者&#xff0c;即被感…

【python】SIR模型实现

SIR模型python实现 SIR模型是传染病模型中最经典的模型&#xff0c;其中S表示易感者&#xff0c;I表示感染者&#xff0c;R表示恢复者。SIR模型中&#xff0c;染病人群为传染的源头,他通过一定的几率把传染病传给易感人群,他自己也有一定的几率/可以被治愈并免疫,或者死亡;易感…

传染病模型(3)——SIR模型及matlab运行结果

前言 常见的传染病模型按照具体的传染病的特点可分为 SI、SIS、SIR、SIRS、SEIR 模型。其中“S”“E”“I”“R”的现实含义如下&#xff1a; S (Susceptible)&#xff0c;易感者&#xff0c;指缺乏免疫能力健康人&#xff0c;与感染者接触后容易受到感染&#xff1b; E (Exp…

关于SIR模型性质的进一步摘录

1 SIR模型的性质 又是成为SIR搬运工的一天。以下内容来自陈卫老师在《大数据网络传播模型和算法》。纯纯自我记录&#xff0c;不够美观不够细致&#xff0c;不喜欢看出门左拐。 1.1 SIR模型中的basic reproduction rate&#xff08;基础再生数&#xff09; R 0 R_0 R0​ 它是…

SIR模型II

SIR II (Epidemic modeling) by Zhuofei(fregoticloud.com) jupyter notebook link 在这个模型中&#xff0c;考虑一个在一定空间内的流行病模型。人只能与附近的人交互作用&#xff0c;所以给人在一定的空间里随机运动。 首先&#xff0c;在一个2维平面&#xff0c;随机游走&…

SIR信息传播模型

SIR信息传播模型 SIR模型及python复现SIR模型SIR数学模型传播动力学方程python实现 模拟社交网络中SIR模型的信息传播过程 SIR模型及python复现 SIR模型 SIR模型是传染病模型中的经典模型&#xff0c;可以用在传染病过程中的模拟预测&#xff0c;也可以用作抽象表达社交网络中…

SIR模型 matlab模拟

需要一个单独的m文件&#xff1a; %即写上三个微分方程 function ySIRModel(t,x,lambda,mu) y[-lambda*x(1)*x(2),lambda*x(1)*x(2)-mu*x(2),mu*x(2)]; 再进行作图 >> ts0:1:100; >> lambda0.00001; >> mu1/14; >> x0[45400,2100,2500]; >> […

SIR及SEIR建模的简单示例

目录 概述1.一些定义1.1 一些名词1.2 一些符号1.3 一些定义 2.方法论2.1 SIR2.2 SEIR2.3 代际传播2.3.1 传播矩阵 3 模型实现3.1 参数设定3.2 SIR&#xff08;1&#xff09;模型&#xff08;2&#xff09;参数&#xff08;3&#xff09;计算&#xff08;4&#xff09;绘图 3.3 …

SIR模型python实现

python新手&#xff0c;代码不规范之处敬请见谅&#xff0c;第一次发帖排版也不太懂&#xff0c;各位将就看。 参考&#xff1a; SIR模型和Python实现_阿丢是丢心心的博客-CSDN博客_sir模型 【保姆级教程】使用python实现SIR模型&#xff08;包含数据集的制作与导入及最终结…

SI,SIS,SIR,SEIRD模型

SI&#xff0c;SIS&#xff0c;SIR&#xff0c;SEIRD模型 因为个人工作需要系统地整理SI&#xff0c;SIR以及SEIR模型&#xff0c;故对三个模型进行原理介绍以及对比。文中关于SI&#xff0c;SIS&#xff0c;SIR的所有的截图都来自西工大肖华勇老师在慕课上的分享&#xff0c;…

【数学建模】传染病SIR模型

SIR模型 经典的SIR模型是一种发明于上个世纪早期的经典传染病模型&#xff0c;此模型能够较为粗略地展示出一种传染病的发病到结束的过程&#xff0c;其核心在于微分方程&#xff0c;其中三个主要量S是易感人群&#xff0c;I是感染人群&#xff0c;R是恢复人群 这三个量都是跟…

SIR模型简单了解(Susceptible Infected Recovered Model)

SIR模型定义 SIR模型是一种传播模型&#xff0c;是信息传播过程的抽象描述。 SIR模型是传染病模型中最经典的模型&#xff0c;其中S表示易感者&#xff0c;I表示感染者&#xff0c;R表示移除者。 S&#xff1a;Susceptible&#xff0c;易感者 I&#xff1a;Infective&#xf…

【保姆级教程】使用python实现SIR模型(包含数据集的制作与导入及最终结果的可视化)

目录 一、SIR模型介绍 二、Python实现SIR模型 1.制作自己的数据集的两种方法&#xff08;csv格式&#xff09; &#xff08;1&#xff09;excel转为csv格式 &#xff08;2&#xff09;通过python对csv格式文件进行内容修改 2.导入数据集 &#xff08;1&#xff09;具体代码如下…

SIR模型和Python实现

一、SIR模型介绍 SIR模型时传染病中最基础最核心的模型&#xff0c;研究的是某个封闭地区的疫情传播规律。 SIR模型的动力学关系如下图&#xff1a; 健康人数S的变化与 健康人数S和正感人数I的乘积&#xff08;代表健康人数和正感人数的接触&#xff09;成正比&#xff0c;其…

SIR传染病模型(微分方程系列1)

一&#xff1a;基本参数 SIR模型是常见的一种描述传染病传播的数学模型&#xff0c;其基本假设是将人群分为以下三类&#xff1a; S:(Susceptible):易感人群&#xff0c;指未得病者&#xff0c;但缺乏免疫能力&#xff0c;与感病者接触后容易受到感染。 I:(Infective):患病人…

【整站下载器】小飞兔整站下载V5.0

小飞兔整站下载是一款只需输入一个网址就能下载一个网站的软件&#xff0c;它可以从Internet的任何地方抓回你想要的任何文件&#xff0c;整站下载主要是用来快速搭建网站、深层分析网站、网站克隆等。

【小飞兔整站下载】整站下载器哪个好用_整站下载工具哪个好

小飞兔整站下载是一款可以下载整个网站内容的软件&#xff0c;你只要输入一个网址&#xff0c;软件能自动分析网站链接、图片、样式、文件等资源&#xff0c;并能将整个网站下载到本地&#xff0c;能在本地正常跳转、浏览。 官网&#xff1a;https://xft.fzxgj.top/ 直接上图…

快速获取一个网站的所有资源,图片,html,css,js等等

今天介绍一款软件,可以快速获取一个网站的所有资源,图片,html,css,js… 以获取某车官网为例 我来展示一下这个软件的功能. 1、输入网站地址 2、下载文件 到此,爬取网站就结束了,有些网站的资源使用的是国外的js,css,速度会有些差异,但效果都是一样的.爬取下来就能使用.放…

小飞升值记——(5)

目录 一&#xff1a;学习痕迹 二&#xff1a;学习结语 一&#xff1a;学习痕迹 二&#xff1a;学习结语 1.注意断句 2.注意refill的读音&#xff0c;重音在后面