德国的 COVID,时间序列的 LOO-CV

机器算法验证 时间序列 贝叶斯 交叉验证 流行病学 pymc
2022-02-08 12:00:37

Science [1] 中的论文推断了德国 COVID 传播的变化点。假设一个(红色)、两个(橙色)和三个(绿色)变化点,作者拟合了每日病例数。每个更改点都会向模型添加两个参数。

时间序列的 LOO-CV

很难相信三个变化点模型捕捉到了一个变化点模型中缺少的一些基本物理现实。“检测到三个对应的变化点”的结论是基于留一法交叉验证(LOO-CV)分数的比较:

              [loo log-score] [standard error] [effective number of parameters]
three points   787             15               13    
two points     796             17               13
one point      819             17               13   

pymc3.compare(..., ic='LOO', scale='deviance')返回(d_loo是相对差异,dse是每个模型与排名靠前的模型之间得分差异的标准误差):

                 loo    p_loo    d_loo       weight       se      dse
three points 786.543  13.3241        0     0.933612  15.2098        0
two points   795.797  12.5467  9.25366    0.0662461  16.6689  4.88424
one point    819.280  13.3403   32.737  0.000141764   17.106  8.25306

pymc3.plot_elpd显示这个情节:

在此处输入图像描述

我还绘制了逐点预测的准确性: 在此处输入图像描述

LOO-CV 使用是否正确?

有与论文 [4] 相关的电子信件交流和作者的技术报告 [5]。

  1. Dehning, J., Zierenberg, J., Spitzner, FP, Wibral, M., Neto, JP, Wilczek, M., & Priesemann, V. (2020)。推断 COVID-19 传播的变化点揭示了干预措施的有效性。科学。 http://dx.doi.org/10.1126/science.abb9789
    代码和数据:https ://zenodo.org/record/3780722

  2. Vehtari, A.、Gelman, A. 和 Gabry, J. (2017)。使用留一法交叉验证和 WAIC 的实用贝叶斯模型评估。统计和计算,27(5),1413-1432。
    https://doi.org/10.1007/s11222-016-9696-4(PyMC3 中使用相同的引用)

  3. pymc3.loo以及pymc3.compare文档和代码
    https://docs.pymc.io/api/stats.html
    https://github.com/arviz-devs/arviz/blob/18797b81/arviz/stats/stats.py

  4. https://science.sciencemag.org/content/early/2020/05/14/science.abb9789/tab-e-letters

  5. https://github.com/Priesemann-Group/covid19_inference_forecast/blob/aa2516680c1f3800225e5e7abce07607ad03a795/technical_notes_dehning_etal_2020.pdf

1个回答

概览 速记

  • 具有三点的模型确实更适合。
  • 与三点的配合只是稍微好一点。
  • 只有一分的模型还不错locv 分数的差异可能表明具有更多点的模型是显着/可能/可能的改进,但影响大小只是很小。
  • 即使三点模型很合适,它也可能不需要是物理现实。
  • 更好的拟合应该被解释为确认具有一个转折点的零假设 SIR 可能不正确(在“不完全正确”的意义上,它可能仍然是一个相当好的描述)。它不能确认具有三个点的替代模型是正确的(在物理意义上)。正确的模型(真实模型)实际上可能是不同的模型(例如,平滑过渡而不是变化点)。它只是确认替代模型表现更好。

很难相信三个变化点模型捕捉到了一个变化点模型中缺少的一些基本物理现实。

三个变化点的拟合确实更准确

不难相信具有三个变化点的模型会做得更好。一个简单的 SIR 模型(假设所有人的均匀混合)并不完全符合现实。这些变化点将有助于弥补这一缺点(使其更灵活,能够适应更广泛的不同曲线)。

但它可能无法捕捉到物理现实

然而,你怀疑它是否捕捉到了物理现实是正确的。SIR 模型被设计为机械模型。然而,当它不够准确时,它实际上就变成了一个经验模型。

基本参数可能不一定代表某些物理现实。(如果你愿意,你可以拟合一个显然没有任何物理现实的机械模型)

在不改变流行病学参数的情况下,有很多方法可以降低增长率。在空间和网络 SIR 模型中,这可能是由于局部饱和(例如,参见此处的示例)。

因此

  • 与 SIR 模型的拟合将低估值(因为较低值往往更适合曲线中的偏转)。R0R0
  • 当 SIR 模型通过变化点变得更加灵活时,最初可能会更高,但拟合将表明增长参数的降低,这实际上可能不存在。R0β

一变点

那么,这些变化点是虚构的吗?我想不是。确实发生了很大变化。β

我不认为这种增长率的下降不会发生,而是由于对 SIR 模型的奇怪调整使其自动下降。

虽然当较低时,我认为它不包括在模型参数之一并且似乎是固定的,但在不改变流行病学参数的情况下,增长率可能会急剧下降。N

dIdt=SNIf N or S = N-Iare over/under estimatedthen the drop in this termbecomes underestimatedβIn that case β will getunderestimated in order tocorrect for the wrong S/N termIμI

如果使用了错误的,那么模型将被推送来纠正这个问题。当我们错误地假设所有案例都在测量时也是如此(因此低估了案例的数量,因为我们没有包括漏报)。N

但无论如何,我想可以合理地说有转折点/下降,有许多流行病学曲线显示增长率迅速下降。我认为,这不是由于饱和(增强免疫力)等自然过程,而是主要由于参数的变化。β

两三点

这些模型的效果实际上只是非常微妙的。这些额外的变化点所做的是使从增长到下降的变化更加平滑,而且这只发生在很短的时间内。因此,在 3 月 8 日至 22 日之间,您将获得三个小步骤,而不是一大步。

不难相信你会得到的平稳下降(许多机制可能会产生这样的变化)。更难的是解释。变化点与特定事件相关。β

例如,请参阅摘要中的此引用

“专注于 COVID-19 在德国的传播,我们发现了与公开宣布的干预措施的时间密切相关的有效增长率变化点”

或者在文中

第三个变化点……是在 3 月 24 日推断出来的这个推断的日期与第三次政府干预的时间相匹配(CI[21,26])]

但这只是猜测,可能只是虚构。尤其如此,因为他们在这些日期准​​确地放置了先验(标准偏差或多或少与可信区间的大小相匹配,我们有“后验分布先验分布”,这意味着数据没有添加太多信息关于日期):

日期的先验

所以这不像他们做了一个三变化点模型,结果巧合地匹配了特定干预的日期(这是我快速浏览文章后的第一个解释)。他们没有检测到变化点,更像是该模型具有与特定干预措施密切相关的倾向,并将“检测到”点放置在干预措施的日期附近。(此外还有报告延迟的免费参数,它允许在曲线变化日期和干预变化日期之间有几天的灵活性,因此无法精确定位/检测/推断变化点的日期非常准确和总体上它更模糊)

留一出交叉验证。

LOO-CV 使用是否正确?

我相信 LOO-CV 已正确应用。(但解释很棘手)

我必须深入研究代码才能确切知道,但我没有理由怀疑它。这些分数意味着具有三个变化点的函数没有过度拟合,并且能够更好地捕捉模型的确定性部分(但并不是说具有三个点的模型比具有一个点的模型好太多,只是一个小的改进)。

  • 函数没有过度拟合并不奇怪。有相当多的数据点可以消除噪声并防止拟合函数捕获太多噪声而不是潜在的确定性趋势。
  • 这三个变化点能够更好地捕捉确定性模型并不奇怪。开箱即用的标准 SIR 模型并不是很合适。您可以使用高阶多项式拟合或样条曲线获得类似的改进,而不是更改点。更改点改进模型可能不需要是因为机械的潜在原因。

您可能会想,嘿,但是红色、橙色、绿色三条曲线之间的细微差别呢?

是的,确实差异很小。变化点仅在一小段时间内出现。虽然 LOO-CV 分数的差异(从 819 到 796 到 787)可能表明具有某种意义,但这可能不需要与“大”效应相关,替代模型的效应也不需要与某些现实机制。例如,请参见下图中的示例,其中额外的项能够显着改善拟合,但效果差异很小,“真实”效果是项而不是学期。但是对于那个例子,对数似然分数有很大不同:x2x3x2

> lmtest::lrtest(mod1,mod2)
Likelihood ratio test
Model 1: y ~ x
Model 2: y ~ x + I(x^2)
  #Df LogLik Df  Chisq Pr(>Chisq)   
1   3 15.345                        
2   4 19.634  1 8.5773   0.003404 **
---
Signif. codes:  
  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05
  ‘.’ 0.1 ‘ ’ 1

此外,微小的差异也可能是有问题的。它可能不是很重要,尤其是当您认为噪声可能相关时。因此,某种程度的过度拟合可能不会在留一式 CV 中受到惩罚。

示例图像和代码:

一个小而显着的影响的例子

set.seed(1)

x <- seq(0,1,0.02)
ydeterministic <- x + 0.5*x^3 
y <- ydeterministic + rnorm(length(x),0,0.2)

mod1 <- lm(y~x)
mod2 <- lm(y~x+I(x^2))

plot(x,y, main="small but significant effect", 
     cex.main = 1, pch = 21, col =1, bg = "white", cex = 0.7,
     ylim = c(-0.2,1.7))
lines(x,mod1$fitted.values,col="red", lty = 2)
lines(x,mod2$fitted.values,col="blue", lty =2)
lines(x,ydeterministic, lty = 1 )

lmtest::lrtest(mod1,mod2)

legend(0,1.7,c("true model: y = x + x³", "fit 1: y = x", "fit 2: y = x + x²"),
       col = c("black","red","blue"), lty = c(1,2,2), cex = 0.6)

此示例适用于线性模型,而不是贝叶斯设置,但它可能有助于直观地了解“显着但很小的影响”的情况,以及如何根据对数似然值而不是影响大小进行比较,与此相切。