过去几年,即使在 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 年初引入的某些因素引发的癌症死亡。
我们现在有了 2022 年夏季的数据,可以在 JMP Pro 中进行分析,看看我们的立场。 数据在两个 .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 进行预测的关键是设计适当的基于时间的特征,以实现对未来的普遍性。 根据数据和问题的结构,许多特征是可能的;看看我们的IJF纸有关这方面的一些细节。 为了便于与 TES 和 JM 进行比较,我使用了一种只有两个数字特征的简单方法:一年中的第几周和 156 周的滞后值。 更复杂的功能当然是可能的,尽管这两个功能似乎做得相当不错,并且初步说明了 XGBoost 解决此类问题的能力。 结果显示在图形生成器中:

顶部面板以蓝色显示原始数据,以红色显示 XGBoost 预测。 简单的 XGBoost 预测通过了“眼球”测试,尽管它们很可能通过更仔细的建模得到改进。 中间面板具有拟合的残差,2020 年以后的结果可以被视为每周超额癌症死亡的估计值。 我们看到观察到的数据超过了 2021 年中期过去的大多数周的预测。 底部面板具有残差的累积总和,最终数字 15,000 是对 2022 年 10 月 1 日超额死亡总数的近似估计。 该分析的初步结论支持 TES 的说法,即从 2021 年中期开始,癌症死亡人数过多,这表明疫苗可能起到了因果作用。
估计超额死亡人数是一个复杂的话题,前面的分析旨在作为一个直接的起点,比起决定性的来说更具有说明性。 这CDC和英国OHID有更深入的页面,网上有无数的分析和争论。 例如,请参阅之间的分歧JM和马修·克劳福德一些令人惊讶的保险数据显示出区域性的辛普森悖论,收回的纸由 Kostoff 等人撰写,以及由诺曼·芬顿及其同事和史蒂夫基尔希来自英国的数据。 看看冬季月份带来的数据和辩论会很有趣,幸运的是,我们有一个可靠的工具,如 JMP Pro,可以自己高效、直接地分析数据。
在 JMP Pro 中重现 XGBoost 预测分析的步骤如下,您现在可以使用它来执行自己的进一步探索,也可以在以后有更多数据可用时使用它:
- 下载、打开并连接两个 CDC 表 ( 2014-2019和2020-2022 ). 将数据子集到 Jurisdiction of Occurrence == “United States”。选择最后五行,然后单击行 > 隐藏和排除。 我排除了最后五行,并根据原始数据的初始 Graph Builder 显示选择 2022 年 10 月 1 日作为截止日期。 始终绘制您的数据!
- 选择 2020-2022 年的行,然后选择“行”>“行选择”>“列中的名称选择”以创建一个名为 Val20 的新变量,该变量的值 0 表示 2014-2019 年(未选中),1 表示 2020-2022 年(选中)。 通过右键单击列最左侧面板中它旁边的红色直方图,将此变量的分析类型更改为连续。 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 指定为验证。 点击 OK,勾选 Autotune,然后 Go。 结果应类似于以下内容。

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