Python实现新型冠状病毒传播模型及预测代码实例
1.传染及发病过程
⼀个健康⼈感染病毒后进⼊潜伏期(时间长度为Q天),潜伏期之后进⼊发病期(时间长度为D天),发病期之后该患者有三个可能去向,分别是⾃愈、接收隔离、死亡。
2.模型假设
潜伏期Q=7天,根据报道潜伏期为2~14天,取中间值;发病期D=10天,根据⽂献报告,WHO认定SARS发病期为10天,假设武汉肺炎与此相同;潜伏期的患者不具有将病毒传染给他⼈的能⼒;发病期的患者具有将病毒传染给他⼈的能⼒;患者在发病期之后不再具有将病毒传染他⼈的能⼒;假设处于发病期的患者平均每天密切接触1⼈,致使该⼈患病的概率为γ最初只有⼀个⼈类感染者;病情⾃然发展,没有外部⼲扰。
3.模型公式
:⼈类感染该病毒的天数
: 第N天感染该病毒并且处于发病期的患者数量
: Q天前新被感染患者,当⽇进⼊发病期的数量
:当⽇发病期满,不再具有传染能⼒的患者数量
4.模型初始值
根据假设,最初只有⼀个⼈类感染者,所以:
5.实际疫情数据
31个省区市报告新增确诊病例
⼈类感染病毒且发病的初始⽇期:根据财新⽹的报道,官⽅通报⾸例不明原因肺炎是在12⽉8⽇,考虑到确诊之前肯定已经尝试过各种⽅案⽆效后认定为不明原因肺炎,所以有理由认为该名患者在12⽉8⽇已经处于发病期末端,根据假设发病期为10天,所以可以假设该名患者在11⽉29号发病,即N=1对
应11⽉29⽇。
⽇新增发病数
近期疫情防控⼤事记:
从以上信息可以判断核酸检测试剂是在1⽉16⽇、17⽇⼤幅使⽤的,18⽇、19⽇确诊⼤量病例,因此1⽉20⽇之前的确诊病例数对模型参考意义不⼤。1⽉20⽇之后,可以认为新发病例,发病即检测。
截⾄1⽉20⽇24时,国家卫健委公告累计确诊病例291
截⾄1⽉21⽇24时,国家卫健委公告累计确诊病例440
截⾄1⽉22⽇24时,国家卫健委公告累计确诊病例571
截⾄1⽉23⽇24时,国家卫健委公告累计确诊病例830
截⾄1⽉24⽇24时,国家卫健委公告累计确诊病例1287
所以:
1⽉21⽇新增确诊病例:440-291=1491⽉22⽇新增确诊病例:571-440=1311⽉23⽇新增确诊病例:830-571=2591⽉24⽇新增确诊病例:1287-830=457
考虑到:
1⽉20⽇之后发病即检测确诊检测⽤时2⽇国外新增病例在个位数,且不能保证发病即检测等因素,暂不考虑新增病例应该递增,所以1⽉22⽇新增数据异常,舍去
使⽤上溯每⽇新增数据,同时考虑到确诊需要2天,可以得到:
, ,
(对应11⽉29⽇)
6.拟合确定
根据近期每⽇新增数据、模型初始值及模型公式,⽤最⼩⼆乘拟合得到
7.预测
患者数量:根据上⽂确定的模型及参数,从11⽉29⽇(N=1)⾄1⽉27⽇(N=60)⼈中累计处于发病期的⼈数如下图所⽰:
根据模型,近期⼈中患者数量计算如下:
⼈中感染了病毒并处于发病期的患者数量,注意Pn⼀般需要延期2⽇才能确诊
每⽇新增患者数量:
根据模型,近期⼈中每⽇新增患者数量计算如下:
注意:图中是⼈中新增发病患者数量,可与晚2⽇的政府发布新增数量进⾏对⽐。即22⽇新增患者数量可与24⽇政府发布的新增病例进⾏对⽐。截⾄⽬前模型计算22⽇新增为369⼈,政府公布的24⽇新增病例457⼈
根据以上模型预计未来⼏⽇的情况如下:
1⽉25⽇将新确诊432例,⼈中发病患者为4068⼈;
1⽉26⽇将新确诊505例,⼈中发病患者为4759⼈;
1⽉27⽇将新确诊590例,⼈中发病患者为5568⼈;
1⽉28⽇将新确诊691例,⼈中发病患者为6514⼈;
1⽉29⽇将新确诊809例,⼈中发病患者为7621⼈。
由于1⽉20⽇之后采取的各种措施,将导致发病期D下降,感染概率下降,1⽉29⽇之后⽇均增长势头会减弱。
8.模型代码
import numpy as np
import matplotlib.pyplot as plt
gamma = 0.55
Q = 7
D = 10
P = np.zeros(300, dtype=np.float)
Psum = np.zeros(300, dtype=np.float)
for i in range(Q):
P[i] = 1
for j in range(300-Q):
P[j+Q] = P[j+Q-1]+P[j]*gamma
if j+Q-D-Q >= 0:
P[j+Q] -= P[j+Q-D-Q]*gamma
if j+Q == D:
P[j+Q] -= 1
plt.xlabel("N")
plt.ylabel("PN")
plt.plot(range(1, 61), P[0:60])
plt.show()
以上就是⼩编给⼤家整理的全部内容,如果⼤家有任何补充可以联系⼩编。