Chociaż odpowiedzi @ Tim ♦ i @ gung ♦ dotyczą w zasadzie wszystkiego, postaram się je zsyntetyzować w jedno i przedstawię dalsze wyjaśnienia.
Kontekst cytowanych wierszy może w większości dotyczyć testów klinicznych w postaci pewnego progu, co jest najbardziej powszechne. Wyobraź sobie chorobę i wszystko oprócz tym stan zdrowia określany jako . W naszym teście chcielibyśmy znaleźć pewien pomiar proxy, który pozwala nam uzyskać dobrą prognozę dla (1) Powodem, dla którego nie otrzymujemy absolutnej specyficzności / czułości jest to, że wartości naszej wielkości proxy nie są idealnie skorelowane z stan chorobowy, ale tylko ogólnie się z nim kojarzy, a zatem w indywidualnych pomiarach możemy mieć szansę, że ta ilość przekroczy nasz próg dlaD D c D D crereredoreredojednostki i odwrotnie. Dla jasności załóżmy model Gaussa dla zmienności.
Powiedzmy, że używamy jako liczby zastępczej. Jeśli został dobrze wybrany, to musi być wyższe niż ( jest operatorem wartości oczekiwanej). Teraz problem pojawia się, gdy uświadomimy sobie, że jest sytuacją złożoną (podobnie jak ), faktycznie złożoną z 3 stopni nasilenia , , , z których każdy ma stopniowo rosnącą wartość oczekiwaną dla . Dla jednej osoby wybranej z kategorii lub zx E [ x D ] E [ x D c ] E D D c D 1 D 2 D 3 xxxmi[ xre]mi[ xD c]mireredore1re2)re3)xD c x T D D c x T D x D cDDcW przypadku kategorii „prawdopodobieństwo” dodatniego lub ujemnego „testu” będzie zależeć od wybranej przez nas wartości progowej. Powiedzmy, że wybraliśmy oparciu o badanie prawdziwie losowej próbki posiadającej zarówno jednostki jak i . Nasz spowoduje fałszywe pozytywne i negatywne wyniki. Jeśli losowo wybieramy osobę , prawdopodobieństwo rządzące jej wartością jeśli jest podane na zielonym wykresie, a prawdopodobieństwo losowo wybranej osoby na czerwonym wykresie.xTDDcxTDxDc
Rzeczywiste uzyskane liczby będą zależeć od rzeczywistej liczby osobników i ale wynikowa specyficzność i czułość nie będą. Niech będzie skumulowaną funkcją prawdopodobieństwa. Następnie, dla rozpowszechnienia choroby , oto tabela 2x2, jak można się spodziewać w ogólnym przypadku, gdy próbujemy faktycznie zobaczyć, jak nasz test działa w połączonej populacji.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)
Rzeczywiste liczby są zależne od , ale czułość i swoistość są niezależne od . Ale oba są zależne od i . Dlatego wszystkie czynniki, które na nie wpływają, na pewno zmienią te wskaźniki. Gdybyśmy na przykład pracowali na oddziale intensywnej terapii, nasz zostałby zastąpiony przez , a jeśli mówimy o pacjentach ambulatoryjnych, zastąpiony przez . Osobną sprawą jest to, że w szpitalu częstość występowania jest również inna,ppFDFDcFDFD3FD1ale to nie różna częstość występowania różni się wrażliwością i specyficznością, ale odmienny rozkład, ponieważ model, na podstawie którego ustalono próg, nie miał zastosowania do populacji występującej jako ambulatoryjne lub szpitalne . Możesz iść dalej i rozkładać w wielu subpopulacjach, ponieważ podokienna część również będzie miała podwyższone z innych powodów (ponieważ większość proxy jest również „podwyższona” w innych poważnych warunkach). Podział populacji na subpopulację wyjaśnia zmianę wrażliwości, podczas gdy populacji wyjaśnia zmianę specyficzności (poprzez odpowiednie zmiany iDcDcxDDcFDFDc ). Z tego właśnie składa się złożony wykresKażdy z kolorów będzie miał swój własny , a zatem, o ile różni się on od na podstawie którego obliczono oryginalną czułość i swoistość, wskaźniki te będą się zmieniać.DFF
Przykład
Załóżmy, że populacja wynosi 11550 z odpowiednio 10000 Dc, 500,750,300 D1, D2, D3. Skomentowana część to kod użyty do powyższych wykresów.
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')
Możemy łatwo obliczyć średnie x dla różnych populacji, w tym Dc, D1, D2, D3 i kompozyt 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
Aby uzyskać tabelę 2x2 dla naszego oryginalnego przypadku testowego, najpierw ustalamy próg na podstawie danych (który w prawdziwym przypadku zostałby ustawiony po uruchomieniu testu, jak pokazuje @gung). W każdym razie, zakładając próg 13,5, otrzymujemy następującą czułość i swoistość obliczoną dla całej populacji.
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
Załóżmy, że pracujemy z pacjentami ambulatoryjnymi i chorujemy tylko od proporcji D1 lub pracujemy na OIOM, gdzie otrzymujemy tylko D3. (w bardziej ogólnym przypadku musimy również podzielić komponent Dc) Jak zmienia się nasza wrażliwość i swoistość? Zmieniając częstość występowania (tj. Zmieniając względny odsetek pacjentów należących do obu przypadków, wcale nie zmieniamy swoistości i wrażliwości. Zdarza się tak, że częstość ta zmienia się również wraz ze zmianą rozkładu)
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
Podsumowując, wykres pokazujący zmianę wrażliwości (swoistość podążałaby za podobną tendencją, gdybyśmy również skomponowali populację Dc z subpopulacji) ze zmienną średnią x dla populacji, oto wykres
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))
- Jeśli nie jest to proxy, technicznie mielibyśmy 100% specyficzność i czułość. Powiedzmy na przykład, że definiujemy jako mający konkretnie obiektywnie zdefiniowany obraz patologiczny powiedzmy na przykład Biopsja Wątroby, wtedy test Biopsji Wątroby stanie się złotym standardem, a nasza czułość będzie mierzona względem siebie, a zatem da 100%D