1 核酸检测之迷

当下,全国各地都出现新冠疫情反弹的迹象。有效遏制疫情蔓延的一个重要手段是全民核酸检测。以笔者所在的天津西青区为例,截止3月14日,政府已经组织了5次核酸检测。为什么要进行多轮核酸?一个重要原因是检测的“真阳性率”(true positive rate, TPR)不是100%,即当某个体携带病毒时,单次核酸检测不能保证给出阳性诊断结果。

那么,新冠检测的真阳性率到底是多少?或者说,假使一个人患病,单次检测有多大概率识别出来?尽管该问题至关重要,媒体却鲜有直接报道。不过,在2021年11月23的大连疫情报道中有这样一段话:

疫情发生后到检出阳性前,至少进行5次及以上核酸检测的阳性人员为145人,占总病例数的42.77%。

事实上,该描述就足以让我们估算真阳性率了。

2 真阳性率估计

2.1 模型设定

假如某个体确实为新冠病毒携带者,不妨设单次核酸检测能测出其为阳性的概率为$p$

对于该患者,如果在首次检测为阳性之前,共进行了$K$次结果为阴性的检测,不妨合理地认为$K$服从几何分布,有概率:

$$f(K=k)=(1-p)^kp \tag{1}$$

那么,阴性结果小于等于$k$次就可以出现阳性结果,或者说$K \le k$的概率为:

$$F(K=k, p) = \sum_{0}^{k} f(K = k) \tag{2}$$

新闻中说“至少进行了5次及以上核酸”才测出阳性,即至少有4及以上次的阴性检测,也就是 $K \geq 4$。该概率可以用式3表示:

$$1 - F(K=3, p) \tag{3}$$

式3是我们的推导出的核心公式,它表示对某一个新冠患者,给定单次检测成功率$p$时,“至少进行了5次及以上核酸”才测出阳性的概率。不妨设“某患者至少进行了5次及以上核酸”才测出阳性这一事件为事件A。

据新闻描述,在339个病例中,A事件共发生了$145$次,发生率 $0.4277 = 145/339$ 。那么该新闻所描述情况发生的概率为:

$$\text{dbinom}\left(\ 145 , \ 339, \ 1 - F(K=3, p) \ \right) \tag{4}$$

式4中,dbinom(x, size, prob)是二项分布的密度函数。x表示A事件发生的次数,size 是总病例数,prob是A事件发生的概率,包含了待估计的$p$

2.2 似然估计

基于式4,可以得到似然函数:

$$L(p) \propto F(k=3, p)^{194} [1 - F(k=3, p )]^{145} \tag{5}$$

其中:

  • $F(k=3, p)$ : 最多进行4次核酸查出阳性的概率。
  • $1 - F(k=3, p )$ : 最少进行5次核酸查出阳性的概率。

将式5取对数:

$$\log L(p) \propto 193 \times \log(F(k=3, p)) + 145 \times \log(1 - F(k=3, p ))\tag{5}$$

可以利用Rnlm()函数来求解:

# nlm()函数只求最小值,因此需要定义原函数相反数,才能获得该函数最大值
fn <- function(p){
  -193 * log(pgeom(3, p)) - 145 * log(1 - pgeom(3, p))
}

mle <- nlm(fn, p = .2) # 0.2是猜的初始值

$p = 0.191$。 也就是说,单次核酸检测能识别患者的概率约为19.1%。

3 小结

19.1%的真阳性率并不理想。这意味着组织5次核酸检测,患者被筛查出来的概率只有65.3%:

pgeom(4, mle$estimate)
## [1] 0.6528114

通过下面代码,可以得到对于确实患病的人,检测次数小于等于 $N$ 次便能查出阳性的概率:

result <- cbind(1:21, pgeom(0:20, mle$estimate)) 
colnames(result) <- c("N", "prob")
result
##        N      prob
##  [1,]  1 0.1906934
##  [2,]  2 0.3450228
##  [3,]  3 0.4699226
##  [4,]  4 0.5710049
##  [5,]  5 0.6528114
##  [6,]  6 0.7190180
##  [7,]  7 0.7725994
##  [8,]  8 0.8159632
##  [9,]  9 0.8510578
## [10,] 10 0.8794601
## [11,] 11 0.9024462
## [12,] 12 0.9210491
## [13,] 13 0.9361045
## [14,] 14 0.9482890
## [15,] 15 0.9581499
## [16,] 16 0.9661304
## [17,] 17 0.9725891
## [18,] 18 0.9778162
## [19,] 19 0.9820465
## [20,] 20 0.9854701
## [21,] 21 0.9882409

可以看到,至少要检测15次,才能把误诊的概率降到5%以下。而根据媒体报道,大连疫情中:

其中一人在隔离期间检出阳性前,多达16次核酸检测都是阴性。

核酸检测狭义上只是一种技术,但在广义上是一项庞大的系统工程。从设备的采购、保存,到医护人员的实操,再到检测机构的分析,甚至于疫情本身的发展阶段,任何一个因素都可能对核酸结果的准确性产生决定性影响,因此,核酸检测准确性在不同地域和时段会呈现波动性,大连的经验并不一定适用于其他地区。此外,本文也只是将核酸检测视为一个黑箱,对每次检测作了独立性假设,鉴于现实情况的复杂性,所估计的数值也能只算作一种观点。但是,无论是文字报道还是统计分析,都意味着去年大连疫情中检测手段缺乏可靠性是一个不争的事实,这提醒我们要更审慎地看待确诊病例等现有统计数字。

发表/查看评论