【问题标题】:ROC curves using pROC on R: Calculating lab value a threshold equates to在 R 上使用 pROC 的 ROC 曲线:计算阈值等于的实验室值
【发布时间】:2021-11-06 21:16:25
【问题描述】:

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

我想能够说出这是什么值的血检,例如在 1.2 时,sens 是 x,spec 是 y,NPV 是 c,PPV 是 d。理想情况下,我应该有如下表格的数据:

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

【问题讨论】:

  • smodel1 是什么?如果你不表现出来,就不可能回答。

标签: r statistics roc proc-r-package


【解决方案1】:

由于您没有给出可重复的示例,所以我们使用软件包附带的示例

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,通过您想要的任何数据来完成表格。

【讨论】:

  • 这里给出的阈值是S100B的值,它的spec和sens给出的值是多少?如阈值 0.035=S100B 水平 0.035 pg/ml?
  • 是的,这些是与aSAH$s100b 进行比较的阈值。如果您查看table(aSAH$s100b) 中的值并将其与roc1$thresholds 进行比较,您会发现阈值位于s100b 值之间,因此每个值都明确低于或高于每个阈值。
【解决方案2】:
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 创建

【讨论】:

    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 2019-04-19
    • 2018-07-17
    • 2019-06-22
    • 2022-06-12
    • 2022-09-29
    • 2022-06-15
    相关资源
    最近更新 更多