R-ohjelmointi.org

Tilastotieteellistä ohjelmointia R-kielellä

Sensitiivisyys ja spesifisyys ja niiden luottamusvälit

Esimerkiksi laboratoriotestien yhteydessä testin toimivuutta voidaan arvioida monilla erilaisilla suureilla, joista kenties tunnetuimmat ovat sensitiivisyys (herkkyys) ja spesifisyys (tarkkuus). Suureita on paljon muitakin, ja osaa niistä käsiteltiin jo logistisen regression yhteydessä.

Jos verrataan uuden laboratoriotestin antamaa tulosta joko standarditestin tulokseen tai testattujen potilaiden tautistatukseen (sairas / terve), saadaan tuloksista taulukoitua seuraavanlainen nelikenttä, jossa luvut ovat potilaiden lukumääriä [Wikipedian esimerkki]:

                         tunnettu tulos
                         +         -
testin tulos     +      20       180       
                 -      10      1820

Taulukon lukuja voidaan merkitä myös merkinnöillä:

                         tunnettu tulos
                         +         -
testin tulos     +      TP        FP       
                 -      FN        TN

TP = true positive (oikea positiivinen tulos)
TN = true negative (oikea negatiivinen tulos)
FP = false positive (väärä positiivinen tulos)
FN = false negative (väärä negatiivinen tulos)

Taulukon lukujen perusteella voidaan laskea useita suureita testin toimivuudelle, esimerkiksi:

Sensitiivisyys (SP):                 TP / (TP + FN) =               20 / (20 + 10) = 0.667   [sensitivity, true positive rate, recall]
Spesifisyys (SE):                    TN / (TN + FP) =          1820 / (1820 + 180) = 0.910   [specificity, true negative rate]
Positiivinen ennustearvo (PPV):      TP / (TP + FP) =              20 / (20 + 180) = 0.100   [positive predictive value, precision]
Negatiivinen ennustearvo (NPV):      TN / (TN + FN) =           1820 / (1820 + 10) = 0.995   [negative predictive value]
Tarkkuus (ACC):                      (TP + TN) / (TP + TN + FP + FN) = 1840 / 2030 = 0.906
False positive rate (FPR):           FP / (FP + TN) =           180 / (180 + 1820) = 0.090 = 1- SE
False negative rate (FNR):           FN / (FN + TP) =               10 / (10 + 20) = 0.333 = 1 - SP

Olen nähnyt mainituille suureille lasketun luottamusvälejä melko harvoin, mutta tarvittaessa se onnistuu esimerkiksi R:n laajennuspaketilla epiR. Luodaan ensin lukumääristä taulukko tab, joka sitten annetaan funktiolle epi.tests():

# Tehdään taulukko
tab<-as.table(matrix(c(20,10,180,1820), ncol=2))
tab
#     A    B
#A   20  180
#B   10 1820
 
# Lasketaan tulokset ja luottamusvälit
out<-epi.tests(tab, conf.level = 0.95)
summary(out)
#                 est      lower       upper
#aprev     0.09852217 0.08589853  0.11231834
#tprev     0.01477833 0.00999250  0.02103023
#se        0.66666667 0.47187996  0.82712578
#sp        0.91000000 0.89659897  0.92218422
#diag.acc  0.90640394 0.89289349  0.91872681
#diag.or  20.22222222 9.32219270 43.86717642
#nnd       1.73410405 1.33456113  2.71385945
#youden    0.57666667 0.36847892  0.74931000
#ppv       0.10000000 0.06215937  0.15021279
#npv       0.99453552 0.98997366  0.99737655
#plr       7.40740741 5.54896809  9.88826817
#nlr       0.36630037 0.22078856  0.60771246
 
# Tulosten selite:
#aprev	apparent prevalence.
#tprev	true prevalence.
#se	test sensitivity.
#sp	test specificity.
#diag.acc	diagnostic accuracy.
#diag.or	diagnostic odds ratio.
#nnd	number needed to diagnose.
#youden	Youden's index.
#ppv	positive predictive value.
#npv	negative predictive value.
#plr	likelihood ratio of a positive test.
#nlr	likelihood ratio of a negative test.

Jos yleisesti ottaen on tarpeen laskea binääristen muuttujien positiivisten tulosten suhteellisille osuuksille luottamusvälejä, R auttaa siinäkin. Laajennuspaketit Hmisc ja prevalence tarjoavat seuraavat funktiot, joilla lasketaan esimerkissämme tarkkuuden (accuracy) luottamusväli:

library(Hmisc)
binconf(1840, 2030)
#  PointEst     Lower    Upper
# 0.9064039 0.8929547 0.918318
 
library(prevalence)
propCI(1840, 2030)
#     x    n         p        method level     lower     upper
#1 1840 2030 0.9064039 agresti.coull  0.95 0.8929315 0.9183412
#2 1840 2030 0.9064039         exact  0.95 0.8928935 0.9187268
#3 1840 2030 0.9064039      jeffreys  0.95 0.8931544 0.9184958
#4 1840 2030 0.9064039          wald  0.95 0.8937336 0.9190743
#5 1840 2030 0.9064039        wilson  0.95 0.8929547 0.9183180

Kuten tulosteesta havaitaan, vastaa funktion epi.tests() raportoima tarkkuuden luottamusväli funktion propCI() antamaa tarkkaa (exact) luottamusväliä. Paketin Hmisc oletusarvoisesti raportoima tulos vastaa Wilsonin score-intervallia.

Lisäksi R:n laajennuspaketti tolerance tarjoaa edellisiä laajemman valikoima erilaisia jakaumia, joille luottamusvälit voidaan laskea.


Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

Category