计算具体特异性值的截止值和灵敏度?

时间:2016-08-03 11:07:00

标签: regression roc

在计算了几个回归模型后,我想计算灵敏度值和预先指定的特异性值(即0​​.99,0.90,0.85等)的截止值,以找到最佳模型。我已经创建了代码来计算给定截止值的灵敏度和特异性(从0.1到0.9),但现在我想使用特定的特异性值(即计算相应的截止值和灵敏度值),在这里,我被卡住了。

假设我有以下回归模型(使用示例数据集' mtcars'):

    data(mtcars)
    model <- glm(formula= vs ~ wt + disp, data=mtcars, family=binomial)

以下是我用于计算截止值给定值的sens和spec的代码:

    predvalues <- model$fitted.values
getMisclass <- function(cutoff, p, labels){
  d <- cut(predvalues, breaks=c(-Inf, cutoff, Inf), labels=c("0", "1"))
  print(confusionMatrix(d, mtcars$vs, positive="1"))
  cat("cutoff", cutoff, ":\n")
  t <- table(d, mtcars$vs)
  print(round(sum(t[c(1,4)])/sum(t), 2)) 
}
cutoffs <- seq(.1,.9,by=.1)
sapply(cutoffs, getMisclass, p=predval, labels=mtcars$vs)

在给定一系列特异性值的情况下,有人可以帮助我如何重写此代码以计算灵敏度和截止分数吗?可能吗? 截止值应为

    cutoffs <- c(0.99, 0.90, 0.85, 0.80, 0.75)

非常感谢!

1 个答案:

答案 0 :(得分:1)

这与如何计算ROC曲线密切相关:如果以精细粒度计算这些曲线,则基本上可以获得对每个&#34;门槛值。所以,你可以做的只是计算灵敏度,特异性和相应的阈值,就像你想要获得ROC曲线一样......

library(pROC)
myRoc <- roc(predictor = predvalues, response = mtcars$vs)
plot(myRoc)
myRoc$specificities
print(with(myRoc, data.frame(specificities, sensitivities, thresholds)))

# specificities sensitivities  thresholds
# 1     0.00000000    1.00000000        -Inf
# 2     0.05555556    1.00000000 0.002462809
# 3     0.11111111    1.00000000 0.003577104
# 4     0.16666667    1.00000000 0.004656164
# 5     0.22222222    1.00000000 0.005191974
# 6     0.27777778    1.00000000 0.006171197
# [...]

...然后查找您感兴趣的具体情况的相应灵敏度和阈值,例如为:

cutoffs <- c(0.99, 0.90, 0.85, 0.80, 0.75)
myData <- with(myRoc, data.frame(specificities, sensitivities, thresholds))
library(plyr)
print(laply(cutoffs, function(cutoff) myData$sensitivities[which.min(abs(myData$specificities-cutoff))]))

# [1] 0.7857143 0.8571429 0.8571429 0.9285714 0.9285714