4

核酸检测真阳性率是多少?

 2 years ago
source link: https://cosx.org/2022/04/mle-tpr-covid19/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

核酸检测真阳性率是多少?

关键词:核酸检测; 似然估计

审稿:黄湘云, 林枫;编辑:黄湘云

1 核酸检测之迷

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

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

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

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

2 真阳性率估计

2.1 模型设定

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

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

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

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

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

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

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

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

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

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

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

2.2 似然估计

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

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

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

将式 5 取对数:

logL(p)∝193×log(F(k=3,p))+145×log(1−F(k=3,p))(5)(5)log⁡L(p)∝193×log⁡(F(k=3,p))+145×log⁡(1−F(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.191p=0.191。 也就是说,单次核酸检测能识别患者的概率约为 19.1%。

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

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

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

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

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

敬告各位友媒,如需转载,请与统计之都小编联系(直接留言或发至邮箱:[email protected]),获准转载的请在显著位置注明作者和出处(转载自:统计之都),并在文章结尾处附上统计之都微信二维码。

统计之都访谈第 43 期:孤峰顶上求大道,红尘浪里取乾坤 -- 张志华访谈 →

发表 / 查看评论


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK