使用 Stata 分析中国新冠疫情数据与制作动态图表

使用 Stata 分析中国新冠疫情数据与制作动态图表

之前推出了使用 Stata 的 cuse 命令直接调用世界和中国的新冠疫情数据的方法,今天就来介绍一下如何使用这个数据进行疫情分析啦!

视频讲解

本文的部分图和之前的教程《使用 Stata 分析中国新冠肺炎疫情数据!》 中的图一样,不过我对代码进行了改进,主要是提高了代码的自动性(以后每天只要运行这一段代码就能得到最新的疫情分析结果)。之所以如此,是因为我下面想推出一篇使用 Stata 自动创建疫情数据分析报告的教程,敬请期待。

安装 cuse

cuse 被我放在了 GitHub 上,经过我的测试,使用 4G 网络(手机开热点)时,读取数据的速度还是 OK 的。所以如果大家遇到网络过慢的问题,可以选择 4G 网络。

1
net install cuse.pkg, from("https://czxa.github.io/cuse") replace

调用中国疫情数据

1
2
cuse china-covid19.dta, c w s
*> (中国新冠疫情数据(数据来源:https://github.com/canghailan/Wuhan-2019-nCoV): 2020-04-26)

c w s 是三个选项:

  • clear: 可以简写为 c;
  • web: 可以简写为 w,表示从远端仓库调用数据集;
  • savetosystem: 可以简写为 s,使用该选项时会将该数据集保存到系统文件夹中,这样下次调用该数据的时候就不需要从远端仓库调用了,直接使用 sysuse 调用即可。

可视化分析

找到截止数据中的最后一天确诊数量最多个 9 个市进行分析

这里我使用了一个 global 变量存储这九个市的名称方便在后面的代码中使用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sysuse china-covid19, clear
* 保留最后一天的数据
sum date
global lastday = string(`r(max)', "%tdCY-N-D")
global lastdaynum = `r(max)'
di `"${lastday}"'
*> 2020-04-25

di `"${lastdaynum}"'
*> 22030

keep if date == `r(max)'
gsort -confirmed
keep in 1/9
global top9_citylist = `""武汉""'
di `"${top9_citylist}"'
forval i = 2/`=_N'{
global top9_citylist `"${top9_citylist},"`=city[`i']'""'
}
di `"${top9_citylist}"'
*> "武汉","孝感","黄冈","荆州","鄂州","随州","襄阳","香港","黄石"

从数据集中筛选出这 9 个市的数据:

实际上上面的 global 变量就是为了这里的 inlist 函数使用的:

1
2
3
sysuse china-covid19, clear
keep if inlist(city, ${top9_citylist})
format date %tdCY-N-D

绘制这 9 个市的现存确诊人数增长曲线图

这里我是使用循环和 local 变量生成绘图命令语句:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

也可以分面绘制,毕竟这是个面板数据:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

计算全国每天的总数

使用 collapse 可以快速地进行分组汇总计算:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

下面这幅图是我之前绘制过的:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

当前确诊人数与每日新增确诊人数

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

死亡和治愈病例数量

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

病死率

我这个计算的方法饱受质疑,所以这里仅供演示。

病死率的计算需要非常谨慎,因为我们要考虑状态未决的观测值的问题。有两种情况:情况一,正在治疗的患者都不幸去世了;情况二:正在治疗的患者都非常幸运的存活了。

在情况一中,使用我们的数据集计算得到的病死率低于真实的病死率,因为:

$$\frac{病死人数}{治愈数 + 病死数} \leq \frac{病死人数 + 正在治疗的病例}{治愈数 + 病死数 + 正在治疗的病例}$$

在情况二中,使用我们的数据集计算得到的病死率高于真实的病死率,因为:

$$\frac{病死人数}{治愈数 + 病死数} \geq \frac{病死人数}{治愈数 + 病死数 + 正在治疗的病例}$$

所以估计病死率我们应该使用区间估计,区间上限对应的病死率是情况一的病死率,区间下限对应的病死率是情况二。还有一个病死率的测度是每日的病死率:

$$每日病死率 = \frac{当日病死人数}{当日病死人数 + 当日治愈人数}$$

计算:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

部分市的病死率变化

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

绘制中国市级地图

绘制最后一天的现存确诊人数:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

循环制作动态图表

先绘制最后一天的:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

再循环绘制所有天的(2020-01-01 之后的):

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

这样我们就得到了一个 pic 文件夹,里面有 116 张图片,最后我们把他们合成 MP4 视频即可,可以使用我之前分享的 R 代码,其中 665.mp3 是我们要给这个视频添加的音频:

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

省份分布

代码去哪了?

代码可以加入我的知识星球后从知识星球下载附件获取~
要了解如何加入我的知识星球,可以阅读关于界面或者添加我的微信咨询。

好啦,就这些了,大家可以试着掌握里面的循环生成绘图语句的方法,绘制复杂图表的时候很有用!

知识星球附件链接:https://t.zsxq.com/vbQbeqZ

#

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×