根据感觉和特异性确定阈值

时间:2015-02-23 15:48:10

标签: r

我的数据对于阈值确定应用ROC等是不规则的。为了简化,这是一个演示,让x

x<-c(0,0,0,12, 3, 4, 5, 15, 15.3, 20,18, 26)

假设x=15.1是未知的真实阈值,相应的测试结果y将为负0x==0x > 15.1,否则为{{ 1}}为正(y),以便:

1

由于y<-c(0,0,0,1, 1, 1, 1, 1, 0,0,0,0) 0是一个积极的结果,我想知道以哪种方式我可以确定x预测x的最佳阈值。我尝试过R打包的pROC和ROCR,这两种情况似乎都不是直截了当的。有人会给我一些建议吗?

1 个答案:

答案 0 :(得分:3)

您的情况是,对于x的高值,您预测为0,对于x的低值,则预测为1,除非您始终预测0,如果x == 0.标准软件包(如pROC和ROCR)期望x的低值关联预测y = 0。您可以通过以下方式将数据转换为这种情况:

  1. 翻转所有预测的标志
  2. 使用x
  3. 中的小负值替换0

    在代码中(使用this answer为每个截止值提取TPR和FPR):

    x2 <- -x
    x2[x2 == 0] <- -1000
    library(ROCR)
    pred <- prediction(x2, y)
    perf <- performance(pred, "tpr", "fpr")
    data.frame(cut=perf@alpha.values[[1]], fpr=perf@x.values[[1]], 
               tpr=perf@y.values[[1]])
    #        cut       fpr tpr
    # 1      Inf 0.0000000 0.0
    # 2     -3.0 0.0000000 0.2
    # 3     -4.0 0.0000000 0.4
    # 4     -5.0 0.0000000 0.6
    # 5    -12.0 0.0000000 0.8
    # 6    -15.0 0.0000000 1.0
    # 7    -15.3 0.1428571 1.0
    # 8    -18.0 0.2857143 1.0
    # 9    -20.0 0.4285714 1.0
    # 10   -26.0 0.5714286 1.0
    # 11 -1000.0 1.0000000 1.0
    

    现在,您可以根据真实和误报率选择您喜欢的截止值,并记住所选截止值将从原始值中取消。