Loren在Matlab的艺术上

将想法转化为MATLAB

对美国的过度死亡率分析

今天的客座博主是乔斯马丁,来自MathWorks的并行计算团队。虽然通常聚焦在Matlab中简单快速的平行计算,但偶尔他喜欢使用Matlab探索其他问题空间。在这里,他写了一些CDC在Matlab中提供的数据集进行分析和可视化美国过多的死亡统计数据。

内容

介绍

我很奇怪地看到关于美国不同国家如何处理大流行和病毒随着时间的推移的数据的数据。我找不到任何叫做我想知道的东西的可视化,所以我开始尝试为自己检查数据。我是一个显然我转向我最喜欢的分析工具,Matlab!

在研究SARS-COV-2 (COVID-19)对人群的影响时,我们面临的问题之一是,检测和确定病毒的原因充满了问题。不同的检测有不同的特异性,假阳性和假阴性;并不是所有人都接受了检测,即使是那些检测结果呈阳性的人也可能有或没有症状,最终可能会或不会死于病毒。因此要弄清楚到底发生了什么是很困难的。以2020年8月12日英格兰公共卫生部为例减少了新冠肺炎病例由于死亡可能或可能不受COVID-19影响的方式发生了变化,英格兰的死亡人数增加了12%。

鉴于分类每项事件(住院,死亡等)的自下而上的方法由于Covid-19或不将会很困难,我们能做的是看一个人口的总体统计数据,并询问它们与正常(或没有目前观察到的影响的先前数据)有何不同。数据与过去不同的地方,我们知道这可能是由于这些影响。过多的死亡率分析属于这种类型。它只是查看给定区域报告的总死亡人数,并随时间进行跟踪,以建立一个合理的预期死亡人数模型(通常在一年中的给定一周)。这种分析的一个例子是EUROMOMO项目(对于欧洲),为欧洲周围的一些国家/地区收集这些数据,并提供了不同的数据看法,以帮助展示当前事件如何影响不同地方的死亡。

美国的等价数据可从CDC获得,但有更多的限制观看选项,我特别热衷于看看不同的国家如何处理大流行,并在整个大陆上比较病毒随着时间的推移。

获取数据

以下分析完成可从CDC提供的数据记录死亡总人数,并可与前几年数据显示的当周预期死亡人数进行比较。我们可以使用MATLABwebread只需直接从CDC网站导入所有数据的功能(国家和国家过度死亡的估计),并开始处理数据。由于底层数据是CSV文件中的表格,因此MATLAB中的结果将是桌子

t = webrabread('https://data.cdc.gov/api/views/xkkkf-xrst/rows.csv');

帮助绘制数据geobubble在图表中,如果有另一个表,其中包含州的名称(以及上面数据中找到的其他位置,如“纽约市”)以及该位置的纬度和经度,则非常有用

地点= Webrabread(“https://blogs.mathworks.com/images/loren/2020/statelocation.csv”);

初始数据擦洗

我们只想看看“所有原因”数据(由于此CSV文件中的数据的其他分区),并且我们希望将所有数据加权到预测值(因为最近的数据通常缺少报告的死亡,因为它需要时间来将该数据达到CDC,因此请参阅技术说明在CDC网站上)。

转换类型状态结果改为分类,因为这简化了下面的许多代码,这些代码对这些变量进行子选择和连接。转换超过sthreshold.对于一个逻辑,因为这更容易处理一组不同的字符串。

T.Type =分类(T.Type);t.outce =分类(t.outcome);t.state =分类(t.state);t.exceedsthreshold = strcmp(t.exceedsthreshold,“真正的”);

也将状态在里面位置随着我们将结合使用它的分类变量状态在主表中以后。

的位置。状态= categorical(locations.State);

选择所需资料(所有原因预测(加权))并删除一般State == "美国"这是所有州的合并数据

t = t(t.type ==“预测(加权)”&t.outcome ==.“原因”&t.state〜=“美国”:);

获取一个涵盖所有数据的时间范围以供以后使用

timeRange =独特(t.WeekEndingDate);

马萨诸塞州发生了什么事?

使用使用的数据选择数据状态变量(您可以将其更改为您喜欢的任何状态,以查看该状态中发生的情况)

m = t(t.state ==“马萨诸塞州”:);

绘制一段时间内观察到的死亡人数,以及代表预期死亡人数的上限阈值和分布的几个标准差。如果死亡人数远远超过上限,则死亡率远远超出预期。

plot(timerange,m.observednumber,“b”);抓住情节(timeRange m.UpperBoundThreshold,'r') 网格标题'每周记录死亡'ylabel'每周记录的死亡人数'抓住

[9020年中旬评论]很高兴看到,对于过去几周来说,过度的死亡率似乎在上限下返回,这表明马蹄已经恢复了其死亡率,即使美国和世界仍然存在大流行病。

那整个美国呢?

如果绘制整个美国的情况,相同的数据看起来像什么?虽然我们之前从表中删除了总数,但我们可以通过将数据分组到所有状态的日期和求和来轻松地重现它们。采用findgroups.基于这一点WeekEndingDate要定义所有具有同一周结束日期的数据组裂开在这些组上,可以将每个组中所有状态的所有数字和总和总和以获取正确的聚合号。

g = findgroups(t.weekingdate);绘图(timerange,scletapply(@sum,t.observednumber,g),“b”)举行plot(timeRange, splitapply(@sum, t.UpperBoundThreshold, G),'r') 网格标题'每周记录死亡'ylabel'每周记录的死亡人数'抓住

[9020年中旬评论]注意在此期间的显着刺激2017年冬天 - 2018年流感季节.此外,似乎在整个美国过度的死亡率似乎在上限阈值下仍然返回,每周约为8,000左右,这一时间似乎是预期的,似乎呈上升趋势。

有多少状态超过了上限?

鉴于我们在任何给定的时间都知道,如果一个状态超过其阈值,我们可以轻松地绘制超过其上限为时间范围的状态的数量。

plot(timerange,scletapply(@sum,t.exceedsthreshold,g));网格

再次注意到2017 - 2018年流感季节的显着跃迁,目前约有30个州仍然高于其上限。但这只是一个总数,它可能有趣的是,看待哪些州的界限在其界限之上,并通过跟踪在特定时间点的界限超过其界定的州随着时间的推移,看到大海颌面的演变。

哪些州超出了他们的上限?

要查看哪些州超出了他们的上限(以及我们需要在时间的时间点看待。我们将衡量这一点,因为录制了最新数据以来。然后,我们可以分解所有数据,以便我们只有一个特定的一周进行分析。更改下面的值,看看在美国一周周期发生的一周

几个星期= 1;x = t(t.weekingdate == timerange(终周),:);

使用地点与上的数据连接的表状态因此,我们现在拥有我们的Geobble图表上的各州的纬度和经度

%连接表X = outerjoin(X,'类型'“左”“钥匙”,{“状态”});

泡沫尺寸应通过给定状态的预期死亡人数标准化。因此,计算过量的死亡率(观察到的 - 上限),并除以标准偏差的东西(上限减去)。此数字本质上是与该状态的预期偏差的数量。

X.BubbleSize = max ((X。ObservedNumber - X.UpperBoundThreshold)./(X.UpperBoundThreshold- x . averageexpectedcount), 0);

转换超过sthreshold.对于一个分类,使其可以标记Geobbble图表并将绘图限制设置为大致美国大陆的边缘。

X.ExceedsThreshold =分类(X.ExceedsThreshold);X = X (X。ExceedsThreshold = =“真正的”:);geobbble(x,“纬度”“长期”...“底图”“darkwater”...“sizevariable”“泡沫化”...“ColorVariable”“超过sthreshold”...“maplayout”“普通的”...“SizeLimits”,[0 10]);地球摩托([20 51],[-126 -65])

该图显示哪些状态超过其预期阈值,并且气泡的大小表示(以群体正常化的方式)通过它们结束。通过更改上面的滑块(即,您正在寻找的一周),您可以调查各州流行的演变,大多在大流行开始到南方国家的东海岸的进化。

请下载此示例的MLX文件,自己研究这些数据及其含义。有什么发现请告诉我们这里




发布与MATLAB®R2020B

|

评论

要留下评论,请点击这里登录到您的MathWorks帐户或创建一个新帐户。