在 R 上使用 pROC 的 ROC 曲线:计算实验室值阈值等于

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

我正在使用 pROC 来提供血液测试的 ROC 分析。我已经计算了 ROC 曲线、AUC,并且正在使用 ci.coords 函数以提供的特异性(95% CI)提供规格、感觉、PPV 和 NPV。

我想说一下这是什么血检值,例如在 1.2 时,sens 是 x,spec 是 y,NPV 是 c,PPV 是 d。理想情况下,我会有 table 的数据,例如:

Lab value | Sens | Spec | NPV | PPV

我似乎无法从我目前使用的方法中得到这个?

有人有什么建议吗?

非常感谢

目前


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"))```

library(tidyverse)
library(pROC)
#> Type 'citation("pROC")' for a citation.
#> 
#> Attaching package: 'pROC'
#> The following objects are masked from 'package:stats':
#> 
#>     cov, smooth, var
data(aSAH)

roc <- roc(aSAH$outcome, aSAH$s100b,
  levels = c("Good", "Poor")
)
#> Setting direction: controls < cases

tibble(threshold = seq(0, 1, by = 0.1)) %>%
  mutate(
    data = threshold %>% map(~ {
      res <- roc %>% ci.coords(x = .x, ret = c("sensitivity", "specificity", "ppv", "npv"))
      
      # 97.5%
      list(
        sens = res$sensitivity[[3]],
        spec = res$specificity[[3]],
        ppv = res$ppv[[3]],
        npv = res$npv[[3]]
      )
    })
  ) %>%
  unnest_wider(data)
#> # A tibble: 11 x 5
#>    threshold   sens  spec   ppv    npv
#>        <dbl>  <dbl> <dbl> <dbl>  <dbl>
#>  1       0   1      0     0.363 NA    
#>  2       0.1 0.927  0.5   0.5    0.917
#>  3       0.2 0.780  0.903 0.784  0.867
#>  4       0.3 0.634  0.917 0.769  0.8  
#>  5       0.4 0.561  0.958 0.85   0.782
#>  6       0.5 0.439  1     1      0.755
#>  7       0.6 0.366  1     1      0.735
#>  8       0.7 0.317  1     1      0.72 
#>  9       0.8 0.195  1     1      0.686
#> 10       0.9 0.122  1     1      0.667
#> 11       1   0.0732 1     1      0.655

reprex package (v2.0.1)

于 2021-09-10 创建

由于您没有提供可重现的示例,让我们使用包中附带的示例

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

该软件包附带的函数 coords 列出了不同阈值的特异性和敏感性:

> 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
...

从那里您可以使用您已经使用过的函数 ci.coords 通过您想要的任何数据来完成 table。