Хоча відповіді @ 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 cххЕ[ хD]Е[ хD c]EDDcD1D2D3xDDcкатегорія, ймовірність того, що "тест" буде позитивним чи ні, залежатиме від обраного вами порогу. Скажімо, ми обираємо на основі вивчення дійсно випадкової вибірки, що має як особини і . Наш спричинить помилкові позитиви та негативи. Якщо ми вибираємо людину випадковим чином, ймовірність, що регулює його / її значення якщо вона задана зеленим графіком, а випадково вибраної людини червоним графіком.xTDDcxTDxDc
Фактичні отримані числа залежатимуть від фактичної кількості особин і однак отримана специфіка та чутливість не будуть. Нехай - сукупна функція ймовірності. Тоді, щодо поширеності захворювання , ось таблиця 2х2, як можна було б очікувати від загального випадку, коли ми намагаємось побачити, як працює наш тест у комбінованій сукупності.D c F ( ) p DDDcF()pD
(D,+)=p(1−FD(xT))
(Dc,−)=(1−p)(1−FDc(xT))
(D,−)=p(FD(xT))
(Dc,+)=(1−p)∗FDc(xT)
Фактичні числа залежать від , але чутливість та специфічність не залежать від . Але обидва вони залежать від та . Отже, всі фактори, які впливають на них, безумовно, змінять ці показники. Якби ми, наприклад, працювали в відділенні інтенсивної терапії, наш замінили б , а якби ми говорили про амбулаторних, замінили . Окремим питанням є те, що в лікарні поширеність також різна,p F D F D c F D F D 3 F D 1 D c D c x D D c F D F D c 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')
Ми можемо легко обчислити значення 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))
- Якби це не проксі, ми технічно мали б 100% специфічність та чутливість. Скажімо, наприклад, що ми визначаємо як такий, що має конкретну об'єктивно визначену патологічну картину, скажімо, на біопсії печінки, тоді тест біопсії печінки стане золотим стандартом, і наша чутливість буде вимірюватися щодо себе, а отже, і отримає 100%D