过去几年,即使在 Covid-19 疫苗在全球范围内产生影响的情况下,预测建模的分析方法也取得了重大进展。梯度提升树和深度神经网络已成为时间序列预测的最先进方法。 您可以回顾一下最近的专刊的国际预测杂志,包括一个纸由 David Lander 和我介绍我们在 M5 不确定性竞赛中获胜的解决方案,其中我们专门使用梯度增强树。 本注释演示了一种简单的方法来使用JMP Pro 中的 XGBoost 插件对美国疾病控制中心 (CDC) 的当前数据集进行基本时间序列预测,该数据集是围绕 Covid-19 疫苗安全性争议的中心。
在一系列三篇长博文中,道德怀疑论者(TES) 对自 2021 年初推出 Covid-19 疫苗以来癌症和其他死亡率大幅增加敲响了警钟。 他使用了 CDC 的公开数据,他的主要图表之一如下:

在反驳中,杰弗里·莫里斯(JM) 重新分析了数据并得出结论认为,到 2022 年 3 月 12 日,该信号似乎并不引人注目。 他的两张图表如下:

JM 写道:
评估他的说法的关键当然是查看 2022 年的数据,因为它们变得更加成熟,我们整个夏天都有更完整的数据。 如果癌症死亡人数从 2021 年春季最低点开始的增加持续到 2022 年,那么这将为他的假设提供更多支持,但如果从 2022 年初开始的下降趋势持续下去,那么这将削弱固有的更高超额的说法2021 年初引入的某些因素引发的癌症死亡。
现在,我们可以在 JMP Pro 中分析 2022 年夏季的数据,以了解我们的情况。 数据以两个 .csv 文件形式提供,涵盖2014-2019和2020-2022年。 后者被视为“临时”,因为新数据不断添加,而最后几周的数字往往异常低,因为它们尚未完全制成表格。 后续分析基于2022年11月22日下载的数据。
为了调查死亡率过高的问题,我们需要对一段时间内的基线死亡率进行适当的估计,可以从当前数据中减去该估计值来估计差异。 TES描述了一个相当复杂的工作流程为了实现这一目标,包括为期 6 周的平滑功能和“拉动效应”,以适应早期因 Covid-19 而不是癌症死亡的个人。 不幸的是,TES 似乎没有提供任何代码来准确地重现他的结果,尽管他的方法中的步骤似乎是合理的。 JM 将基线估计为基本线性趋势加上每周季节性平均值(分别为上左图中的黄线和蓝线)。 他令人钦佩地提供R代码,我能够成功运行并重现他的结果。 TES 和 JM 的基线都是基于 2014-2019 年数据对 2020-2022 年的有效预测,鉴于大流行于 2020 年 1 月左右开始,这是一个合理的时间划分。
鉴于最近梯度提升树在时间序列预测方面取得了巨大成功,一种有吸引力的再分析方法是使用 XGBoost 根据 2014-2019 年数据预测 2020-2022 年死亡率,并将其用作评估 2020-2022 年期间超额死亡人数的基线。 使用 XGBoost 进行预测的关键是设计适当的基于时间的特征,以实现未来的通用性。 根据数据和问题的结构,可以实现许多功能;看看我们的国际JF论文有关这方面的一些详细信息。 为了便于与 TES 和 JM 进行比较,我使用了一种简单的方法,只有两个数字特征:一年中的第几周和 156 周的滞后值。 更复杂的功能当然是可能的,尽管这两个功能似乎做得相当不错,并为 XGBoost 解决此类问题的能力提供了很好的初步说明。 结果在图形生成器中显示如下:

顶部面板以蓝色显示原始数据,以红色显示 XGBoost 预测。 简单的 XGBoost 预测通过了“眼球”测试,尽管它们很可能通过更仔细的建模得到改进。 中间的面板包含拟合的残差,2020 年以后的结果可以被视为每周超额癌症死亡人数的估计。 我们看到 2021 年中期之后大多数几周的观测数据都超出了预测。 底部面板显示残差的累积总和,最终数字 15,000 是 2022 年 10 月 1 日超额死亡总数的近似估计。 该分析的初步结论为 TES 声称从 2021 年中期开始癌症死亡人数过多提供了支持,表明疫苗可能发挥了因果作用。
估计超额死亡人数是一个复杂的话题,前面的分析旨在作为一个简单的起点,其说明性多于确定性。 这CDC和英国奥赫德有更深入的页面,网上有大量的分析和争议。 例如,请参阅以下之间的分歧杰明和马修·克劳福德一些令人惊讶的保险数据显示了区域辛普森悖论,收回的纸Kostoff 等人的文章,以及挑衅性的文章诺曼·芬顿及其同事和史蒂夫·基尔希来自英国的数据。 看看冬季会带来哪些数据和争论将会很有趣,值得庆幸的是,我们拥有像 JMP Pro 这样的可靠工具,可以自己高效、直接地分析数据。
在 JMP Pro 中重现 XGBoost 预测分析的步骤如下,您可以使用这些步骤立即或稍后在有更多数据可用时执行自己的进一步探索:
- 下载、打开并连接两个 CDC 表( 2014-2019和2020-2022年)。 将数据子集为“发生管辖区 ==”美国”。选择最后五行,然后单击“行”>“隐藏和排除”。 我排除了最后五行,并根据原始数据的初始图形生成器显示选择 2022 年 10 月 1 日作为截止日期。 始终绘制您的数据!
- 选择 2020-2022 年的行,然后选择“行”>“行选择”>“列中的名称选择”,以创建一个名为 Val20 的新变量,其值 2014-2019 年(未选定)为 0,2020-2022 年(选定)值为 1。 通过右键单击列最左侧面板中该变量旁边的红色直方图,将该变量的分析类型更改为连续。 Val20 用作 XGBoost 中的验证列,以在模型拟合期间支持 2020-2022 年。
- 数值变量 MMWR Week 已在表中,并且是我们的第一个功能。 要设计第二个功能,请选择恶性肿瘤 (C00-C97) 列,这是主要的癌症反应。在表中,右键单击该变量 > 新建公式列 > 行 > 滞后倍数。 选择 156 作为开始值和结束值,然后单击“确定”。 这将创建一个新列,它是 3 年滞后变量。 我们使用 3 年滞后,以便用 2014-2019 年的观测值完全覆盖 2020-2022 年的预测范围,没有任何泄漏。
- 安装XGBoost 插件。单击加载项 > XGBoost > XGBoost。 将恶性肿瘤 (C00-C97) 指定为 Y 响应,将 MMWR 周和新的 3 年滞后特征指定为 X,将 Val20 指定为验证。 单击“确定”,选中“自动调谐”,然后单击“执行”。 结果应类似于以下内容。

- 在 XGBoost 输出窗口中,单击模型 1 旁边的红色三角形,然后单击保存预测。 这会将所有行的预测保存到 JMP 表中。 2020-2022 年的数据是预测,因为我们在训练期间提供了这些数据。 请注意,右上图还显示,观测值超过 2020-2022 年的预测,大多数点位于 45 度参考线上方即可证明这一点。
- 在表中,选择恶性肿瘤 (C00-C97) 和新的预测列。 右键单击 > 新建公式列 > 合并 > 差值。 这将创建一个新的残差列。 选择并右键单击该新列 > 新公式列 > 行 > 累积和。
- 在图形生成器中,将“周结束日期”拖到 X 上,并将之前创建的变量拖到 Y 上,以创建之前显示的显示。
随附包含所有数据(步骤 1-3)以及嵌入式 XGBoost 和图形生成器脚本(步骤 4-7)的 JMP 表。 请随时就此处的主题与我联系。