目录
1. 混检阳性概率的计算
2. 混管阳性时你阳性的概率有多大?
2.1 贝叶斯分析结果的解释
1. 混检阳性概率的计算
目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的概率有多大呢?
假设人群整体感染率为p,
十个人中任意一个人为阳性的话,混检结果为阳性。
只有十个人都是阴性时,混检结果才为阴性。
这样为了方便,我们假定混检的漏检概率为0,即任何一个人是阳性的话肯定能够得到混检阳性的结果;虚警概率也为0,即十个人全阴性的条件下不会报告阳性。
由于人群整体感染率为p,所以任意某人为阴性的概率为(1-p),十个人全部是阴性的概率为。
因此,十混一混检阳性率为: .
当然,任意K混一的混检阳性率为: .
用python写个小程序来计算一下不同的人群感染率条件下的混检阳性概率,代码如下:
import matplotlib.pyplot as pltimport numpy as npProb_pos = []Prob_pos_dict = dict()for k in range(20): p = 0.05 * k Prob_pos.append(1 - (1-p)**10) Prob_pos_dict[p] = (1 - (1-p)**10) print('p = {0:4.2f}, Prob_pos = {1:5.3f}'.format(p,Prob_pos[k]))p = np.arange(0,1,0.05)plt.plot(p, Prob_pos) plt.grid()plt.xlabel('basic positive probability')plt.ylabel('mixed_10 positive probability')
运行以上程序可以得到结果如下:
p = 0.00, Prob_pos = 0.0000
p = 0.05, Prob_pos = 0.4013
p = 0.10, Prob_pos = 0.6513
p = 0.15, Prob_pos = 0.8031
p = 0.20, Prob_pos = 0.8926
p = 0.25, Prob_pos = 0.9437
p = 0.30, Prob_pos = 0.9718
p = 0.35, Prob_pos = 0.9865
p = 0.40, Prob_pos = 0.9940
p = 0.45, Prob_pos = 0.9975
p = 0.50, Prob_pos = 0.9990
p = 0.55, Prob_pos = 0.9997
p = 0.60, Prob_pos = 0.9999
p = 0.65, Prob_pos = 1.0000
p = 0.70, Prob_pos = 1.0000
p = 0.75, Prob_pos = 1.0000
p = 0.80, Prob_pos = 1.0000
p = 0.85, Prob_pos = 1.0000
p = 0.90, Prob_pos = 1.0000
p = 0.95, Prob_pos = 1.0000
这个结果意味着什么呢?
当p=5%,也就是人群中整体感染率达到5%时,十混一核酸混检阳性率就会达到惊人的40.13%。
当p=10%时,则核酸混检阳性率P=65.13%。
当p=20%时,则核酸混检阳性率P=89.26%。
当p=30%时,则核酸混检阳性率P=97.17%。
也就是说,如果人群中的感染率达到一定数值(比如说30%以上)后,你只要去做核酸混检,基本就是混管阳性。而且在做核酸的过程中,你等于是跟阳性感染者亲密接触。所以在目前放开的条件下,人群感染率自然地会逐渐增长,这种情况下再做混管检测除了劳民伤财外,只会起到加速扩散传播的效果。
2. 混管阳性时你阳性的概率有多大?
我们可以进一步问一个问题,你在其中的那个混管检测的结果为阳性时,你是阳性的概率有多大呢?
我们可以基于贝叶斯定理对这个问题进行分析。贝叶斯定理可以用以下公式(有多种表达方式,此为其中一种。有兴趣的小伙伴可以参考蒙提霍尔问题(The Monty Hall Problem)解析(贝叶斯分析、Python仿真))表示:
其中,
H表示你为阳性的假设,P(H)表示你为阳性的先验概率,其实就是人群整体感染率p
D表示观测结果,即你所在混管检测的结果为阳性。P(D)表示在当前人群群体感染率的条件下任意混管报告阳性的概率,也可以写为P(D;p)。
P(D|H)表示似然概率,意思是说如果你是阳性,则你的混管检测结果为阳性的概率。由于前面我们已经假设了混管检测的漏检和虚警概率均为0,所以很显然有。
这个问题其实就是如果你的混管检测的结果为阳性,你为阳性的后验概率是多少。基于以上分析,本问题的后验概率可以改写为:
同样,在上面的python程序的基础上进一步追加几行代码来计算在不同人群群体感染率条件下混管检测为阳性时你为阳性的后验概率,代码如下:
posterior = []for k in range(1,20): prior = 0.05 * k P_data = Prob_pos[k] posterior.append(prior * 1.0 / P_data) print('p = {0:4.2f}, posterior = {1:5.3f}'.format(prior, posterior[k-1])) p = np.arange(0.05,1,0.05)plt.plot(p, posterior) plt.grid()plt.xlabel('basic positive probability')plt.ylabel('posterior probability')
运行结果如下:
p = 0.05, posterior = 0.125
p = 0.10, posterior = 0.154
p = 0.15, posterior = 0.187
p = 0.20, posterior = 0.224
p = 0.25, posterior = 0.265
p = 0.30, posterior = 0.309
p = 0.35, posterior = 0.355
p = 0.40, posterior = 0.402
p = 0.45, posterior = 0.451
p = 0.50, posterior = 0.500
p = 0.55, posterior = 0.550
p = 0.60, posterior = 0.600
p = 0.65, posterior = 0.650
p = 0.70, posterior = 0.700
p = 0.75, posterior = 0.750
p = 0.80, posterior = 0.800
p = 0.85, posterior = 0.850
p = 0.90, posterior = 0.900
p = 0.95, posterior = 0.950
2.1 贝叶斯分析结果的解释
如何解释这一结果呢?
我们知道贝叶斯定理的一个种解释时,基于观测结果来更新对一件事件发生的信念(概率)。由于人群整体感染率为p,那么在我们没有做混管检测的条件下,很自然地我们应该认为自己是阳性的概率就等于这个p,这个称之为先验概率。
基于混管检测结果,我们将根据混管检测结果所提供的信息更新自己是阳性的概率。
如果群体感染率比较高,比如说达到了30%了,则由上一节仿真结果可知,混管检测几乎100%是阳性了,这意味着混管检测已经不能为“你是否阳性”的判断提供什么有效的信息了。因此,在群体感染率30%以上时,后验概率基本就等于先验概率。
只有在群体感染率还比较低的时候,混管检测结果还有一定的参考意义。比如说,p=0.05时,如果你的混管检测结果为阳性的话,你为阳性的概率将由5%上升为12.5%。