SI模型

在经典的传染病模型中,种群(Population)内N个个体的状态可分为如下几类:
**易感状态(Susceptible):**一个个体在感染前是处于易感状态的,即该个体有可能被邻居个体感染。
**感染状态I(Infected):**一个感染上某种病毒的个体就称为是处于感染状态。,即该个体还会以一定概率感染其邻居个体。
**移除状态(Remove,Refractory或者Recovered):**也成为免疫状态或恢复状态,当一个个体经历过一个完整的感染周期后,该个体就不再被感染,因此就可以不再考虑改革提。
SI传播模型是最简单的疾病传播模型,模型中的所有个体都只可能处于两个状态中的一个:即易感(S)状态或感染(I)状态。
SI模型中的个体一旦被感染后就永远处于感染状态。
在给定时刻t,令S(t)与I(t)分别代表该时刻处于易感和感染状态的个体数目,显然有
S(t)+I(t)恒等于N,这里,N是个体总数。随着时间t的增长,易感个体与感染个体的接触会导致感染个体数量的增加。加入由于个体之间的接触而导致疾病传播的概率为β,疾病仅在感染个体和易感个体之间进行接触时才会以概率β将疾病传染给易感个体。在时刻t,易感个体的比例为S(t)/N,感染个体的数量为I(t),一次,易感个体的数量将以如下变化率减少
ds/dt = -β*S(t)I(t)/N
同时,感染个体的数量会以与易感个体相反的变化率增加,
ds/dt = βS(t)*I(t)/N
分别将时刻t处于易感状态和感染状态的个体所占比例记为,
s(t)=S(t)/N
i(t)=I(t)/N
显然有,
s(t)+i(t)恒等于1,此时之前的公式可以记做
ds/dt=-βsi
di/dt=βsi
即 di/dt=βi(1-i)


```python
def diff_eqs1(INP,t):Y=np.zeros((2))V = INPY[0] = - beta * V[0] * V[1] + gamma * V[1]Y[1] = beta * V[0] * V[1] - gamma * V[1]return Y
t_start = 0.0
t_end = ND
t_inc = TS
t_range = np.arange(t_start, t_end+t_inc, t_inc) #生成日期范围
RES = spi.odeint(diff_eqs1,INPUT,t_range)pl.plot(RES[:,0], 'b', label='易感者')
pl.plot(RES[:,1], 'r', label='传染者')
pl.legend(loc=0)
pl.title('SI-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数比例')
pl.savefig('SI-nCoV 传播时间曲线.png', dpi=900)
pl.show()

SIS模型

在SI模型基础上加入康复的概率,即治愈率
S:易感者
I:感染者
a:感染率
b:治愈率
条件:
1、在疾病传播期间总人数N不变, N=S+I
2、每个病人每天接触人数为定值
3、病人每天治愈率定值

```python
beta=1.4247
gamma=0.14286
I0=1e-6
ND=70
TS=1.0
INPUT = (1.0-I0, I0)
def diff_eqs2(INP,t):Y=np.zeros((2))V = INPY[0] = - beta * V[0] * V[1] + gamma * V[1]Y[1] = beta * V[0] * V[1] - gamma * V[1]return Y
t_range = np.arange(t_start, t_end+t_inc, t_inc)
RES = spi.odeint(diff_eqs2,INPUT,t_range)
pl.plot(RES[:,0], '-b', label='易感者')
pl.plot(RES[:,1], '-r', label='传染者')
pl.legend(loc=0)
pl.title('SIS-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数比例')
pl.savefig('SIS-nCoV 传播时间曲线.png', dpi=900) # This does increase the resolution.
pl.show()

SIR模型

S:易感者
I:感染者
R:移除者

alpha=0.000004
beta= 0.1
TS=1.0 #观察间隔
ND=120.0 #观察结束日期
S0=100000 #初始易感人数
I0=10 #初始感染人数
INPUT = (S0, I0, 0.0)
def diff_eqs(INP,t):Y=np.zeros((3))V = INPY[0] = - alpha * V[0] * V[1]Y[1] = alpha * V[0] * V[1] - beta * V[1]Y[2] = beta * V[1]return Y
t_start = 0.0
t_end = ND
t_inc = TS
t_range = np.arange(t_start, t_end+t_inc, t_inc) #生成日期范围
RES = spi.odeint(diff_eqs,INPUT,t_range)
pl.plot(RES[:,0], '-g', label='易感者')
pl.plot(RES[:,1], '-r', label='传染者')
pl.plot(RES[:,2], '-k', label='移除者')
pl.legend(loc=0)
pl.title('SIR-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数')
pl.savefig('SIR-nCoV 传播时间曲线.png', dpi=900)
pl.show()

SEIR模型

引入潜伏者
S:易感者 a:接触率
E:潜伏者 b:感染率
I:感染者 i: 转病率
R:康复者 r:治愈率
D:死亡者 k:病死率
微分方程为:

def calc(T):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])

全部python文件为:


```python
import math
import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import scipy.integrate as spi
import pylab as plplt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = Falsedef calc(T):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])
beta=1.4247
gamma=0
I0=1e-6
INPUT = (1.0-I0, I0)
def diff_eqs1(INP,t):Y=np.zeros((2))V = INPY[0] = - beta * V[0] * V[1] + gamma * V[1]Y[1] = beta * V[0] * V[1] - gamma * V[1]return Y
t_start = 0.0
t_end = ND
t_inc = TS
t_range = np.arange(t_start, t_end+t_inc, t_inc) #生成日期范围
RES = spi.odeint(diff_eqs1,INPUT,t_range)pl.plot(RES[:,0], 'b', label='易感者')
pl.plot(RES[:,1], 'r', label='传染者')
pl.legend(loc=0)
pl.title('SI-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数比例')
pl.savefig('SI-nCoV 传播时间曲线.png', dpi=900)
pl.show()   beta=1.4247
gamma=0.14286
I0=1e-6
ND=70
TS=1.0
INPUT = (1.0-I0, I0)
def diff_eqs2(INP,t):Y=np.zeros((2))V = INPY[0] = - beta * V[0] * V[1] + gamma * V[1]Y[1] = beta * V[0] * V[1] - gamma * V[1]return Y
t_range = np.arange(t_start, t_end+t_inc, t_inc)
RES = spi.odeint(diff_eqs2,INPUT,t_range)
pl.plot(RES[:,0], '-b', label='易感者')
pl.plot(RES[:,1], '-r', label='传染者')
pl.legend(loc=0)
pl.title('SIS-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数比例')
pl.savefig('SIS-nCoV 传播时间曲线.png', dpi=900) # This does increase the resolution.
pl.show()alpha=0.000004
beta= 0.1
TS=1.0 #观察间隔
ND=120.0 #观察结束日期
S0=100000 #初始易感人数
I0=10 #初始感染人数
INPUT = (S0, I0, 0.0)
def diff_eqs(INP,t):Y=np.zeros((3))V = INPY[0] = - alpha * V[0] * V[1]Y[1] = alpha * V[0] * V[1] - beta * V[1]Y[2] = beta * V[1]return Y
t_start = 0.0
t_end = ND
t_inc = TS
t_range = np.arange(t_start, t_end+t_inc, t_inc) #生成日期范围
RES = spi.odeint(diff_eqs,INPUT,t_range)
pl.plot(RES[:,0], '-g', label='易感者')
pl.plot(RES[:,1], '-r', label='传染者')
pl.plot(RES[:,2], '-k', label='移除者')
pl.legend(loc=0)
pl.title('SIR-nCoV 传播时间曲线')
pl.xlabel('时间(天)')
pl.ylabel('人数')
pl.savefig('SIR-nCoV 传播时间曲线.png', dpi=900)
pl.show()
def plot(T,S,E,I,R):plt.figure()plt.title("SEIR-nCoV 传播时间曲线")plt.plot(T,S,color='r',label='易感者')plt.plot(T, E, color='k', label='潜伏者')plt.plot(T, I, color='b', label='传染者')plt.plot(T, R, color='g', label='移除者')plt.grid(False)plt.legend()plt.xlabel("时间(天)")plt.ylabel("人数")pl.savefig('SEIR-nCoV 传播时间曲线.png', dpi=900)plt.show()
if __name__ == '__main__':N = 100000  # 人口总数E = []  # 潜伏携带者E.append(0)I = []  # 传染者I.append(1)S = []  # 易感者S.append(N - I[0])R = []  # 康复者R.append(0)r = 20  # 传染者接触人数b = 0.03  # 传染者传染概率a = 0.1  # 潜伏者患病概率r2 = 30  # 潜伏者接触人数b2 = 0.03  # 潜伏者传染概率y = 0.1  # 康复概率T = [i for i in range(0, 120)]  # 时间calc(T)plot(T,S,E,I,R)

改进SEIR1

结合现实:
1、武汉疫情12月30日发现第一例疫情患者,1月23日开始封城,第25天时对应减少模型的病者的日接触人数,作为采取隔离措施的体现。
2、将潜伏者与患病者的转染易感者的概率与日接触人数分开为两个参数。


改进SEIR模型2

1.引入潜伏者转阴率
2.武汉医院增多,康复率增加



接触过患者的潜伏者明显下降,在之后的约半个月后疫情到达拐点,患病人数峰值约为6万,随后疫情得到控制。

改进SEIR模型3

1.引入迁徙系数,迁入迁出率。

待续。。。

新型冠状病毒传染模型SI、SIS、SIR、SEIR相关推荐

  1. SIR传染模型Matlab代码,sir传染病模型 MATLAB代码运行不了,

    问题描述: sir传染病模型 MATLAB代码运行不了, function y=ill(t,x) a=1;b=0.3; y=[a*x(1)*x(2)-b*x(1),-a*x(1)*x(2)]'; ts ...

  2. 万物皆可建模,来点不一样的知识,新型冠状病毒肺炎的传播预测模型

    前言 随着疫情的不断发展,影响范围不断扩大,波及人数不断增加,此次由冠状病毒引发的病毒性肺炎(COVID-19)已在 2020 年 3 月 12 日被世界卫生组织(WHO)宣布为是一种大流行病.但到目 ...

  3. 基于BiGRU-Attention网络的 新型冠状病毒肺炎疫情预测学习记录

    **摘要:**对新型冠状病毒肺炎疫情的准确预测能为疫情防控政策的制定提供重要依据,为此提出基于双向门控循环单元(BiGRU)和注意力机制(AttentionMechanism)的预测模型.考虑到新冠肺 ...

  4. 新型冠状病毒个人防护报告:如何过个安全健康年?

      岁末年初,新型冠状病毒感染疫情牵动国人神经. 1月20日凌晨,武汉市卫健委.北京大兴区卫健委.广东省卫健委接连发布新型冠状病毒肺炎情况. 疫情发展引发大众关注,相关防护产品随之紧俏.尤其是居家出行 ...

  5. 新型冠状病毒传播规律离散微观模型(结果与实际情况一致)-附源码

    新型冠状病毒传播规律离散微观模型 0 前言 1.模型 1.1 个体病毒感染概率计算模型 1.2 个体移动模型 1.3 求解过程 2 实例分析 2.1 正常活动传播模拟 2.2 隔离模拟 2.3 频繁活 ...

  6. 新型冠状病毒传染性有多强?何时达到疫情峰值?来看一下数学和统计建模结果...

    我是夕小瑶,一只热爱科研和AI的小狐狸 来源 | 机器之心(id: almosthuman2014) 引语:在疫情肆虐的这几天里,国内外的流行病学家.统计学家都没闲着,他们基于疫情爆发初期的一些数据建 ...

  7. 新型冠状病毒传染性有多强?何时达到峰值?来看一下数学和统计建模结果

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自机器之心. 机器之心报道 参与:张倩.杜伟 「在家待着就能为国家做贡献」其实不只是一句玩笑话.在疫情肆虐的这几天里,国内外的流行病学家.统计学 ...

  8. 转载:2019新型冠状病毒(2019-nCoV)疫情 数学模型预测

    原文链接:https://mp.weixin.qq.com/s?__biz=MzU3NTczNzI2MQ==&mid=2247484006&idx=1&sn=57d8cd06d ...

  9. 新型冠状病毒全球实时跟踪地图,多国研发疫苗,在中国或致8042例感染,爆发峰值预计2月中上旬 | 最新nCoV研究大汇总...

    导读 约翰·霍普金斯大学的全球冠状病毒实时扩散地图 新型冠状病毒溯源取得阶段性进展,武汉华南海鲜市场存在大量新型冠状病毒 多国加紧研发新型冠状病毒疫苗和治疗药物 北大课题组:新型冠状病毒中间宿主或为水 ...

最新文章

  1. # 30 天精通 RxJS (01):认识 RxJS
  2. constraint的一些用法总结
  3. 单片机蓝牙初始化_单片机程序那些事
  4. 西安python培训班多少钱-西安python正规培训机构
  5. 全球及中国洗涤剂行业十四五总体规模与盈利状况分析报告2022版
  6. VS远程调试(Visual Studio)远程连接到linux cmake(跨平台开发)(适用于VS2019,且远程目标平台cmake版本大于等于3.8)
  7. C# 打印PDF文档的10种方法
  8. Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集
  9. spark学习-SparkSQL-SparkSession与SparkContext
  10. 输入234输出432的c语言程序,C程序设计第1-4章习题集
  11. 关于div的定位属性问题
  12. 计算机设计思想 —— 解耦(分离)与内聚
  13. 微信群控系统 1.1.0注册过程详解,
  14. c++正则表达式regex_match和regex_seach使用
  15. 关于5月份BCH硬分叉,这些你应该知道
  16. php阿拉伯数字转中文人民币大写
  17. SQL入门之第十七讲——子查询
  18. Hibernate中的sessionFactory是做什么用的?
  19. cdn 中移集采_中兴通讯中标中国移动融合CDN四期集采新建项目
  20. 发表论文查重率是多少?

热门文章

  1. java固定资产设备管理系统(源码开源分享)
  2. 洛谷 UVA1395 苗条的生成树 Slim Span
  3. vant Webapp 快速使用
  4. DHCP的工作原理及过程
  5. MySQL数据库 第4章:数据库设计
  6. (附源码)计算机毕业设计SSM驾校预约考试管理系统
  7. 对于大数据、人工智能时代,我们应该如何面对?
  8. 咖啡兔流程执行逻辑分析
  9. flink的map等常用api失效(记一次许久未写flink的坑)
  10. 想搭建一个专属于你的网站吗??新手向超详细攻略