如何从 R 中的 fpr 序列中获取特定的 tpr?

How to get specific tpr from a sequence of fpr in R?

我想在指定的假阳性率下获得真阳性率,比如说,在 fpr = 0、0.002、0.01,....有没有简单的方法可以做到这一点?我试过了

performance <- performance(rocr,"tpr","fpr") fpr=performance@x.values[[1]] tpr=performance@y.values[[1]] 我可以获得所有的 fpr 和 tpr。我该如何从这里开始?非常感谢!

做类似的事情是行不通的:

tpr[which(fpr == yourfpr)]

这是因为,虽然它被称为"curve",但ROC曲线实际上是一组离散点,您的目标FPR与ROC曲线中的一个点完全匹配的概率很低。

因此您需要进行一些插值以获得给定 FPR 点的 TPR。幸运的是,pROC 包可以为您做到这一点(免责声明:我是 pROC 的作者)。假设您有以下 ROC 曲线:

library(pROC)
data(aSAH)
myroc <- roc(aSAH$outcome, aSAH$wfns)

首先,您需要将 FPR 率转换为 pROC 理解的特异性:

target.fpr <- c(0, 0.002, 0.01, 0.2, 0.1, 0.2, 1)
target.sp <- 1 - target.fpr

然后你使用coords函数:

coords(myroc, x = target.sp, input = "specificity", ret = c("se", "sp"))

这将目标特异性作为输入,returns 它们与匹配的灵敏度一起,等于您感兴趣的真阳性率或 TPR。要将 TPR 作为向量,做:

tpr <- coords(myroc, x = target.sp, input = "specificity", ret = "se")[1,]