2020年4月1日更新:
根据后续披露的数据,并没有 80% 的感染者能在生病第一时间就去检测,实际检测率远低于此,因此当时基于该假设估算的 17,813 人远远偏离了真实数据。关于疫情的实时和历史详细数据,可参考 Bing 的新冠肺炎疫情追踪器:
> > 新冠肺炎疫情追蹤 - Bing > >
英国学者托马斯·贝叶斯(Thomas Bayes)提出了一个伟大的定理,即贝叶斯定理(Bayes’ Theorem)。这个定理的核心公式如下:
$$P(A|B)=\frac{P(B|A)P(A)}{P(B)}$$
其中:
- $A$ 和 $B$ 是两个随机事件。
- $P(B)$ 指 $B$ 事件发生的概率,且 $P(B) \neq 0$。
- $P(A)$ 是 $A$ 事件独立发生的概率(先验概率)。
- $P(B|A)$ 是在 $A$ 事件发生的前提下, $B$ 事件发生的条件概率。
- $P(A|B)$ 是我们最终想知道的,即在 $B$ 事件发生的前提下, $A$ 事件发生的条件概率(后验概率)。
一个直观的例子
我们可以通过一个日常生活中的场景来理解:
- P(小明迟到) = 0.3:意思是小明独立迟到的概率为 30%。
- P(老板考察出勤) = 0.2:意思是老板独立考察出勤的概率是 20%。
- P(老板考察出勤 | 小明迟到) = 0.25:这是一个条件概率,意思是小明已经迟到了,而这时碰巧老板来考察出勤的概率是 25%。
通过上面这三个已知条件,我就能通过贝叶斯公式推测出我们关心的另一个条件概率:P( 老板考察出勤 | 小明迟到), 即如果已知老板今天来考察出勤了,那么小明刚好也迟到了的概率是多少。
$$P(老板考察出勤|小明迟到) = \frac {P(小明迟到|老板考察出勤) \times P(老板考察出勤)}{P(小明迟到)} = \frac {0.25 \times 0.2}{0.3} \approx 0.1667$$
(注:原博客中的算式 P(老板考察出勤|小明迟到) = 0.250.3/0.2=0.375 在逻辑和代入上存在混淆,此处已修正为符合贝叶斯逻辑的演示)*。
利用贝叶斯定理推导新冠肺炎真实感染人数
我认为,我们可以使用这个公式来推导一下当时新冠肺炎的真实感染人数。虽然下面的计算过程可能会有些枯燥,但揭示的结果很有参考意义。
1. 整理已知数据 (以 2020 年 3 月 19 日美国数据为例)
我们知道美国的人口大概是 327,200,000(三亿两千七百二十万)。截至 3 月 19 日,美国一共测试了 103,945(十万三千九百四十五)人,其中检查出阳性感染者 14,250(一万四千二百五十)人。
我们已知的信息可以整理成以下代码块中的变量:
1 | N = 327200000 # 美国总人口 (Population) |
2. 计算条件概率
首先,我们可以从上述数据中计算出一个人参加测试的概率 $P(TESTED)$:
$$P(TESTED)= \frac {TESTED}{N}= \frac {103945}{327200000} \approx 0.031768%$$
然后,我们可以计算出在已经参加测试的人群中,结果是阳性(生病)的概率,即条件概率 $P(INFECTED | TESTED)$:
$$P(INFECTED|TESTED)= \frac {POSITIVE}{TESTED}= \frac {14250}{103945} \approx 13.709%$$
3. 引入未知数
我们目前的最终目标是计算美国总人口中的真实感染率 $P(INFECTED)$。
根据贝叶斯公式:
$$P(INFECTED|TESTED)=\frac{P(TESTED|INFECTED) \times P(INFECTED)}{P(TESTED)}$$
在上面的公式中,我们还缺少一个关键的条件概率:$P(TESTED|INFECTED)$。这意味着“如果一个人已经感染了,他会有多大的概率去参加检测”。我们用一个未知数 $\pi$ 来表示它:
$$\pi = P(TESTED|INFECTED)$$
4. 公式推导与求解
套上我们已知的数值,我们得到:
$$13.709% = \frac{\pi \times P(INFECTED)}{0.031768%}$$
通过变形,我们可以得到计算真实感染率 $P(INFECTED)$ 的表达式:
$$P(INFECTED) = \frac {13.709% \times 0.031768%}{\pi}$$
5. 解决未知数 $\pi$ 的局限性
现在我们来讨论这个关键的 $\pi$。你可以查看 CDC 当时公布的数据页面:CDC Cases in US。
特别看这张图:

这张图展示了 CDC 公布的发病日期统计。你可能会好奇,CDC 怎么知道那些没测试的人是什么时候发病的。这是他们后来根据流行病学调查更新的数据。例如,如果 CDC 在 3 月 20 日诊断出一个病人,问他什么时候开始发烧的,他说“4天前”,那么 CDC 就要把这个病例归并在 3 月 16 日。在此基础上,如果加上 14 天的潜伏期,意味着这个人可能在 3 月 2 日就已经被感染了。
在我撰写这篇博客时(2020年3月21日),使用的数据是 3 月 19 日的,这一部分用于回顾和修正的流行病学数据还没有完全整理出来。一旦这部分数据完整,我们就可以通过比较“确诊人数”和“实际发病人数”来估算 $\pi$ 值。
6. 假设与估算结果
由于当时缺乏 $\pi$ 的准确数据,我们只能做一个假设来演示计算:
假设:人们的防疫意识很高,且检测资源充足,80% 的感染者在生病后第一时间就会去参加检测(即 $\pi = 0.8$)。
那么,我们可以得到一个估算的真实感染率:
$$P(INFECTED) = \frac {13.709% \times 0.031768%} {0.8} \approx 0.00544391%$$
这意味着估算的真实感染率是 0.00544391%。乘以美国总人口 327,200,000,大概是 17,813 人被感染。
总结与反思
正如文章开头的更新所言,这个估算结果(17,813人)与后来的事实相比是严重偏低的。
这恰恰说明了在应用贝叶斯定理时,先验假设和关键参数(如 $\pi$)的准确性至关重要。在疫情初期,由于检测能力有限、无症状感染者的存在以及统计数据的滞后,我们很难准确知晓 $P(TESTED|INFECTED)$。如果实际上只有 10% 甚至是 1% 的感染者参加了检测($\pi$ 值很小),那么公式推导出的真实感染人数将比我们当时的估算高出几十倍甚至上百倍。
贝叶斯定理提供了一个强大的逻辑框架,让我们能够在不完全信息下进行推断,但推断的质量永远取决于输入数据的质量。
相关资源推荐
如果你对贝叶斯公式及其在疫情中的应用感兴趣,可以看看以下资源:
视频教程(Bilibili):
可汗学院(Khan Academy):
- 可汗学院推出的一个讲解武汉疫情初期的视频也很有意思:戳这里观看 (YouTube)
大神对 COVID-19 的深度研究: