生物计算:SIR模型笔记

1SIR模型

susceptible(易受感染的但没有被感染的)

infected(感染的)

recovered(恢复并免疫了的)

1.1  状态定义

第t天:

状态为S的人数 x(t)
状态为I的人数 y(t)
状态为R的人数 z(t)
总人数 N

1.2 SIR方程

这是一种形式的SIR,实际上还有很多种。

生物计算:SIR模型笔记_第1张图片

1.2.1 SIR方程解释

假设每天每个S状态的人(易受感染的但没有被感染的人)和其他m个人有关联

在第t天, 总体感染人的比例为\frac{y(t)}{N}

——>对于每一个S状态的人的这m个有关联的人里面,有m \times \frac{y(t)}{N} 个人是感染了的

而第t天一共有x(t)个状态是S的人

——>在第t天,所有状态为S的人的x(t) × m个有关联的人里面,有(x(t) \times m) \times \frac{y(t)}{N}个人是感染了的(这个数量不一定等于状态为I的人的数量,甚至可能比状态为I的人的数量多。因为一个感染的人可能和多个状态为S的人有关联)

假设每一个“有关联”的感染者使被关联的S状态的人被感染的概率是p

——>在第t天,新增感染者的数量为p \times [(x(t) \times m) \times \frac{y(t)}{N}]

我们令mp=β,β称之为感染接触率

那么对于S状态的人我们就有:

\frac{dx(t))}{dt}=- \frac{\beta}{N}x(t)y(t)

同时,我们令恢复率为r(也即是每天有r比例的感染者康复)

那么对于I和R状态的人我们又有:

\frac{dy(t)}{dt}=\frac{\beta}{N}x(t)y(t)-\gamma y(t)

\frac{dz(t)}{dt}=\gamma y(t)

1.3 用python实现SIR

1.3.1 导入库

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt

1.3.2 数据定义

N=1000                    #总人口
I0=1                      #一开始的感染人口
R0=0                      #一开始的治愈(免疫)人口
S0=N-I0-R0                #一开始的易感染人口
beta=0.2                  #感染接触率β
gamma=0.1                 #恢复率
t=np.linspace(0,159,160)  #设置时间片段为160天

1.3.3 SIR模型定义

生物计算:SIR模型笔记_第2张图片

def sir(y,t,N,beta,gamma):
    S,I,R=y
    dS_dt=-beta*S*I/N
    dI_dt=beta*S*I/N-gamma*I
    dR_dt=gamma*I
    return(dS_dt,dI_dt,dR_dt)
#SIR常微分方程

1.3.4 进行SIR的常微分方程计算

y0=(S0,I0,R0)
#初始化参数

ret=odeint(sir,y0,t,args=(N,beta,gamma))
ret.shape
#(160, 3)

S=ret[:,0]
I=ret[:,1]
R=ret[:,2]

1.3.5 结果可视化

plt.rcParams['font.sans-serif']=['SimHei']
#用来正常显示中文

plt.rcParams['axes.unicode_minus']=False
#用来正常显示负号

plt.plot(t,S,color='b',label='易感人群')
plt.plot(t,I,color='r',label='感染人群')
plt.plot(t,R,color='g',label='康复/免疫人abs')

plt.xlabel('天数,单位:天')
plt.ylabel('人数,单位:人')
#设置横纵轴标题

plt.legend()
#显示标签
plt.show()

生物计算:SIR模型笔记_第3张图片

2 SEIR

1、S 类,易感者 (Susceptible),指未得病者,但缺乏免疫能力,与感染者接触后容易受到感染;

2、E 类,暴露者 (Exposed),指接触过感染者,但暂无能力传染给其他人的人,对潜伏期长的传染病适用;

3、I 类,感病者 (Infectious),指染上传染病的人,可以传播给 S 类成员,将其变为 E 类或 I 类成员;

4、R 类,康复者 (Recovered),指被隔离或因病愈而具有免疫力的人。如免疫期有限,R 类成员可以重新变为 S 类。

你可能感兴趣的:(其他,python)