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

时间:2019-02-12 04:28:08

标签: r roc

我想以指定的假阳性率获得真实的阳性率,例如,在fpr = 0、0.002、0.01 ...的情况下,是否有一种简单的方法?我尝试过

performance <- performance(rocr,"tpr","fpr") fpr=performance@x.values[[1]] tpr=performance@y.values[[1]] 我可以得到所有的fpr和tpr。我应该从这里继续吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

做类似TC Zhang suggests in comment的事情是行不通的:

tpr[which(fpr == yourfpr)]

这是因为,尽管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"))

这将目标特异性作为输入,并返回它们以及匹配的灵敏度,这些灵敏度等于您感兴趣的真实阳性率或TPR。要获得TPR作为向量,请执行以下操作:

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