共计 1402 个字符,预计需要花费 4 分钟才能阅读完成。
最近看到在网上传的一张 SIR 传染病模型的图,很多人应该对这个模型不是很理解,明天就讲一下这个模型。这一篇只讲学术,不探讨别的。
SIR 模型是传染病模型中最经典的一个,相似的还有 SI 和 SIS 两种。SIR 是三个单词首字母的缩写,其中 S 是 Susceptible 的缩写,示意易感者;I 是 Infective 的缩写,示意感染者;R 是 Removal 的缩写,示意移除者。 这个模型自身是在钻研这三者的关系。在病毒最开始的时候,所有人都是易感者,也就是所有人都有可能中病毒;当一部分人在接触到病毒当前中病毒了,变成了感染者;感染者会承受各种医治,最初变成了移除者。 这三者的关系如下图所示:
在病毒最开始的时候 S =N,而后 S 以每天 α 的速度变到 I,I 又以每天 β 的速度变到 R,不同时刻 t 下这三者的关系为:
N(t) = S(t) + I(t) + R(t) | |
S(t+1) = S(t) - αS(t) | |
I(t+1) = I(t) - βI(t) | |
R(t+1) = R(t) + βI(t) |
如果咱们想要获取某个工夫 t 对应的 S、I、R 人数,须要晓得 α 和 β 值,以及 S0 和 I0 值。这个模型能够利用 Python 实现,具体代码如下:
%matplotlib inline | |
import scipy.integrate as spi | |
import numpy as np | |
import pylab as pl | |
alpha=1.4247 | |
beta=0.14286 | |
TS=1.0 #察看距离 | |
ND=70.0 #察看完结日期 | |
S0=1-1e-6 #初始易感人数 | |
I0=1e-6 #初始感化人数 | |
INPUT = (S0, I0, 0.0) | |
def diff_eqs(INP,t): | |
'''The main set of equations''' | |
Y=np.zeros((3)) | |
V = INP | |
Y[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.subplot(111) | |
pl.plot(RES[:,0], '-g', label='Susceptible') | |
pl.plot(RES[:,1], '-r', label='Infective') | |
pl.plot(RES[:,2], '-k', label='Removal') | |
pl.legend(loc=0) | |
pl.title('SIR_Model') | |
pl.xlabel('Time') | |
pl.ylabel('Numbers') | |
pl.xlabel('Time') |
最初运行下面的代码能够失去如下后果图,下面这张图示意了随着工夫 t 的变动 S、I、R 人数的一个变化趋势。
这个模型有两个假如条件:
1. 一段时间内总人数 N 是不变的,也就是不思考新生以及天然死亡的人数
2. 从 S 到 I 的变动速度 α、从 I 到 R 的变动速度 β 也是放弃不变的
在理论环境中下面的两个假如个别是不太容易满足的,所以得进去的后果会和理论数据有偏差。
正文完