查看原文
其他

教学生用数学预测疫情走势?

李想 一土教育 2022-09-26

是一土教育的第545篇文章

一土教育 | 内心充盈 乐天行动

构建可复制的成全式教育生态


题图:来自网络

作者:李想。一土中学数学教师,北京大学学士,首都师范大学博士。曾任教于北京师大二附中国际部,主讲并开发多门AP课程和学术荣誉课程,亦对数学学科知识图谱和学习理论有深入理解。擅长启发式教学,所教学生遍布麻省理工、芝加哥大学等北美名校。



写在前面
2月初,一土中学创校团队一周内连续开展了5场线上公益课程,分别从五个学科视角,引导五六年级的学生解读发生在我们身边的疫情。
我们也将全部课程讲义详尽整理,即日起陆续发布,为同学们提供反复研究的学习资料。更希望启发同学们结合实际生活进行学习,将所学贯通到生活。
如著名教育家大卫·奥苏伯尔所言——“为迁移而教”。





讲义发布时间



科学课(2月18日)

引导学生从事物的本质特征(病毒依靠宿主复制和表达遗传信息)理解可见的现象(传染病的传播与防治)。

见:从恐惧到敬畏——科学透镜下的病毒


数学课(2月25日)带领学生进行了从简单到复杂,逐步增加变量(影响疫情传播的因子)的建模过程。见本篇正文

英语课(2月26日)引导学生将英语作为一种工具和媒介,从而为自己打开一扇看到更广阔世界的窗,听到更多的声音、了解更多的观点,通过主动搜索、筛选和精读语料,在跨文化的多元语境下深刻读懂疫情。
阅读课(3月3日)教给学生从“验证事实点”,到“梳理逻辑线”,再到“构建意义网”的阅读范式
人文课(3月4日)带给学生穿越历史时空,审视时事的体验。

收看课程回放

报名一土中学



数学课讲义全文


相信大家最近也都一直在关注全国各地的疫情,特别是每天都在不断变化的各种数据,这些数字的背后都能告诉我们哪些信息呢,通过数学的工具我们能够如何分析预测疫情的走势呢,下面我们就详细和大家来说一说。

 

你可能会觉得奇怪,数学还能预测疫情的走势?其实人们通过数学知识建立模型来分析预测以及应对传染病防治已经有了很久的历史。所谓数学模型,就是是运用数理逻辑方法和数学语言建构的科学或工程模型,用以解决各种各样的实际问题。


那有些同学会问,是不是一定需要很多的数学知识和先进的计算工具才可以完成数学建模吧?其实,数学建模的入门并不难,我们自己也可以通过所学的数学知识来构建一些简单的数学模型,来帮助我们更好地理解当前的疫情。例如:我们可以从斐波那契数列出发。

 

有些同学可能听说过,这个斐波那契是一个生活在中世纪的意大利数学家,他写过一本叫《计算之书》的数学著作,这本书也有中译本,感兴趣的同学可以看看,里面有些章节,同学们还是能看得懂的。

 

在这本《计算之书》中有一个很有名的问题:

 

有一对兔子,从出生后第3个月开始每个月都生一对兔子,小兔子长到第3个月后每个月又生一对兔子。假如兔子都不死,问一年到头,或者说问若干个月之后,兔子的总数有多少对?

 

我们来分析一下:


  • 第1个月:有1对兔子;

  • 第2个月:还是那1对兔子;

  • 第3个月:上个月的那1对 + 新生的1对(最开始的兔子生的) = 2对;

  • 第4个月:第3个月的2对 + 新生的1对(第2个月的兔子生的) = 3对;

  • 第5个月:第4个月的3对 + 新生的2对(第3个月的兔子生的) = 5对;

  • 到第六个呢,那应该是多少对兔子了?从下图中我们可以看到,应该是8对。



我们发现,每个月的兔子数都等于前一个月的兔子数再加上新生的兔子数,而新生的兔子有多少只呢?这是由两个月前的兔子数目来决定的,因为只有出生2个月以后,到第三个月才可以生小兔子。所以我们发现的一般规律就是,第n个月的兔子数an应该等于第n-1个月的兔子数加上第n-2个月的兔子数

 

 

我们在建模的时候往往要处理大量的数据,并做出批量的计算,因此我们可以利用一些工具来帮助我们计算,比如,可以利用Excel软件将1到12月输为一列,在另一列最开始记下前两个月的那仅有的一对兔子,然后从第三个月开始用公式来计算,例如:第三个月应该等于第一个月+第二个月,对应到我这里的表格位置就是B2+B3,从而得到第三个月的兔子数,然后往下拖拽列就可以得到一年12个月份对应的兔子数目分别是多少。


我们看到,一年里12个月的兔子对数分别是:1,1,2,3,5,8,13,21,34,55,89,144,可以发现后面几个月的增加还是很快的,而这个随着月份增长的数列就叫斐波那契数列。读到这里你可能要问:讲这些和当前的疫情有什么关系呢?别急,这都是为下面的数学模型所做的铺垫:

 

我们知道,在这次肺炎疫情中,1月11日首次公布有41例确诊病例。假设染病的人从第三天开始,每天都会再传播给一个健康的人,问第n天,患病的人数为多少?有没有发现,这个模型和前面讲的斐波那契数列是一回事?

 

我们仿照刚才的分析方法,来计算一下,第一天有41个感染者,第二天还是41人,从第三天开始,就是前两天的和,那就是82人,第四天的人数就应该是第二天的41加上第三天的82,从而得到123人,而递推公式和刚才的斐波那契数列是一样的。


让我们再来看看,这样建立的模型效果如何,同样在Excel里面,我们分两列,左边的是日期,而右边这次是感染人数,还是从第三项运用公式,之后推拽,得到了一个月之后的预测,我们得到预测的感染人数是55197029人,绘制出来的图像如下图,这个增长的速度和感染的人数实在是太夸张了,这个模型显然无法说明当前的疫情情况。

 


我们来思考一下,问题出在哪里呢?首先,传染病都会有一个潜伏期,不是感染之后立刻就会传播,另外一个很重要的事实是,患者是会痊愈的,也就是患者人数应该会有所减少,而我们之前兔子的例子却假设所有的兔子都不会死。


所以,我们可以这样修正一下我们的模型:这次肺炎疫情,1月11日开始公布有41个病例,结合一些背景信息,我们设定染病的人有一个平均为3天的潜伏期,也就是说从第4天开始发病并传播,而到了染病的第14天,之前染病的人就会被治愈。问到了第n天,患病的人数是多少?

 

加了这个条件后,情况复杂了一些:第一天是41个人,第二天还是41人,第三天依然不变。他们的潜伏期到第四天结束,于是开始传给染别人,那么第四天的患病人数就等于第三天的41人,加上他们开始传染的41人。


这样每一天的感染人数就等于前一天的人数再加上三天前的染病人数,直到14天后,第15天的感染人数等于第14天加第12天的人数,再减去最开始第一天的感染人数,因为他们现在已经痊愈啦!按照这个思路,15天以后的感染人数计算公式就是:前一天的人数再加上三天前的人数再减去十四天前的人数。

 

我们再把这个模型输入到Excel,这里可能需要一点小技巧,因为14天后才有痊愈的人,所以为了调用公式方便,我们可以在日期前补上14个0,这样就可以满足公式的迭代需求了。按照这个模型,我们看到,一个月后的感染人数是2269514人,个数字虽然减小了许多,但依然和事实上有很大的出入。



别灰心,数学建模的过程就是在不断的试错和修正中完成的。我们发现,在构建模型时还有一个不甚合理的假设,那就是每个感染的人在过了潜伏期后每天都会传染给别人。事实上,很多人在意识到自己得病后就进入了治疗或者隔离的阶段,也就说,每个人每天传播的人数平均肯定不到1人。

 

于是我们又可以构建一个新版的模型:这次肺炎疫情,1月11日开始公布有41个病例,假设染病的人从第4天开始传播,每天传播k个人,到了第14天,也就是14天前染病的人就会被治愈。问到第n天,患病的人数为多少?注意,这里新加的k是一个小于1的数字。我们可以暂且叫它“传播系数”。

 

于是我们的模型可以写成:第n天的感染人数等于,前一天的人数加上传播系数k乘以三天前的人数,再减去14天前的感染人数。即:

 


看起来改动不大,那么k取值多少合适呢?既然k是一个小于1的数字,那么我们很自然地可以先按0.5估计,作为对照,我们可以取0.4和0.6对照一下。注意这组数据在Excel的公式只需要在刚才那个模型中的an-3那一项乘上一个常数就可以了。

 

我们再看一下结果,按照0.5的传播概率,预测的感染人数和当前的数据是很接近的。于是我们得到了一个还算合理的模型,同学们,看到这里,你跟上了吗?我们回忆一下,从最开始公布的41个病例,假设染病的人从第4天开始传播,每天传播0.5个人(或者说平均每两天传染一个人),而到了第14天,14天前染病的人就会被治愈。那么n天后,患病的人数预测值就是我们上面这个公式。


得到这个模型,我们还不能满足,因为数学模型的价值在于预测未来的趋势,从这个模型我们画出的趋势图像可以看出,无论k取值是0.4,0.5还是0.6,人数都会一直增加,这样发展下去,疫情是无法控制的。

 

我们回忆一下,大约在1月23日的时候,武汉市宣布了封城,而从那时起,全国都启动了严谨的防疫机制,所以那个我们估计的传播系数k不会一直是一个固定值,而是应该会不断下降的,所以我们进一步修正一下我们的模型:从第14天开始,不仅有患者痊愈,传播系数k也每一天下降5%,也就是前一天系数的0.95倍。那么我们的模型就应该是:

 


在这里需要同学们思考一个技术问题:这个不断变化的传播系数k如何在EXCEL里面体现出来呢?你可以自己实际操作时尝试着解决一下。我们再来看一下我们的最新版本,可以看到,即使是按照最开始传播系数0.6测算,当我们的k开始减小以后,感染人数还是可以得到很好的控制,与现在的实际感染人数出入不大。


因此,我们要正确认识当前的一些防疫管理措施,因为它真的很有必要,也很有效果,数据分析告诉我们,这些举措能大大降低传播的人数,从趋势上看也能缩短疫情的持续时间。



以上我们经历了一个简单的建模过程,而这个模型并没用到什么复杂的数学知识。在应用数学领域专门用于传染病预测的成熟模型叫做SIR模型,其中S表示易感人群(Susceptible),I表示感染人群(Infected),R表示康复人群(Recovered),有的文献用的是Removed这个词,也就是移除人群,即感染过疾病并康复或死亡的人群。我想还是叫康复人群比较好一些吧。而我们从这个模型的名字来看,这个复杂的数学模型的思路和我们的模型在想法上也是很相似的。(你能把这三个词与我们所构造的模型中的三项相对应吗?

 

这个模型的起源是在19世纪末,当时印度暴发了鼠疫。在随后的30年里,这种疾病不断周期性地肆虐印度,累计夺去约30万人的生命。1901年,一名叫麦肯德里克的苏格兰年轻军医来到印度,他当时计划花20年左右的时间从事公共卫生干预并获得对人畜共患疾病的深入理解。在此期间他感染了一种其他的疾病而被迫回到苏格兰休病假。


在休假期间,他做出了一个重大改变:他决定学习和研究数学。在随后回到印度的几年里,他几乎将全部精力都集中在数学研究上。从印度全身而退回到苏格兰后,他与生化学家科马克一道,利用他在印度期间搜集的孟买鼠疫暴发数据,共同推导出了S-I-R模型。自创立以来,这个模型及其修正版成功地描述了各种各样的流行病发展趋势:从拉丁美洲的登革热、荷兰的猪瘟、比利时的诺如病毒,再到西非的埃博拉。

 

在这个模型里有一个很重要的参数叫R0,最近你可能也在一些报道中听到或见过关于本次疫情R0值的估计。它的角色很像我们模型中那个传播系数k,对于模型的建立起着至关重要的作用。对于一场传染病,R0定义为疫情过程中平均每个感染者能传播的人数。显然,只要R0>1疫情就会扩大,而R0<1则意味着疫情可以被逐渐控制。当然,R0也并不是越大就越恐怖,致死率高的传染病反而可能R0比较低。而由于R0是个平均值,随着疫情的发展,R0也是动态变化的。因此,当前我们应该设法降低R0,从而逐渐控制住疫情的发展。

 

现在请同学们思考一下,我们刚才所建立的模型里的R0是多少?按照我们的模型,每个感染的人从3天后开始传播,到14天后被治愈,一共有11天可以传播病毒,每天传播的系数如果按0.6计算,那么我们这个模型的R0就是11乘以0.6,也就是6.6,这个数字太大了,传播会非常迅速,而当我们修正模型,让K逐渐减小,也就是降低R0的过程。你会发现按照我们的假设,R0会逐渐减小到1,而疫情也将随之结束。

 

那么,我们该怎么做才能够降低这个R0呢?在刚才提到的SIR模型里,R0有一个计算公式:


我们来分析一下这个式子:其中传播概率大小取决于病毒的传播方式,例如艾滋病毒通过体液传播,白喉通过唾液传播,流感病毒通过空气传播,因此流感的传播概率高于白喉,而白喉的传播概率又高于艾滋病。现在的新冠病毒是呼吸道传染病,是通过空气传播的,因此他的传播概率也很高。


接触概率比较好理解,就是人群当中个体之间发生接触的频率,人员流动越频繁,互相接触的概率也就随之升高。再看这个式子的分母部分,它叫做痊愈概率,这一项的值取决于病毒的毒性以及特效药物的疗效。如果我们暂时还不能通过有效的药物提高痊愈概率,我们能做到的就是降低这个式子的前两项的取值,从而降低整个R0的值。


由于新冠肺炎可以通过飞沫在呼吸道传播,因此我们需要出门佩戴口罩,做好防护,回到家要及时换衣服,勤洗手,从而降低传播的概率,而现在我们自觉减少外出,宅在家里,就是在为降低接触概率做出贡献。而当我们把R0降低到1以下,我们就一定可以取得这场抗击肺炎疫情的胜利。

 

现在,我们所盼望着的胜利似乎已见曙光,这也和最近的另一个高频词汇相联系,那就是拐点。这几天有很多报道,有的乐观地分析拐点已到,而有些人则谨慎地认为拐点还没到,比如我们都很尊敬的钟南山院士。

 


从这副图我们可以看到,全国的感染新冠肺炎的人数依然还是在不断升高的,从这幅图我们的确难以判断拐点是否到来。那么,拐点究竟在哪儿,又是怎样计算的呢?

 

通俗地说,数学上的拐点(Inflection Point)又称反曲点,是指增速从加速上升(即越来越陡峭的爬坡),开始改变为增速下降(坡度开始平稳,即将变缓)的点。而不是指增速已经明显变得很低,趋向于平稳,乃至停止增加的稳定点 — 这叫驻点(Stationary Point),甚至是改为调头向下的点 — 这叫极点(Culminating Point)。

 

如左图,P是曲线AB的拐点,虽然之后曲线还在上升,但上升的趋势已经变缓,而右图中的Q点是CD的极点,之后曲线就是下降趋势了。

 

可见,疫情拐点并不是指感染者的绝对数字开始下降(那将意味着治愈人数超过新增感染人数),拐点应该出现在感染人数的增量有明显放缓趋势的时侯,下面我们来看一看最近的一组关于全国新增病例的统计数字。



从这幅图表来看,最近几天全国的新增病例特别是在2月份以来较之以前变高了不少,疫情分明还是十分严重的,拐点的确还没有到来。但我们结合事实背景仔细分析一下,由于此次疫情的中心湖北省在前期控制不够有效,医疗资源不充足等原因,造成了大量病例没有得到及时确诊,因此最近湖北的增加病例数非常明显。


而随着最近两天湖北要针对全部疑似患者进行检测确诊,湖北地区的确诊人数预计还会进一步提高。而湖北以外的地区由于在疫情还未在当地广泛传播时就已经开展了较为明显的防范措施,感染人数无论是基数还是增量都远远低于湖北一省:



我们注意到上面这幅图的新增病例已经连续6天发生了减少,因此如果未来几天这个减少的趋势依然持续,我们可以谨慎地乐观:对于湖北以外地区,拐点似乎已经来了。可见,对于湖北和其他省份,完全就是两场不同等级的疫情。


当然,我们还是要继续之前的防控措施,巩固成果,确保增幅下降趋势不反弹。同时,防控疫情全国一盘棋,湖北作为本次疫情的重灾区,承担了很多的苦难,做出了很多的牺牲,我们应该为他们加油祈福,希望他们在得到全国的支援下也能早日迎来拐点,并最终取得对抗疫情的胜利。

 

最后再总结一下我们要做的事情:

 

  • 出门佩戴口罩,做好防护

  • 回到家要及时换衣服,勤洗手

      (以上两条是降低传播概率)

  • 尽量减少外出,自觉宅在家里

      (为了降低接触概率)

  • 为湖北祈福,不要歧视排斥


我们尝试着通过建立简单的数学模型来对疫情及防疫措施进行了一些分析,同学们是不是有了更加理性的认识,并对战胜疫情充满了信心呢?让我们从点滴做起,一起努力吧!


- END -





 推荐阅读 






支持一土,点“在看” ↘

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存