在 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。
我正在使用 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。