尽管@ Tim♦和@ gung♦的答案几乎涵盖了所有内容,但我将尝试将它们综合为一个,并提供进一步的说明。
引号的上下文通常是指最常见的某种阈值形式的临床测试。想象一下疾病,除之外的所有事物,包括健康状态,都称为。对于我们的测试,我们想找到一些代理度量,以使我们能够对做出很好的预测。(1)之所以没有获得绝对特异性/敏感性的原因在于,代理数量的值与疾病状态,但仅与疾病状态相关,因此,在个别测量中,我们可能有机会使该数量超过阈值D D c D D cDDDcDDc个人,反之亦然。为了清楚起见,让我们假设一个高斯模型的可变性。
假设我们使用作为代理数量。如果已经很好地选择了,则必须高于(是期望值运算符)。现在,当我们意识到是一个复合情况(),实际上是由3个严重等级,和,每个等级对期望值逐渐增加时,就会出现问题。对于单个人,从类别或x E [ x D ] E [ x D c ] E D D c D 1 D 2 D 3 x D D c x T D D c x T D x D cxxE[xD]E[xDc]EDDcD1D2D3xDDc类别,“测试”的概率是否为正将取决于我们选择的阈值。假设我们基于研究具有和个体的真正随机样本来选择。我们的将导致一些错误的肯定和否定。如果我们随机选择一个人,则控制其值的概率(由绿色图给出),以及由随机选择的人由红色图给出的概率。xTDDcxTDxDc
所获得的实际数量将取决于和个体的实际数量,但是所得的特异性和敏感性则不会。令为累积概率函数。然后,对于疾病的患病率,这里是一张2x2表格,这是一般情况下所期望的,当我们尝试实际查看测试在合并人群中的表现时。D c F ()pDDcF()pD
(D,+)=p(1−FD(xT))
(Dc,−)=(1−p)(1−FDc(xT))
(D,−)=p(FD(xT))
(Dc,+)=(1−p)∗FDc(xT)
实际数字与,但敏感性和特异性与无关。但是,这两个都依赖于和。因此,所有影响这些因素的因素都将肯定会改变这些指标。例如,如果我们在ICU中工作,则将替换为;如果我们谈论的是门诊病人,则将其替换为。医院的患病率也不同,这是另一回事,p ˚F d ˚F d Ç ˚F d ˚F d 3 ˚F d 1 d C ^ d Ç X d d Ç ˚F d ˚F d Ç d ˚F ˚FppFDFDcFDFD3FD1但是不是不同的患病率导致敏感性和特异性不同,而是不同的分布,因为定义阈值的模型不适用于门诊或住院患者。您可以继续将分解为多个子群体,因为由于其他原因,的住院患者子部分的也应升高(因为在其他严重情况下大多数代理也被“升高”)。将种群分解为亚种群可以解释敏感性的变化,而种群的种群可以解释特异性的变化(通过和DcDcxDDcFDFDc)。这就是合成图实际组成的内容。每种颜色实际上都会有自己的,因此,只要这与计算原始灵敏度和特异度的有所不同,这些指标就会改变。DFF
例
假设人口为11550,分别为10000 Dc,500,750,300 D1,D2,D3。注释掉的部分是用于上述图形的代码。
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')
我们可以轻松计算出包括Dc,D1,D2,D3和复合D在内的各种总体的x均值。
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%的特异性和敏感性。假设我们将定义为在肝活检中具有特定的客观定义的病理学图像,那么肝活检将成为金标准,我们将针对自身进行测量,从而得出100%的敏感性D