我们不用很麻烦就可以理解传染病

一只鲨鱼🦈 2020-04-12 20:41:32

刚刚开始玩Anylogic,发现教程里有SEIR模型,就按照教程建立了一个,还挺好玩的。


全文分为7部分

1.简单的SIR模型

2.在Anylogic中建模SEIR模型

3. 群体免疫的数学表达和模型展示

4.不同的Re代表了什么

5.给模型增加隔离条件

6.给模型增加死亡和ICU条件

7.可能一劳永逸的消灭传染病么

(一)最简单的SIR模型

理想情况下,传染病是以一定恒定的效率在人群中传播的,1个人传染给2个人,这两个人又分别再去感染2个人。这个传播的指数就是在传染病中最重要的概念基本再生数R0。这是一个关于这个疾病的自然参数,由感染率(接触一个病人多大几率会被感染),自然接触率移除率(单位时间内多大几率康复或死亡)组成,移除率的倒数就是病期也就是从感染者变为移除者的平均时间。其中一般我们把感染率与自然接触率相乘得到传染率β可以理解为未感染者S与感染者I接触后感染的参数。因为传染过程是未感染者S与感染者I的多对多映射,我们可以得到单位时间内新增的感染者就是β*I*S,单位时间内新增的移除的数量为I*γ。则有R0=β/γ。这就是最基本的SIR模型,我们将人口分为未感染者,感染者和移除者三类,SIR模型展示了传染病在一个群体中从传染,扩散到康复的过程。

(二)SEIR模型

考虑到传染是一个动态的过程,人体被被细菌病毒感染后,细菌和病毒在体内开始大量复制繁殖,人的病毒载量达到一定水平后人会出现传染性,因此当我们把SIR模型更精细化一些,将感染过程分为无传染性感染期与传染性感染期两个过程后,我们会得到SEIR模型。这里的无传染性感染期与潜伏期并不一定是同一个概念,例如新冠肺炎根据目前的信息来看在潜伏期就具有一定的传染性。

下面我们来对SEIR模型在Anylogic中建模,我们采用系统动力学模型。首先定义状态(Stock),状态转移,参数和变量。

我们将感染者细分为无传染和传染两种,因此我们有未感染者(S)初始值为Population-1,无传染期感染者(E),传染期感染者(I)初始值为1,和移除者(R)四个状态, S+E+I+R=1。。参数为R0,孵化期(IncubationTime),移除期也就是1/γ(RemovedTime),这三个是传染病固有参数。一个区域的总人口(Population)为这个区域的固有参数。Re(有效再生数)与控制力度(Control)为变量,参数Control在1到正无穷之间代表防疫力度,其中Re=R0/Control。我们一般看到新闻或者报告中提到科学家对这个传染病的R0进行调整,一般说的是根据新的数据估测对自然再生数进行调整,如果看到新闻中说通过控制使得Re(或者有的也说R0)降到了1以下,阻止了传播,那说的是有效再生数,有效在生数是一个现实的数据,可以通过一段时间内新增感染数量进行移动平滑计算。

其中存在3次状态转移,从未感染者转移到无传染期感染者,从无传染期感染者转移到传染期感染者,从传染期感染者到移除者。

设置好参数与状态转移方程后,我们跑一下这个简单SEIR模拟。

设置地区人口10000,R0为5,那么在不做任何防疫的情况下大约第120天左右,S=I时,会出现传染期峰值,也就是有一半人被感染,大约180天左右99.9%的人被感染。这个模拟有个很有意思的地方在于我们发现最终未感染者数量将不会被清零而是趋近于67,通过数学模型推导,可求得累计感染数极值为S(0)*(1-e^-R0)。这说明即便R0非常大,如果把人类看成连续变量,最后总有那么零点几个人不会被感染。(这不是最近热烈讨论的那个群体免疫的数学表达,但有一定关系)

(三)群体免疫是怎样的

前面说过S+E+I+R=1,那如果在一个时间点R=80%,S=20%时有一个人被感染了会怎么样呢?我们修改SA=Population-8001, I=1,R=8000。增加了个扇形图,跑了69000天的数据。

在这个模型中,80%的人被感染治愈拥有抵抗力后,出现新的传播者,模拟显示传播被阻断了,最终感染人数为8062人,也就是说在将近200年间只有61名新增感染者。这就是之前传的非常火的的群体免疫的模拟。群体免疫所需的最低痊愈者比例为1-1/R0,在这个模拟中为80%。这个值的真实含义是,在痊愈者达到80%后(且无传染期感染数量被清空)时出现一例新增感染,感染数量将很难被继续传播(当期感染数不会增加),当超过这个值感染将被阻断(累计感染数不会增加),不妨成为理想群体免疫值。在前面说未感染到无传染性传染的转移函数为S*I*Re/Population/RemovedTimed在模型中,自然免疫与打疫苗是等价的,本质都是通过增加R减少S和I来减少这个转移函数值小于等于E/IncubationTime。

对比这个模型和之前不做任何干预的的模型我们会发现前一个模型累计感染极值为大约9933人而后者累计感染极值约为8062人,这其中的1800多人的差距来源于累计感染人数达到80%的那一时刻时感染者I的数量,在无控制模型中大约是2400人,在后面的群体免疫模型中为1人。也就说是这2400人在随后还会继续感染大约1800人才会停止。因此在不做任何干预的情况下,理想情况下的群体免疫不可能发生。

(四)如果Re依然大于1,不同的Re会有什么影响

通过调整Control参数,加大防疫力度,Re被调整为2.0。

通过调整Re到2.0,最终累计感染数减少到大约80%,峰值在第325天出现,大约695人新增。与原始数据先比R0为5.0,最终累计感染约为99%,峰值在120天出现,大约2447人新增。虽然对于一个地区来说,不论80%还是99%最终感染率都是非常糟糕的结果,但通过有效地控制可以拉平峰值,减缓峰值的到来,这在现实防疫中具有巨大的意义。西方许多国家在三月初就形成共识现在防疫的重点在于控制传播和减缓峰值而不是减少感染,因为R0在从很大趋近于1的过程中,最终绝大部分人都会被感染,但通过压平峰值可以减少医疗系统压力,如果考虑病死率,如果这一过程被延长4倍,相当于当期社会自然死亡率新增也会被减少到1/4,如果80%的人在一年内被感染,病死率2%,相当于当年自然病死率新增1.6%,参考英国18年0.9%自然病死率,相当于翻了将近三倍。如果减缓感染,最终4年内80%的人感染,那每年自然病死率只会新增0.4%,如果考虑大部分病死感染者都是70岁以上的老人,这部分人的死亡概率期望本身就比较高,实际新增病死率可能只有不到0.1%。

(五)隔离的作用

众所周知,目前在没有特效药和面对传染病最有效的方法是隔离,不论是持续高强度广泛隔离的中国还是通过大规模检测进行针对性隔离的韩国和德国,目前都比较有效的控制了传染病的传播。隔离顾名思义就是讲确诊或者疑似与其他未感染人群隔离开来,将感染者分割成具有传播性和孤立不具有传播性两部分,从而减少前面所说的未感染到无传染性感染状态转移方程中ß*I*S中的I,来减少无传染性感染增加的速度。

我们在模型中增加一个状态“隔离”来表示隔离人数,“隔离”从“无传染期感染”流入最终流入“移除者”,3个参数,parameter和parameter1来调控从无传染期感染到传染期感染和无传染期感染感染到隔离的流量比例,隔离参数quarantinelimits代表隔离人数上限。

再增加两个事件,quarantinefree代表有空余隔离空间,此时parameter设置为0.1,parameter1设置为0.9代表绝大多数无传染期感染感染者确诊后进行隔离;quarantinelimit代表无空余隔离空间,此时parameter为1,parameter1为0,代表全部无传染期感染感染者无法进行有效隔离。这里的限制情况很多,可能因为社会经济原因限制,也可能因为没有空余的隔离病房等。当隔离人数小于隔离参数时事件1触发,当隔离人数大于等于隔离参数时事件2触发,设置事件1与事件2为循环事件(event.restart())。

传染刚开始没有人引起重视,此时隔离参数为0,全部无传染期感染者将转化为具有传染性的感染者。

当出现200例确诊感染(总感染数为700)的时候,社会迅速做出反应,将隔离参数调整到1000,此时90%的确诊患者会被隔离,经过一段时间后疫情逐渐平息,最终想必之前的模型,只有25%的人受到感染。

(六)让我们加入死亡和医疗过载

要研究医疗过载对病死率的影响,我们首先需要增加3个新的状态,重症,获得ICU治疗的重症和死亡。将原先的移除者最终分为死亡和治愈两个状态。感染者一部分治愈,一部分转化为重症,其中有些获得ICU治疗,有些则得不到ICU治疗。同时还需要增加参数重症比例,重症转换时间,重症病死率和ICU病死率。

与上面一个模型一样,这个模型也增加2个事件来控制ICU的流入和终止流入。当ICU容量满载时,parameter=0,parameter1=1,代表新增重症直到有空余ICU病程否则得不到ICU治疗。当ICU为满载时,parameter=1,paramter1=0,代表新增重症将获得ICU治疗,直到ICU满载。我们设置20个ICU病程。重症死亡率40%,

疫情刚开始时ICU还没有满载,此时病死率不到1%。

随着疫情蔓延,重症数量超过ICU后,病死率开始增加,最终稳定在12%左右,一万人中一共1205人死亡。下图中下面的表代表重症数量和ICU容量之间的关系,可以看到病死率是在重症数量超过ICU的那一刻开始增加的。

下面看看如果增加对疫情的防控会对病死率有什么影响。我们通过调节参数ContronA将有效再生数Re降低到2.5。

通过一定程度有效地控制,最终有%的人感染,830人死亡,病死率8%,更重要的是整个疫情时间被分摊到了550天内。想比之前,在同样的时间内,死亡人数只有之前的1/3。

(七)我们可能一劳永逸的解决传染病么

首先,短期内将Re压低到1.0之内会有什么影响呢?增加一个滑动块,用来控制Control值,传染初期,没有得到重视疾病自然传染。传播按照自然再生数5.0快速新增,当累计感染达到1000后引起了重视,采取非常强硬的措施,将Control调整到10,降低有效再生数Re到0.5,新增迅速降低,传播得到遏制。但在之后,疾病没有被完全消灭,当新增降低到1以内时再次放开管控,4个月后达到峰值,最终依然有99%的人感染。

最后如果我们通过强力的控制,将境内感染数彻底化为0,但此时依然存在国际交通会怎样呢。新增区域B,以及相应的人口数量,ControlB,交通参数100,意味着每天A与B有100人的人口交换。此时A的Re为3,B进行强有力控制,Re为1。

最终两地的累计感染数量都会同时趋近于80%,虽然B更强力的控制将Re控制在1.0,但最终依然绝大部分人依然感染了。当然B的努力不是没有成果的,B成功将峰值延后了大约100天。峰值也大大低于A国,意味着B的医疗体系承受更小的压力。

回到前面的公式,R0意味着这个病毒是否会广泛传播,而新增数量=I*S*β/Population.在总人口不能减少的情况下,通过隔离管控可以降低β来减缓新增;通过打疫苗减少(I和S)也可以减少新增数量。移除转移函数I/γ,通过医疗发展增加伽马可以增加感染数量减少速度。

当然这些只是理想情况下的纯粹建模,我们同时还要看到,现实中,任何地区的医疗力量最终都来源于生产经营和税收,高强度管控虽然可以短期内大大减少医疗负荷,遏制疫情,但如果这样的高强度管控持续,只要还存在区域间人口流通,最终所有地区的累计感染会趋同,但更长时间高强度管控的地区医疗因为缺乏生产,将受到更大的伤害。

最后的最后,这是一场关于全人类与病毒的战斗。从最后一个交通模型来看,当传播扩散到全球后,一个国家的Re已经很难对最终累计感染数量产生太大影响。从囚徒困境的角度来看,如果国际间各自为政,减少合作,那最终全球大部分地区一定会为了保障经济而消极防疫,最后也一定会走向不可控的群体免疫。

一只鲨鱼🦈
作者一只鲨鱼🦈
131日记 89相册

全部回应 1 条

添加回应

一只鲨鱼🦈的热门日记

豆瓣
免费下载 iOS / Android 版客户端