关于疫情风险研判的传统模型以及扩展研究

关于疫情风险研判的传统模型以及扩展研究

        最近在看司守奎老师的《python数学实验与建模》一书,在完成课后习题的过程中,接触到到关于疫情预测的问题,要求对SIR模型进行改进。很有意思,尝试实现了一下,如有错误,皆可批评指正。

一、传统模型介绍

        SIR模型,只是一种简单的疫情预测模型,针对这种模型的改进也较多,最著名的便是SEIR模型。SEIR模型增加了一种人群类型,即暴露者(潜伏者)类型(E类),模型整体变化规律为:S-->E-->I-->R,(易感者-->潜伏者-->感染者-->免疫者)。假设人群变化除了递进以及结束,其它互不影响,不存在环状交替。

        符号说明:

S(t)

易感人群 E(t) 潜伏人群
I(t) 感染人群 R(t) 免疫人群
β 单位时间内平均传播人数 N 地区总人口数
C 平均潜伏周期 D 平均传染周期

        建模如下:

             dS/dt = -(β*I(t))*(S(t)/N)           (易感人数的变化)

             dE/dt = β*I(t)*S(t)/N-1/C*E(t)   (潜伏人数变化率 = 新增加潜伏感染人数-潜伏转确诊人数)

             dI/dt = 1/C*E(t)-1/D*I(t)           (感染人数的变化 = 潜伏转确诊人数-治愈人数)

             dR/dt = 1/D*I(t)                        (康复者人数变化)

             N = S+E+I+R                            (总的人数限定)

       其中:(1)β/N 可以用λ替代,λ表示平均传染接触率

                   (2)1/C 可以用a来替代,a表示平均发病比例

                   (3)1/D 可以用μ来替代,μ表示平均治愈比例

       最终可简化模型为:

 dS/dt = -λSI     S(0) = s0

 dE/dt = λSI-aE   E(0) = e0

 dI/dt = aE-μI    I(0) = i0

 dR/dt = μI

        经过网络以及文献资料可知,SEIR模型并没有解析解,只有数值解,所以可以尝试给与初值,来求得不同时间点的疫情发生情况。

二、传统模型求解与分析

        设该地区共有10000人,使用365天作为一个周期,单个体平均传播人数为3,潜伏周期为14天,传染周期为14天。

        使用python以及scipy、numpy、和matploylib库完成。具体实现代码如下:

import numpy as np
from scipy.integrate import odeint
import matplotlib.pyplot as plt
N = 10000
S_0 = 10000-1  #初始存在一个感染者,则剩下来的都是易感者
E_0 = 1   #初始存在1一个潜伏者
I_0 = 1     #初始存在感染者
R_0 = 0       #初值不存在康复者
#使用365天作为一个周期,单个体平均传播人数为3,潜伏周期为14天,传染周期为14天
t_max = 365
lamda = 3/10000 #λ平均传染接触率
aerf = 1/14#a平均每天发病比例
mu = 1/14 #μ平均每天治愈比例
def SIER(y,t):
    s = y[0]
    e = y[1]
    i = y[2]
    r = y[3]
    return  -lamda*s*i, lamda*s*i-aerf*e,aerf*e-mu*i,mu*i
t = np.linspace(0,365,t_max+1)#获得101个数据点
initial = (S_0,E_0,I_0,R_0)
ySEIR = odeint(SIER,initial,t)
print(ySEIR)
plt.plot(t, ySEIR[:,0], '--', color='darkviolet', label='S(t)-SIR')
plt.plot(t, ySEIR[:,1], '-.', color='orchid', label='E(t)-SIR')
plt.plot(t, ySEIR[:,2], '-', color='m', label='I(t)-SIR')
plt.plot(t, ySEIR[:,3],  color='r', label='R(t)-SIR')
plt.legend(loc = 'best')
plt.show()

        最终实现后的图像展示如下:

关于疫情风险研判的传统模型以及扩展研究_第1张图片

        从图中可知,在20天左右易感人群降为0,即所有人都经历或已经成为了潜伏者和感染者。潜伏者和感染者分别在30天以及40天左右来到了波峰值,随后也逐渐降为0。最终所有人在150天左右完成群体免疫。

三、改进模型求解与分析

        现如今保持社交距离成为一件人际交流活动比较关注的事情,并且全国各地的疫情仍然此起彼伏。所以探究保持社交距离对于疫情防控的重要性,是一件很有意义的事情。

对于SEIR模型方程的改进其实较为简单,即控制易感人群即可。改进公式如下:

关于疫情风险研判的传统模型以及扩展研究_第2张图片

         通过替换传统SEIR模型的前两项,即可达到设计控制的数学目的,假定社交距离的变化从1到10,1表示社交限制较少,10表示最高限制等级的社交距离控制。我们较为关注S(t)以及I(t)的变化,更改上方代码之后,输出对比图像如下:

关于疫情风险研判的传统模型以及扩展研究_第3张图片

 

        由图中可见,随着社交距离的扩大,易感人群单位时间的减少量相应减少,最终的停滞量相应增加;感染人群波峰到来的时间得到了有效延后,逐渐降低了波峰的大小。总的而言,从数学层面,社交距离的保持,能够有效促进了政府以及地区抗疫的成功性。

四、总结与感受

        对于传染病模型的研究,这只是初始,甚至说入门级别。随着之后更多数学元素的加入,模型只会愈加庞大和复杂。

        慢慢积累,慢慢长大吧。

你可能感兴趣的:(传染病模型,python,经验分享)