1 核酸检测之迷

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

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

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

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

2 真阳性率估计

2.1 模型设定

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

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

(1)f(K=k)=(1p)kp

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

(2)F(K=k,p)=0kf(K=k)

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

(3)1F(K=3,p)

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

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

(4)dbinom( 145, 339, 1F(K=3,p) )

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

2.2 似然估计

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

(5)L(p)F(k=3,p)194[1F(k=3,p)]145

其中:

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

将式 5 取对数:

(5)logL(p)193×log(F(k=3,p))+145×log(1F(k=3,p))

可以利用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 次核酸检测都是阴性。

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

发表 / 查看评论