傳染病模型的基本問題
- 描述傳染病的傳播過程
- 分析受感染人數的變化規律
- 預報傳染病高潮到來的時刻
- 預防傳染病蔓延的手段
- 按照傳播過程的一般規律用機理分析方法建立模型
注:我們這裏是介紹數學醫學領域中基本的傳染病模型。不從醫學角度分析各種傳染病的特殊機理,按照傳播過程的規律建立微分方程模型.
建立模型
模型一
假設:
- 設已知感染人數爲(病人數量隨時間變化)
- 設每個病人(單位時間)每天有效接觸(足以使人治病)人數爲
模型:
單位時間內,,即
一開始的感染人數爲
解微分方程可以得到
所以可以可到當時
當然這是不可能的,因爲我們考慮的因素太少了,首先一個是,若有效接觸的是病人,則不能使病人數增加,所以必須區分已感染者(病人)和未感染者(健康人)看模型二來解決這個問題
模型二
假設:
- 將人羣分爲兩類:易感染者(Susceptible,健康人)和已感染者(Infective, 病人).
- 總人數N不變,時刻t健康人和病人所佔比例分別爲和, 有
- 每個病人每天有效接觸人數爲(日接觸率),且使接觸的健康人致病.
建模:
每天新增的總人數爲原有的人數乘以每個人可以傳染的健康的人數,再乘
除過去,兩遍N約分得到下面,
MATLAB解一下這個微分方程
y=dsolve('Dy=n*y*(1-y)','t');
y =
-1/(exp(C1 - n*t) - 1)
0
1
寫規範點就是這個函數
函數圖像大致爲
可以看出時這裏圖像的斜率有個最大值,其也就是傳染的最快的時候,即傳染病的高潮時刻,當然是可以求出來的
再看原式,當時
病人的比例爲1,當然這也是不可能的,因爲我們還沒有考慮有沒有可能治癒,看模型三
模型三
假設:
- 傳染病無免疫性如傷風、痢疾等——病人治癒成爲健康人,健康人可再次被感染。
- 病人每天治癒的比例爲 (日治癒率),爲感染期,
模型
這是減去了治癒人數之後的新增人數
爲一個感染期內每個病人的有效接觸人數,稱爲接觸數
可以畫出上面的圖形分析下
對上面的公式進行分析,可以得到,當時,對t的導數爲0這也就到了的最大值;當時,,i單調遞增,且在最大時,i的斜率最大,增速最快;當,,i是單調遞減的。
當然我們也可以畫出隨t的函數圖像
先看紅線,若初始條件,i就是單調遞減的,
若若初始條件,i就是遞增的,可以看到i對t的導數圖像有一個最大值,下面的黑線就有一個增加速率最快的一個值,按S形曲線增長
時 i肯定是單調下降的,最終降到0
綜上:
想讓患病者越來越少,必須小於等於1,即感染期內有效接觸使健康者感染的人數不超過原有的病人數.
這裏我們分析的是感染之後還能感染的情況,但有些病毒感染之後會在體內生成抗體,就不會再被感染了,下面我們分析這種情況。
模型四 SIR模型
SIR模型是常見的一種描述傳染病傳播的數學模型,其基本假設是將人羣分爲以下三類:
1 易感人羣(Susceptible):指未得病者,但缺乏免疫能力,與感病者接觸後容易受到感染。
2 感染人羣(Infective):指染上傳染病的人,他可以傳播給易感人羣。
3 移除人羣(Removed):被移出系統的人。因病癒(具有免疫力)或死亡的人。這部分人不再參與感染和被感染過程。
假設:
- 傳染病有免疫性如天花、麻疹等——病人治癒後移出感染系統,稱移出者(Removed).
- 總人數N不變,健康人、病人和移出者的比例分別爲.
- 病人的日接觸率爲 , 日治癒率爲, 接觸數
建模:
這個就是病人減去治癒的人,和上一個模型是一樣的
因爲有治癒後是有免疫性的,所以可能被感染的總人數要減少,減去移除者就是
將上式化簡爲:
(通常很小)
關於i(t) , s(t) 的非線性微分方程組,沒有解析解,只能通過數值計算得到s(t), i(t), r(t)的曲線,下面來看下曲線的數值解的MATLAB程序
這裏我們先設
也就是平均一個病人人傳染一個正常人,治癒率爲0.5;開始的病人比例爲0.01,正常人爲0.99,設沒有天生帶有病毒抗體的人,所以,之後若果病人被治癒,則具有抗體了,有抗體的人爲:
ts=0:40;
x0=[0.01, 0.99];
[t,x]=ode45('ill',ts,x0);
r=1-x(:,1)-x(:,2);
plot(t,x(:,1),t,x(:,2),ts,r),grid
legend('i(t)','s(t)','r(t)')
function y=ill( t,x)
a=1;
b=0.5;
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
可以看出:s(t)單調減,r(t)單調增,都趨於穩定, i(t)先增後減趨於0.
結果分析
先回顧一下參數
可以分析出:
- 隨着衛生健康思想水平高,接觸率變小
- 隨着醫療水平的提高,治癒率增大
- 接觸數減小——有助於控制傳播.
我們可以試試稍微減少一下,增大,來看下效果
ts=0:40;
x0=[0.01, 0.99];
[t,x]=ode45('ill',ts,x0);
r=1-x(:,1)-x(:,2);
plot(t,x(:,1),t,x(:,2),ts,r),grid
legend('i(t)','s(t)','r(t)')
function y=ill( t,x)
a=0.8;
b=0.6;
y=[a*x(1)*x(2)-b*x(1);-a*x(1)*x(2)];
綜上我們可以得出結論:想要減少傳染病的傳播,我們就要在接觸數上下功夫。
實戰建模
數據處理
首先,我用python爬蟲爬取了丁香醫生官方數據,一共5534條數據 特徵包括感染、死亡、治癒的總數,當日感染、死亡、治癒新增,疑似病例,時間,省份等14個特徵
然後用python進行數據提取,提取了較爲典型的湖北省的數據作爲我的參考依據
然後用python對數據進行清洗,提取出了患病總數,現存患者總數,死亡總數,治癒總數,時間,省份這幾個特徵
對日期格式進行修改,值保留月和日,並與死亡人數的位置交換
這裏我用python對提取的四個特徵分別進行了數據分析(主要包括計算最值,平均值等,),並把1.20日作爲第一天,7.02日作爲最後一天也就是第165天,做了可視化可視化處理。
感染人數示意圖
治癒人數示意圖
現存患者數量圖
死亡人數示意圖
經過上面的圖片與describe數據分析,我們發現有一天是異常的,患者多出了平時的十倍左右,經過查閱資料,這天因加強了檢測標準,所以增多了很多。爲了避免這個數據的影響我們選擇將這一天刪去(或者用平均數或中位數代替也可)
將上面清理過的數據存放到csv文件中
模型建立
模型假設
經過上面數據的分析,我們大體可以進行如下假設:
1.由於不存在封閉情況,考慮開放體系。
2.目前數據以天爲單位發佈,因此不考慮連續變化情況,只考慮離散的方程。
3.新型冠狀病毒的治癒人數和死亡人數相對較 小,因此只考慮 Susceptible(易感)和 Infected(感染) 兩類人羣。設易感人羣總數爲N
4.經專家鑑定新冠病毒患者治癒後至少六個月之內不會再被感染,所以設治癒後移出易感人羣。
5.設每個病人每天有效接觸人數爲 (日接觸率),且使接觸的健康人致病.
6.設病人每天治癒的比例爲 (日治癒率)
7.時刻t健康人、病人和移出者的數量分別爲 s(t), i(t), r(t).
模型一
分析可以得到移出者r(t)=治癒人數+死亡人數
通過python數據處理,我們算出了r(t)的值,並將其可視化
我用MATLAB對其進行了擬合,擬合圖像爲
分析可以得到患者 i(t)=患病總數-移出者
可以通過csv文件的currentConfirmedCount 直接獲得i(t)數據,當然也可以通過 i(t)=confirmedCountv - r(t)獲得,對此我也做了可視化展示
通過MATLAB程序對其進行擬合,可以得到r(t)的函數圖像大致爲
爲了方便,利於公式推導,我們先設時刻t健康人、病人和移出者的數量分別爲 s(t), i(t), r(t). 所以有
可以推導出每日新增病例的表達式
由以上兩個公式可以推導出以下兩個微分方程
可以知道初值
因爲一開始治癒的和死亡的肯定很少,所以r0可以看爲0,於是就有:
通過解以上微分方程我們可以根據經驗假設 (日接觸率)和 (日治癒率)的值分別爲1和0.5(也就是每個患者可能使1個正常人患病,患者可能有0.5的概率被治癒);由於一開始患者肯定比正常人少很多,所以我們設i0=0.01,s0=0.99。對其求解可以得到s(t), i(t), r(t),的變化圖像
MATLAB程序如下
ts=0:40;
x0=[0.01, 0.99];
[t,x]=ode45(‘ill’,ts,x0);
r=1-x(:,1)-x(:,2);
plot(t,x(:,1),t,x(:,2),ts,r,ts,x(:,1)/x(:,2))
legend(‘i(t)’,‘s(t)’,‘r(t)’)
function y=ill( t,x)
a=1;
b=0.5;
y=[ax(1)x(2)-bx(1);-ax(1)*x(2)];
結果分析:患病人數肯定有個高潮,但之後高潮就會減弱,並逐步降低爲0。隨着醫療衛生條件的不斷提升,患者的 (日接觸率)肯定降低, (日治癒率)肯定上升,所以我們可以把調一點爲0.8,調高一點爲0.6,可以得到以下趨勢圖。所以應對傳染病很關鍵的一點是我們要提高醫療衛生條件
模型二
實際上, (日接觸率)和 (日治癒率)都是隨着時間變化的,這裏我們設s(t), i(t), r(t) 爲第t天健康人、病人、移除者(病癒與死亡之和)的數量, s(t)+ i(t)+r(t)=N..
(t), (t) ~第t天感染率, 移除率(治癒率與死亡率之和)
有
因爲s遠大於i, r,s(t)視爲常數,所以有
取差分近似導數
我們可以先用真實數據對(t)進行展示並進行擬合
當然同樣的方法對(t)進行擬合
做不出來了,好難,光這些東西就弄了四天,到了數學建模國賽得多難多累啊,哎,讓我這個小白手足無措。畢竟還沒有正規的培訓,這個模型等期末考完試一定好好做做!!!
衝國獎
衝國獎
衝國獎