您好,登錄后才能下訂單哦!
這篇文章主要介紹python如何模擬預測一下新型冠狀病毒肺炎的數據,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
背景就不用多說了吧?本來我是初四上班的,現在延長到2月10日了。這是我工作以來時間最長的一個假期了。可惜哪也去不了。待在家里,沒啥事,就用python模擬預測一下新冠病毒肺炎的數據吧。要聲明的是本文純屬個人自娛自樂,不代表真實情況。
采用SIR模型,S代表易感者,I表示感染者,R表示恢復者。染病人群為傳染源,通過一定幾率把傳染病傳給易感人群,ta自己也有一定的幾率被治愈并免疫,或死亡。易感人群一旦感染即成為新的傳染源。
模型假設:
①不考慮人口出生、死亡、流動等情況,即人口數量保持常數。
②一個病人一旦與易感者接觸就必然具有一定的傳染力。假設 t 時刻單位時間內,一個病人能傳染的易感者數目與此環境內易感者總數s(t)成正比,比例系數為β,從而在t時刻單位時間內被所有病人傳染的人數為βs(t)i(t)。
③ t 時刻,單位時間內從染病者中移出的人數與病人數量成正比,比例系數為γ,單位時間內移出者的數量為γi(t)。
模型為
其中,β為感染系數,代表易感人群與傳染源接觸被感染的概率。γ為隔離(恢復)系數,我們對其倒數1/γ更感興趣,代表了平均感染時間(average infectious period)。S(0)為初始易感人數,I(0)為初始感染人數。
按照[1]里面的代碼模型的感染人數是這樣的
現在的問題就是利用現有的數據找到新冠肺炎的β值,γ值等數據了。先把數據拔下來吧。從[3]上扒數據,由于數據不多,就手工完成吧。保存到csv文件里。
然后把數據作圖
還有一個指標是再生數R0=β/γ,大于1時人群中大部分才被感染[4]。世衛組織1月23日的估計是R0在1.4到2.5之間[5],最新的根據前425例發病數據的估計值為2.2[6]。
文章[7]中的按一般病毒性肺炎恢復期25天計算得到的γ值為0.04。
關于β值和初始易感人群,[7]的作者采用的方法是先估計一個區間,然后用最小二乘法找到最佳參數,β≈3.57*10^-5。S[0]的范圍為5000-30000人。[7]文章里有matlab代碼,我用python改寫一下,由于對最小二乘法法的實現比較陌生,嘗試了半天,最后我決定用最笨的辦法——窮舉法。就是用兩個嵌套循環將范圍內所有β值和S0值都試一遍,計算每次嘗試結果與實際數據之間差值的平方和,平方和最小的一組β值和S0值用來做預測。代碼如下:
γ值設定為0.04,即一般病程25天
用最小二乘法估計β值和初始易感人數
gamma = 0.04 S0 = [i for i in range(20000, 40000, 1000)] beta = [f for f in np.arange(1e-7, 1e-4, 1e-7)] # 定義偏差函數 def error(res): err = (data["感染者"] - res)**2 errsum = sum(err) return errsum # 窮舉法,找出與實際數據差的平方和最小的S0和beta值 minSum = 1e10 minS0 = 0.0 minBeta = 0.0 bestRes = None for S in S0: for b in beta: # 模型的差分方程 def diff_eqs_2(INP, t): Y = np.zeros((3)) V = INP Y[0] = -b * V[0] * V[1] Y[1] = b * V[0] * V[1] - gamma * V[1] Y[2] = gamma * V[1] return Y # 數值解模型方程 INPUT = [S, I0, 0.0] RES = spi.odeint(diff_eqs_2, INPUT, t_range) errsum = error(RES[:21, 1]) if errsum < minSum: minSum = errsum minS0 = S minBeta = b bestRes = RES print("S0=%d beta=%f minErr=%f" % (S, b, errsum)) print("S0 = %d β = %f" % (minS0, minBeta))
結果 S0 = 39000, β = 8e-6
上述程序耗時較長,只在探索時執行,完了就注釋掉,用最優參數進行預測。
以上是“python如何模擬預測一下新型冠狀病毒肺炎的數據”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。