【问题标题】:Determine threshold value based on senstivities and specificities [duplicate]根据敏感性和特异性确定阈值[重复]
【发布时间】:2015-04-25 00:04:15
【问题描述】:

我的数据有点不规则,无法应用 ROC 等来确定阈值。为了简化,这里有一个demo,让x

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

假设x=15.1 是未知的真实阈值,如果x==0x &gt; 15.1 对应的测试结果y 将为负(0),否则y 为正(1),这样:

y<-c(0,0,0,1, 1, 1, 1, 1, 0,0,0,0)

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

【问题讨论】:

    标签: r


    【解决方案1】:

    您有一种情况,您预测 0 表示 x 的高值,而预测 1 表示 x 的低值,但如果 x == 0,您总是预测 0。像 pROC 和 ROCR 这样的标准包预计 x 的低值会关联预测y = 0。您可以通过以下方式将数据转换为此情况:

    1. 翻转所有预测的标志
    2. x 中用一个小的负值替换 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
    

    现在您可以根据真假阳性率选择您最喜欢的截止值,记住所选的截止值将与原始值相反。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      • 2021-04-01
      • 2014-09-22
      • 2019-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多