目录
一、数据采集
首先确定数据采集网站。当前许多权威网站都设立了疫情数据公布窗口,比较熟知的有腾讯新闻、支付宝首页、丁香医生等,具体信息有疫情最新总数,疫情地图,疫情病例曲线等,数据来源于国家及各地卫生健康委员会每日发布的信息,本文采用腾讯新闻来获取疫情实时数据,网站为:
https://news.qq.com/zt2020/page/feiyan.htm
再通过谷歌浏览器打开网站,F12键进入后台,找到包含getOnsInfo?name=disease_h5一项,得到腾讯新闻后台疫情的json数据。
双击该条目进入json数据中,可以发现全国及省市疫情的确诊、疑似、死亡等数据。
之后通过爬虫数据方法获取到对应数据:
进一步的json数据处理代码可参考:python获取2019-nCoV疫情实时追踪数据
通过以上爬虫采集到的数据我们首先绘制出目前全国、湖北及武汉的天级确诊时间序列数据,如下图。
同时,从新增人数上看,当前全国新型冠状病毒感染增加人数在2020年2月4日达到最高峰,其后至今一周时间总体呈现下降的水平。这意味着新冠病毒已经得到了一定的控制,但由于传染性强,我们仍不能掉以轻心。
二、模型建立
通过阅读相关文献我们发现Gompertz(冈珀茨模型)在非典感染人数预测上有很好的表现,该模型最初由冈珀茨(Gompertz,1825)提出作为动物种群生长模型,用于描述种群的消亡规律。Anclytis(1973)引用于植物病害进展曲线的比较。Gompertz模型常用来与我们熟知的Logistic模型对比,它们的趋势相似且都常被用来描述生物的生长规律,而Gompertz在应用特点上则更适合那些S型曲线不对称、病情发展先快后慢的病害曲线拟合。
其中Gompertz模型公式为:
Logistic模型公式为:
我们通过带入常规参数绘制两函数图象进行对比,如下图。由图可知两模型在形状上非常相似,但在增长率下降阶段Gompertz模型较Logistic模型生存时间更长一些,这更加符合生物生存规律,因此本文也更加关注Gompertz模型结果。
本文采用R语言实现Gompertz模型相关预测,代码如下:
# 读取数据
data = read.csv("data_ncov2019.csv",header = TRUE,sep = ",",stringsAsFactors = F)
t = data[,1]
y_china = data[,3]
y_hubei = data[,4]
y_wuhan = data[,5]
# 龚伯兹生物曲线拟合
china_gompertz = nls(y_china~k*(a^(b^t)),start=list(a=0.05,b=0.5,k=30000),lower=c(0.0000001,0.01,10000),upper=c(1,1,1000000),algorithm="port")
summary(china_gompertz)
c<-coef(china_gompertz) # 将模型的回归系数赋值给c
tt = c(1:88)
yp<-c[3]*(c[1]^(c[2]^tt)) # 计算时间取值为tt时对应的y的预测值
plot(t,y_china,type="o",ann=FALSE,ylim=c(0,100000),xlim=c(0,84))
lines(tt,yp)
write.csv(yp,"china_pre.csv")
hubei_gompertz = nls(y_hubei~k*(a^(b^t)),start=list(a=0.05,b=0.5,k=20000),lower=c(0.0000001,0.01,10000),upper=c(1,1,800000),algorithm="port")
summary(hubei_gompertz)
c<-coef(hubei_gompertz)
tt = c(1:88)
yp<-c[3]*(c[1]^(c[2]^tt))
plot(t,y_hubei,type="o",ann=FALSE,ylim=c(0,100000),xlim=c(0,84))
lines(tt,yp)
write.csv(yp,"hubei_pre.csv")
wuhan_gompertz = nls(y_wuhan~k*(a^(b^t)),start=list(a=0.05,b=0.5,k=30000),lower=c(0.0000001,0.01,10000),upper=c(1,1,1000000),algorithm="port")
summary(wuhan_gompertz)
c<-coef(wuhan_gompertz)
tt = c(1:88)
yp<-c[3]*(c[1]^(c[2]^tt))
plot(t,y_wuhan,type="o",ann=FALSE,ylim=c(0,100000),xlim=c(0,84))
lines(tt,yp)
write.csv(yp,"wuhan_pre.csv")
我们将能收集到的数据输入至模型,分别得到全国、湖北和武汉具体预测参数值和参数检验情况(如下表)。由表可知各模型参数基本高度显著,表明模型有一定可信性。
全国新冠病毒模型预测参数检验表
Parm |
Estimate |
Std.Error |
t value |
Pr(>|t|) |
sig. |
a |
7.384e-07 |
4.150e-06 |
1.364 |
0.0177 |
* |
b |
8.852e-01 |
3.521e-03 |
251.421 |
< 2e-16 |
*** |
k |
7.227e+04 |
2.363e+03 |
30.582 |
< 2e-16 |
*** |
湖北新冠病毒模型预测参数检验表
Parm |
Estimate |
Std.Error |
t value |
Pr(>|t|) |
sig. |
a |
1.000e-07 |
1.206e-07 |
0.829 |
0.0861 |
. |
b |
8.853e-01 |
4.888e-03 |
181.098 |
< 2e-16 |
*** |
k |
5.788e+04 |
2.840e+03 |
20.378 |
<2e-16 |
*** |
武汉新冠病毒模型预测参数检验表
Parm |
Estimate |
Std.Error |
t value |
Pr(>|t|) |
sig. |
a |
9.222e-07 |
1.358e-06 |
0.679 |
0.0503 |
. |
b |
9.067e-01 |
7.864e-03 |
115.293 |
< 2e-16 |
*** |
k |
4.924e+04 |
6.585e+03 |
7.478 |
7.87e-08 |
** |
注:*代表参数检验显著程度
三、结果分析
通过上述模型预测并绘制实际感染人数与预测感染人数时间序列图,由图可知全国新冠病毒感染人数在4月初将稳定在72000人左右,湖北新冠病毒感染人数将稳定在58000人左右,武汉新冠病毒感染人数将稳定在50000人左右。
进一步聚焦新冠病毒蔓延趋势,绘制全国新冠病毒新增感染人数的时间序列图。由图可知2020年2月4日为新冠病毒感染人数新增最多的一天,其后逐步下降,在2020年4月1日左右新增人数将下降至10人以下,新冠病毒蔓延趋势基本消失。
三、结论探讨
以上重点采用Gompertz生物模型对当前新冠病毒蔓延趋势进行预测,预测结果显示全国新冠病毒感染人数将在4月初稳定在73000人左右。文章进一步还可采集更多数据,如细粒度数据、点位数据、病死率数据等,并且通过地理模型、仿真模型和机器学习模型等得出更加有意义的结论。
疫情总会有结束的那一天,但无疑这一天越早到来越好,这取决于我们每一个人的努力和行动,否则复工复产复学和疫情控制的矛盾就会加剧,我们前期为之付出的代价也会前功尽弃。
因此,我们要做好防护措施:严隔离、戴口罩、勤洗手、不聚集,不能掉以轻心!更不能放松警惕!!因为我们每个人都是关乎预测是否准确以及实际防控是否凑效的关键变量。面对新冠病毒肺炎,这不是某个人的殊死抗争,而是一群人的休戚与共。