俄罗斯地区的每日 COVID-19 病例图表在我看来令人怀疑——从统计的角度来看是这样吗?

机器算法验证 时间序列 流行病学 操纵检测
2022-01-15 04:16:10

以下是克拉斯诺达尔边疆区新发现的 COVID 感染的每日图表该地区的人口为 550 万人。

我读到它并想知道 - 从统计的角度来看,这(新病例的相对平稳的动态)看起来好吗?或者这看起来很可疑?疫情期间曲线可以这么平坦,而不需要该地区当局对数据进行任何修改吗?例如,在我的家乡斯维尔德洛夫斯克州,图表要混乱得多得多。

我是统计学的业余爱好者,所以也许我错了,这张图表并没有什么特别之处。

在此处输入图像描述

根据 2020 年 5 月 18 日的新闻报道,自流行期开始到当天,该地区共进行了 136695 次 COVID-19 检测。

截至 2020 年 5 月 21 日,该地区共记录了 2974 例感染病例。

PS 这是我发现的一个链接,该链接指向具有更好看的统计数据的页面,并且涵盖了更长的时间,特别是针对克拉斯诺达尔边疆区。在该页面上,您可以将光标悬停在图表上以获取当天的具体数字。(标题使用“每日引出”病例数,条形标题“每日确诊”病例数):

在此处输入图像描述

4个回答

这绝对是与众不同的。

原因是像这样的计数往往具有泊松分布。这意味着它们的固有方差等于计数。对于附近的计数100,的差异100意味着标准差几乎10.除非结果存在极端的序列相关性(这在生物学或医学上不合理),否则这意味着大多数个体值应该随机偏离基本假设的“真实”率,最多可达10(上下),并且在相当多的情况下(大约三分之一)应该偏离更多

这很难以真正稳健的方式进行测试,但一种方法是过度拟合数据,尝试非常准确地描述它们,并查看残差有多大。例如,这里有两个这样的拟合,一个低平滑和一个过拟合 Poisson GLM:

数字

此广义线性模型 (GLM) 拟合(在 logit 尺度上)的残差方差仅为0.07. 对于具有(视觉上)紧密拟合的其他模型,方差往往来自0.050.10. 这太小了。

你怎么知道? 引导它。 我选择了一个参数引导程序,其中数据被从分布中提取的独立泊松值替换,其参数等于预测值。这是一个这样的自举数据集:

图 2

您可以看到单个值比以前波动了多少,以及波动了多少。

这样做2000产生的时间2001方差(在两到三秒的计算中)。这是他们的直方图:

图 3

垂直的红线标记数据的方差值。

(在一个拟合良好的模型中,这个直方图的平均值应该接近于1. 平均值是0.75,略少于1,给出过拟合程度的指示。)

此测试的 p 值是这些测试的分数2001方差等于或小于观察到的方差。由于每个自举方差都较大,因此 p 值仅1/2001,基本上为零。

我对其他模型重复了这个计算。在下面的R代码中,模型根据样条的节数k和度数而变化d在每种情况下,p 值都保持在1/2001.

这证实了数据的可疑外观。事实上,如果你没有说这些是案件的数量,我会猜到它们是某种东西的百分比对于接近的百分比100这种变化将比这个泊松模型中的要小得多,而且数据看起来也不会那么可疑。


这是产生第一个和第三个数字的代码。(一个轻微的变体产生了第二个,在开始时替换XX0。)

y <- c(63, 66, 66, 79, 82, 96, 97, 97, 99, 99, 98, 99, 98, 
       99, 95, 97, 99, 92, 95, 94, 93)
X <- data.frame(x=seq_along(y), y=y)

library(splines)
k <- 6
d <- 4
form <- y ~ bs(x, knots=k, degree=d)
fit <- glm(form, data=X, family="poisson")
X$y.hat <- predict(fit, type="response")

library(ggplot2)
ggplot(X, aes(x,y)) + 
  geom_point() + 
  geom_smooth(span=0.4) + 
  geom_line(aes(x, y.hat), size=1.25) + 
  xlab("Day") + ylab("Count") + 
  ggtitle("Data with Smooth (Blue) and GLM Fit (Black)",
          paste(k, "knots of degree", d))

stat <- function(fit) var(residuals(fit))
X0 <- X
set.seed(17)
sim <- replicate(2e3, {
  X0$y <- rpois(nrow(X0), X0$y.hat)
  stat(glm(form, data=X0, family="poisson"))
})

z <- stat(fit)
p <- mean(c(1, sim <= z))
hist(c(z, sim), breaks=25, col="#f0f0f0",
     xlab = "Residual Variance", 
     main=paste("Bootstrapped variances; p =", round(p, log10(length(sim)))))
abline(v = z, col='Red', lwd=2)

克拉斯诺达尔边疆区的案例并不是唯一的。下面是来自 36 个区域的数据图(我从 84 个区域中选择了最好的示例),我们可以看到

  • 类似的欠分散
  • 或者至少这些数字似乎达到了一个“不错”数字附近的稳定期(我在 10、25、50 和 100 处画了线,其中几个地区找到了稳定期)

更多案例

关于此图的比例:它看起来像 y 轴的对数比例,但事实并非如此。它是平方根刻度。我这样做是为了像泊松分布数据那样分散σ2=μ一切看起来都一样。另请参阅:为什么建议对计数数据使用平方根变换?

该数据寻找一些明显分散不足的情况,如果它是泊松分布的话。(Whuber 展示了如何得出显着性值,但我猜它已经通过了眼间创伤测试。我仍然分享了这个情节,因为我发现有些病例没有欠离散很有趣,但它们似乎仍然坚持高原。可能不仅仅是分散不足。或者有像图像左下角的 nr 15 和 nr 22 这样的情况,它们显示分散不足,但不是固定的高原值。)。

分散不足确实很奇怪。但是,我们不知道是什么过程产生了这些数字。这可能不是一个自然过程,并且涉及到人类。出于某种原因,似乎有一些平台或上限。我们只能猜测它可能是什么(这个数据告诉我们的不多,用它来猜测可能发生的事情是高度推测性的)。它可能是伪造的数据,但也可能是一些复杂的数据生成过程并具有一定的上限(例如,这些数据是报告/注册的案例,可能报告/注册仅限于某个固定数量)。

### using the following JSON file
### https://github.com/mediazona/data-corona-Russia/blob/master/data.json
library(rjson)
#data <- fromJSON(file = "~/Downloads/data.json")
data <- fromJSON(file = "https://raw.githubusercontent.com/mediazona/data-corona-Russia/master/data.json")

layout(matrix(1:36,4, byrow = TRUE))
par(mar = c(3,3,1,1), mgp = c(1.5,0.5,0))

## computing means and dispersion for last 9 days
means <- rep(0,84)
disp <- rep(0,84)
for (i in 1:84) {
  x <- c(-4:4)
  y <- data[[2]][[i]]$confirmed[73:81]
  means[i] <- mean(y)
  mod <- glm(y ~ x + I(x^2) + I(x^3), family = poisson(link = identity), start = c(2,0,0,0))
  disp[i] <- mod$deviance/mod$df.residual
}

### choosing some interresting cases and ordering them
cases <- c(4,5,11,12,14,15,21,22,23,24,
   26,29,30,31,34,35,37,41,
   42,43,47,48,50,51,53,56,
   58,67,68,71,72,75,77,79,82,83)
cases <- cases[order(means[cases])]

for (i in cases) {
  col = 1
  if (i == 24) {
    col = 2
    bg = "red"
  }
  plot(-100,-100, xlim = c(0,85), ylim = c(0,11), yaxt = "n", xaxt = "n", 
       xlab = "", ylab = "counts", col = col)
  axis(2, at = c(1:10), labels = c(1:10)^2, las = 2)
  axis(1, at = c(1:85), labels = rep("",85), tck = -0.04)
  axis(1, at = c(1,1+31,1+31+30)-1, labels = c("Mar 1", "Apr 1", "May 1"), tck = -0.08)


  for (lev in c(10,25,50,100)) {
    #polygon(c(-10,200,200,-10), sqrt(c(lev-sqrt(lev),lev-sqrt(lev),lev+sqrt(lev),lev+sqrt(lev))),
    #        col = "gray")
    lines(c(-10,200), sqrt(c(lev,lev)), lty = 2) 
  }
  lines(sqrt(data[[2]][[i]]$confirmed), col = col)
  points(sqrt(data[[2]][[i]]$confirmed), bg = "white", col = col, pch = 21, cex=0.7)
  title(paste0(i,": ", data[[2]][[i]]$name), cex.main = 1, col.main = col)
}


### an interesting plot of under/overdispersion and mean of last 9 data points
### one might recognize a cluster with low deviance and mean just below 100
plot(means,disp, log= "xy",
     yaxt = "n", xaxt = "n")
axis(1,las=1,tck=-0.01,cex.axis=1,
     at=c(100*c(1:9),10*c(1:9),1*c(1:9)),labels=rep("",27))
axis(1,las=1,tck=-0.02,cex.axis=1,
     labels=c(1,10,100,1000), at=c(1,10,100,1000))
axis(2,las=1,tck=-0.01,cex.axis=1,
     at=c(10*c(1:9),1*c(1:9),0.1*c(1:9)),labels=rep("",27))
axis(2,las=1,tck=-0.02,cex.axis=1,
     labels=c(1,10,100,1000)/10, at=c(1,10,100,1000)/10)

也许这有点过度解释数据,但无论如何这里是另一个有趣的图表(也在上面的代码中)。下图根据过去 13 天的平均值和基于具有 Poisson 族和三次拟合的 GLM 模型的分散因子比较了所有 84 个区域(除了不适合绘图的最大三个区域)。看起来分散不足的病例通常每天接近 100 例。

似乎无论是什么导致克拉斯诺达尔边疆区出现这些可疑的水平值,它都发生在多个地区,并且可能与每天 100 例的某些边界有关。在生成数据的过程中可能会发生一些审查,从而将值限制在某个上限。不管这个过程是什么导致了删失数据,它似乎以类似的方式发生在多个地区,并且可能有一些人为的(人为)原因(例如,在较小的地区进行实验室测试的某种限制)。

比较分散

我只会提到我在其他答案中没有提到的一个方面。任何表明这明显不同寻常的分析的问题在于,它没有考虑到数据是基于看起来很奇怪而选择的。至少我会假设线程开启者不仅看到了这些数据,还看到了其他类似类型的数据集(可能甚至没有意识,但在媒体上没有注意到,因为它们看起来没有什么特别的 - 但我希望有人谁写这样的帖子更自觉地看到了)。因此,要解决的问题不是被视为孤立的数据是否与预期的数据有显着差异,而是如果一切正常(不是“正态分布”的意思,你知道我的意思),像这样或具有不同模式的数据集也会促使线程开启者在此处发布,可以预期是他们看到的所有数据集。因为我们不知道他们看到了什么,所以这很难评估,除非我们得出一个 p 值1010对于几乎任何数量的多重测试,这仍然是重要的调整。

另一种测试方法是根据数据显示的内容对未来进行预测,然后测试奇怪的趋势是否会随着不属于导致选择该数据集的观察的一部分而继续存在。

当然,另一个答案指出,这种狡猾的模式也发生在其他地区,这可以让人确信正在发生一些有意义的事情,因为它不是那么特别的选择。然而,我想说的是,无论进行何种分析,都不应忘记 选择偏差。

克拉斯诺达尔

就其分散性而言,一个地区的数据显然是不现实的。这是有关克拉斯诺达尔镇的数据。5月份样本平均值为34,离散度为8.7。

在此处输入图像描述

这比泊松分布所暗示的要多,其中分散是平均值的平方根,即 5.9。这是过度分散的,但样本量非常小,因此很难简单地拒绝泊松分布。该镇人口接近100万。

然而,当我们跳入人口为 550 万的克兰索达尔边疆区时,突然间分散性崩溃了。在您的情节中,新案例平均约为 100,但离散度为 1-2。在泊松中,您会期望分散度为 10。为什么首都会过度分散而整个地区会严重分散?这对我来说没有意义。

此外,该地区首府的所有分散都去哪儿了?“太不可思议了!” (c) 认为区域发生率与其资本高度负相关。这是该地区克拉斯诺达尔以外的案件与克拉斯诺达尔镇的散点图。 在此处输入图像描述

来源

图:来源:https ://www.yuga.ru/media/d7/69/photo_2020-05-21_10-54-10__cr75et3.jpg

抓取数据:14 45 37 37 32 25 33 40 47 40 33 38 47 25 37 35 20 25 30 37 43

俄罗斯

@AlexeyBurnakov 绘制了整个俄罗斯的图表: 在此处输入图像描述

我抓取了 5 月的数据,它严重过度分散。平均值为 10K,但方差为 756K,离差 870 远高于泊松过程建议的值。因此,俄罗斯的整体数据支持我关于克拉斯诺达尔边疆区数据异常的说法。

9623 10633 10581 10102 10559 11231 10699 10817 11012 11656 10899 10028 9974 10598 9200 9709 8926 9263 8764 8849 8894

来源

https://yandex.ru/covid19/stat?utm_source=main_title&geoId=225