使用p中的pROC获得最佳阈值

时间:2015-10-14 12:39:09

标签: r roc proc-r-package

我有一个包含两列的数据框:score1 numerictruth1 boolean。 我想使用truth1预测score1。要做到这一点,我想要一个简单的线性模型,然后要求一个好的阈值,即一个阈值,它在我的ROC曲线中给出75%的灵敏度。因此,我这样做:

roc_curve = roc(truth1 ~ score1 , data = my_data)
coords(roc=roc_curve, x = 0.75, input='sensitivity', ret='threshold')

我的问题是坐标返回' NA'因为0.75的敏感性没有出现在ROC曲线中。所以这是我的问题:如何获得阈值,使我的灵敏度至少为0.75,具有最大特异性?

2 个答案:

答案 0 :(得分:8)

选项1:您过滤结果

my.coords <- coords(roc=roc_curve, x = "all")
my.coords[,my.coords["sensitivity",]>=.75]

选项2:您可以通过请求75%到100%灵敏度的部分AUC来欺骗pROC

roc_curve = roc(truth1 ~ score1 , data = my_data, partial.auc = c(1, .75), partial.auc.focus="sensitivity")

所有pROC的方法都将遵循此请求,仅在此感兴趣的领域为您提供结果:

coords(roc=roc_curve, x = "local maximas", ret='threshold')

答案 1 :(得分:0)

为了扩展Calimo的优秀答案,这里有一个可推广的代码片段:

# Specify SENSITIVITY criteria to meet.
Sn.upper <- 1.0
Sn.lower <- 0.6

# Specify SPECIFICITY criteria to meet.
Sp.upper <- 1.0
Sp.lower <- 0.7

# Extract all coordinate values from the ROC curve.
my.coords <- coords(roc=auc, x = "all")

# Identify and print all points on the ROC curve that meet the JOINT sensitivity AND specificity criteria.
my.coords[,(my.coords["specificity",]>=Sp.lower & my.coords["specificity",]<=Sp.upper & 
            my.coords["sensitivity",]>=Sn.lower & my.coords["sensitivity",]<=Sn.upper)]

示例输出:

                  all       all       all       all       all       all       all       all
threshold   0.2787089 0.2852656 0.2913466 0.2928070 0.3026589 0.3172495 0.3288137 0.3351049
specificity 0.7058824 0.7176471 0.7294118 0.7411765 0.7529412 0.7647059 0.7764706 0.7882353
sensitivity 0.6111111 0.6111111 0.6111111 0.6111111 0.6111111 0.6111111 0.6111111 0.6111111