混检阳性概率的计算(贝叶斯定理的一个应用例)
Posted 笨牛慢耕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了混检阳性概率的计算(贝叶斯定理的一个应用例)相关的知识,希望对你有一定的参考价值。
目录
1. 混检阳性概率的计算
目前核酸混检的基本做法是十混一,如果阳性人群分布完全随机,那么做十混一混检为阳性的概率有多大呢?
假设人群整体感染率为p,
十个人中任意一个人为阳性的话,混检结果为阳性。
只有十个人都是阴性时,混检结果才为阴性。
这样为了方便,我们假定混检的漏检概率为0,即任何一个人是阳性的话肯定能够得到混检阳性的结果;虚警概率也为0,即十个人全阴性的条件下不会报告阳性。
由于人群整体感染率为p,所以任意某人为阴性的概率为(1-p),十个人全部是阴性的概率为。
因此,十混一混检阳性率为: .
当然,任意K混一的混检阳性率为: .
用python写个小程序来计算一下不同的人群感染率条件下的混检阳性概率,代码如下:
import matplotlib.pyplot as plt
import numpy as np
Prob_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 贝叶斯分析结果的解释
如何解释这一结果呢?
贝叶斯定理的一种解释是,基于观测结果(D,也称为evidence)来更新对一件事件发生的信念(概率:从先验概率更新为后验概率)。由于人群整体感染率为p,那么在我们没有做混管检测的条件(即没有任何观测实现数据,或者说没有任何额外的证据的情况)下,很自然地我们应该认为自己是阳性的概率就等于这个p,这个称之为先验概率。
基于混管检测结果,我们将根据混管检测结果所提供的信息更新自己是阳性的概率。
如果群体感染率比较高,比如说达到了30%了,则由上一节仿真结果可知,混管检测几乎100%是阳性了,这意味着混管检测已经不能为“你是否阳性”的判断提供什么有效的信息了。因此,在群体感染率30%以上时,后验概率基本就等于先验概率。
只有在群体感染率还比较低的时候,混管检测结果还有一定的参考意义。比如说,p=0.05时,如果你的混管检测结果为阳性的话,你为阳性的概率将由先验的5%上升为后验的12.5%。
本来是加在这一篇末尾的,修改完后提交就通不过审查了。。。不知道碰上了什么敏感词(笑哭。。。),所以只能碰运气似的另起一篇^-^
以上是关于混检阳性概率的计算(贝叶斯定理的一个应用例)的主要内容,如果未能解决你的问题,请参考以下文章