您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關Python如何實現新型冠狀病毒傳播模型及預測的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
1.傳染及發病過程
一個健康人感染病毒后進入潛伏期(時間長度為Q天),潛伏期之后進入發病期(時間長度為D天),發病期之后該患者有三個可能去向,分別是自愈、接收隔離、死亡。
2.模型假設
潛伏期Q=7天,根據報道潛伏期為2~14天,取中間值;發病期D=10天,根據文獻報告,WHO認定SARS發病期為10天,假設武漢肺炎與此相同;潛伏期的患者不具有將病毒傳染給他人的能力;發病期的患者具有將病毒傳染給他人的能力;患者在發病期之后不再具有將病毒傳染他人的能力;假設處于發病期的患者平均每天密切接觸1人,致使該人患病的概率為γ最初只有一個人類感染者;病情自然發展,沒有外部干擾。
3.模型公式
:人類感染該病毒的天數
: 第N天感染該病毒并且處于發病期的患者數量
: Q天前新被感染患者,當日進入發病期的數量
: 當日發病期滿,不再具有傳染能力的患者數量
4.模型初始值
根據假設,最初只有一個人類感染者,所以:
5.實際疫情數據
人類感染病毒且發病的初始日期:根據財新網的報道,官方通報首例不明原因肺炎是在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.rcParams['font.sans-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False plt.plot(range(1, 61), P[0:60]) plt.grid() plt.show()
感謝各位的閱讀!關于“Python如何實現新型冠狀病毒傳播模型及預測”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。