关于算法:统计科学之最近疯传的SIR传染病模型是什么

最近看到在网上传的一张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的变动速度β也是放弃不变的

在理论环境中下面的两个假如个别是不太容易满足的,所以得进去的后果会和理论数据有偏差。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理