敏感性或特異性是患病率的函數嗎?
標準教學表明敏感性和特異性是測試的屬性,與流行率無關。但這不只是一個假設嗎?
哈里森的內科醫學原理第 19 版說
長期以來一直斷言敏感性和特異性是測試準確性的獨立於流行性的參數,並且許多文本仍然做出這種聲明。然而,這種統計上有用的假設在臨床上是簡單的。…住院患者的檢測敏感性可能更高,門診患者的檢測特異性更高。
(住院患者的患病率通常高於門診患者)
這些參數之間是否存在數學或近似圖形關係?
甚至這個鏈接也稱它為“簡化”。為什麼?
編輯:我知道敏感性是如何定義的。正如答案中提到的,沒有涉及流行的術語。我自己一直堅持認為,這些是測試的屬性,不受所用人口的影響,直到我遇到這個陳述,因此提出了這個問題。但我認為,這種混淆不是由於定義而是由於這些值的實際計算而引起的。特異性和敏感性是使用 2x2 表計算的,這裡參考人群的患病率重要嗎?他們指的是這個嗎?如果有,它的作用是什麼?
儘管@Tim♦ 和@gung♦ 的答案幾乎涵蓋了所有內容,但我將嘗試將它們綜合為一個並提供進一步的說明。
引用行的上下文可能主要指的是某個閾值形式的臨床測試,這是最常見的。想像一種疾病 D , 以及除了 D 包括健康狀態稱為 Dc . 對於我們的測試,我們希望找到一些代理測量,它可以讓我們得到一個很好的預測 D .(1) 我們沒有得到絕對特異性/敏感性的原因是我們的代理量的值與疾病狀態並不完全相關,而只是通常與之相關,因此,在個別測量中,我們可能有機會這個數量超過了我們的門檻 Dc 個人,反之亦然。為了清楚起見,讓我們假設可變性的高斯模型。
假設我們正在使用 x 作為代理數量。如果 x 已經被很好地選擇了,那麼 E[xD] 必須高於 E[xDc] ( E 是期望值運算符)。現在問題出現了,當我們意識到 D 是一個複合情況(所以是 Dc ),實際上由 3 個嚴重程度組成 D1 , D2 , D3 ,每個都有一個逐漸增加的期望值 x . 對於單個人,從以下任一項中選擇 D 類別或從 Dc 類別,“測試”是否為正的概率將取決於我們選擇的閾值。讓我們說我們選擇 xT 基於研究具有兩者的真正隨機樣本 D 和 Dc 個人。我們的 xT 會造成一些誤報和誤報。如果我們選擇一個 D 人隨機,支配他/她的概率 x 如果由綠色圖表給出的值,以及隨機選擇的值 Dc 紅色圖表的人。
獲得的實際數量將取決於實際數量 D 和 Dc 個人,但由此產生的特異性和敏感性不會。讓 F() 是一個累積概率函數。那麼,對於流行 p 疾病的 D ,這是一個 2x2 表,這是一般情況下所期望的,當我們嘗試實際查看我們的測試在組合總體中的表現時。
(D,+)=p(1−FD(xT))
(Dc,−)=(1−p)(1−FDc(xT))(D,−)=p(FD(xT))(Dc,+)=(1−p)∗FDc(xT)實際數字是 p 依賴,但敏感性和特異性是 p 獨立的。但是,這兩者都依賴於 FD 和 FDc . 因此,影響這些的所有因素肯定會改變這些指標。例如,如果我們在 ICU 工作,我們的 FD 將被替換為 FD3 ,如果我們談論的是門診病人,則替換為 FD1 . 在醫院中,患病率也不同是另一回事,但導致敏感性和特異性不同的不是患病率不同,而是分佈不同,因為定義閾值的模型不適用以門診病人或住院病人的形式出現的人群。你可以繼續分解 Dc 在多個亞群中,因為住院亞部分 Dc 也應有一個凸起 x 由於其他原因(因為大多數代理在其他嚴重情況下也被“提升”)。打破 D 人口到亞人口解釋了敏感性的變化,而 Dc 人口解釋了特異性的變化(通過相應的變化 FD 和 FDc ).這就是複合 D 圖實際上包括。每種顏色實際上都有自己的 F ,因此,只要這不同於 F 在計算原始敏感性和特異性的基礎上,這些指標會發生變化。
例子
假設人口為 11550,Dc 為 10000,D1、D2、D3 分別為 500,750,300。註釋掉的部分是用於上述圖表的代碼。
set.seed(12345) dc<-rnorm(10000,mean = 9, sd = 3) d1<-rnorm(500,mean = 15,sd=2) d2<-rnorm(750,mean=17,sd=2) d3<-rnorm(300,mean=20,sd=2) d<-cbind(c(d1,d2,d3),c(rep('1',500),rep('2',750),rep('3',300))) library(ggplot2) #ggplot(data.frame(dc))+geom_density(aes(x=dc),alpha=0.5,fill='green')+geom_density(data=data.frame(c(d1,d2,d3)),aes(x=c(d1,d2,d3)),alpha=0.5, fill='red')+geom_vline(xintercept = 13.5,color='black',size=2)+scale_x_continuous(name='Values for x',breaks=c(mean(dc),mean(as.numeric(d[,1])),13.5),labels=c('x_dc','x_d','x_T')) #ggplot(data.frame(d))+geom_density(aes(x=as.numeric(d[,1]),..count..,fill=d[,2]),position='stack',alpha=0.5)+xlab('x-values')
我們可以輕鬆計算各種總體的 x 均值,包括 Dc、D1、D2、D3 和復合 D。
mean(dc) mean(d1) mean(d2) mean(d3) mean(as.numeric(d[,1])) > mean(dc) [1] 8.997931 > mean(d1) [1] 14.95559 > mean(d2) [1] 17.01523 > mean(d3) [1] 19.76903 > mean(as.numeric(d[,1])) [1] 16.88382
為了獲得原始測試用例的 2x2 表,我們首先根據數據設置閾值(在實際情況下,將在運行測試後設置,如 @gung 所示)。無論如何,假設閾值為 13.5,當對整個人群進行計算時,我們會得到以下敏感性和特異性。
sdc<-sample(dc,0.1*length(dc)) sdcomposite<-sample(c(d1,d2,d3),0.1*length(c(d1,d2,d3))) threshold<-13.5 truepositive<-sum(sdcomposite>13.5) truenegative<-sum(sdc<=13.5) falsepositive<-sum(sdc>13.5) falsenegative<-sum(sdcomposite<=13.5) print(c(truepositive,truenegative,falsepositive,falsenegative)) sensitivity<-truepositive/length(sdcomposite) specificity<-truenegative/length(sdc) print(c(sensitivity,specificity)) > print(c(truepositive,truenegative,falsepositive,falsenegative)) [1]139 928 72 16 > print(c(sensitivity,specificity)) [1] 0.8967742 0.9280000
讓我們假設我們正在與門診患者一起工作,並且我們僅從 D1 比例中獲得患病患者,或者我們在僅獲得 D3 的 ICU 中工作。(對於更一般的情況,我們也需要拆分 Dc 分量)我們的敏感性和特異性如何變化?通過改變患病率(即通過改變屬於任一病例的患者的相對比例,我們根本不會改變特異性和敏感性。碰巧這種患病率也會隨著分佈的變化而變化)
sdc<-sample(dc,0.1*length(dc)) sd1<-sample(d1,0.1*length(d1)) truepositive<-sum(sd1>13.5) truenegative<-sum(sdc<=13.5) falsepositive<-sum(sdc>13.5) falsenegative<-sum(sd1<=13.5) print(c(truepositive,truenegative,falsepositive,falsenegative)) sensitivity1<-truepositive/length(sd1) specificity1<-truenegative/length(sdc) print(c(sensitivity1,specificity1)) sdc<-sample(dc,0.1*length(dc)) sd3<-sample(d3,0.1*length(d3)) truepositive<-sum(sd3>13.5) truenegative<-sum(sdc<=13.5) falsepositive<-sum(sdc>13.5) falsenegative<-sum(sd3<=13.5) print(c(truepositive,truenegative,falsepositive,falsenegative)) sensitivity3<-truepositive/length(sd3) specificity3<-truenegative/length(sdc) print(c(sensitivity3,specificity3)) > print(c(truepositive,truenegative,falsepositive,falsenegative)) [1] 38 931 69 12 > print(c(sensitivity1,specificity1)) [1] 0.760 0.931 > print(c(truepositive,truenegative,falsepositive,falsenegative)) [1] 30 944 56 0 > print(c(sensitivity3,specificity3)) [1] 1.000 0.944
總而言之,顯示靈敏度變化的圖(如果我們還從亞群中組成 Dc 群體,特異性將遵循類似的趨勢),群體的平均 x 不同,這是一個圖表
df<-data.frame(V1=c(sensitivity,sensitivity1,sensitivity3),V2=c(mean(c(d1,d2,d3)),mean(d1),mean(d3))) ggplot(df)+geom_point(aes(x=V2,y=V1),size=2)+geom_line(aes(x=V2,y=V1))
- 如果它不是代理,那麼我們在技術上將具有 100% 的特異性和敏感性。比如說我們定義 D 由於在肝臟活檢上有特定的客觀定義的病理圖片,那麼肝臟活檢測試將成為金標準,我們的敏感性將根據自身進行測量,因此產生 100%