Search code examples
rstatisticsrocproc-r-package

ROC curves using pROC on R: Calculating lab value a threshold equates to


I am using pROC to provide the ROC analysis of blood tests. I have calculated the ROC curve, AUC and am using the ci.coords function to provide the spec, sens, PPV and NPV at a provided specificity (with 95% CI).

I would like to be able to say at what value of blod test this is, for instance at 1.2 the sens is x, spec is y, NPV is c, PPV is d. Ideally I ould have the data for a table like:

Lab value | Sens | Spec | NPV | PPV

I don't seem to be able to get this from the methodology I am currently using?

Does anyone have any suggestions?

Many thanks

Currently


spred1 = predict(smodel1)

sroc1 = roc(EditedDF1$any_abnormality, spred1)

ci.coords(sroc1, x=0.95,  input="sensitivity", transpose = FALSE, ret=c("sensitivity","specificity","ppv","npv"))```


Solution

  • As you gave no reproducible example let's use the one that comes with the package

    library(pROC)
    data(aSAH)
    roc1 <- roc(aSAH$outcome, aSAH$s100b)
    

    The package comes with the function coords which lists specificity and sensititivity at different thresholds:

    > coords(roc1)
       threshold specificity sensitivity
    1       -Inf  0.00000000  1.00000000
    2      0.035  0.00000000  0.97560976
    3      0.045  0.06944444  0.97560976
    4      0.055  0.11111111  0.97560976
    5      0.065  0.13888889  0.97560976
    6      0.075  0.22222222  0.90243902
    7      0.085  0.30555556  0.87804878
    8      0.095  0.38888889  0.82926829
    9      0.105  0.48611111  0.78048780
    10     0.115  0.54166667  0.75609756
    ...
    

    From there you can use the function ci.coords that you already have used to complete the table by whatever data you desire.