Хотя ответы @ 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 cxxE[xD]E[xDc]EDDcD1D2D3xDDcВ зависимости от категории, вероятность того, что «тест» будет положительным или нет, будет зависеть от выбранного нами порогового значения. Допустим, мы выбрали на основе изучения действительно случайной выборки, имеющей как и индивидуумов. Наш вызовет некоторые ложные срабатывания и негативы. Если мы выбираем человека случайным образом, вероятность, определяющая его / ее значение если оно задано зеленым графиком, и вероятность случайным образом выбранного человека красным графиком. D D c x T D x D cxTDDcxTDИксDс
Полученные фактические числа будут зависеть от фактических чисел иD cDDс но результирующая специфичность и чувствительность не будут. Пусть - кумулятивная функция вероятности. Затем, для распространенности p заболевания D , вот таблица 2x2, как и следовало ожидать от общего случая, когда мы пытаемся реально увидеть, как наш тест работает в комбинированной популяции.F( )пD
( D c , - ) = ( 1 - p ) ( 1 - F D c ( x T ) ) ( D , - ) = p ( F D ( x T ) ) ( D c , + )
( D , + ) = p ( 1 - FD( хT) )
( D c , - ) = ( 1 - p ) ( 1 - FD c( хT) )
( D , - ) = p ( FD( хT) )
( D c , + ) = ( 1 - p ) ∗ FD c( хT)
ппFDFD cFDFD 3FД 1DсDсИксDDсFDFD cDFF
пример
Предположим, что численность населения составляет 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')
Мы можем легко вычислить средние значения 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. (для более общего случая нам также нужно разделить компонент 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))
- D