为什么 roc 函数不能正确确定案例和控制?

Why is the roc function not determining cases and controls properly?

direction = "auto" 函数的默认 direction = "auto" 设置下,似乎 cases 和 controls 应该自动配置这样预测变量的 ROC 曲线位于图的对角线上方并且 AUC >= 0.5。

但是,下面显示的代码错误地分配了案例和控制值,创建了 AUC < 0.5 的 ROC 曲线。

#Creation of data
data <- data.frame("Predictor" = c(rep(0, 59), rep(1, 29)), 
                   "Outcome" = c(rep(0, 40), rep(1, 19), rep(0, 22), rep(1, 7)))

#Fitting ROC
roc_obj <- pROC::roc(Outcome ~ Predictor, data = data)

#Plotting ROC to show that it is below the diagonal
pROC::ggroc(roc_obj) + 
  ggplot2::geom_abline(intercept = 1)

我知道我可以通过在单变量设置中手动设置方向参数来解决这个问题,但我最终试图创建一个多变量 ROC 图,为此我无法手动为每个参数提供方向。

我可以做些什么来让默认的 direction = "auto" 设置正确地确定我的案例和控件吗?

非常感谢!

Under the default direction = "auto" setting of the roc function, it appears that cases and controls should be automatically configured such that the ROC curve for a predictor is above the diagonal of the plot and has an AUC >= 0.5.

这不完全正确。这里是 what the document says about direction=auto:

“auto” (default): automatically define in which group the median is higher and take the direction accordingly. “>”: if the predictor values for the control group are higher than the values of the case group (controls > t >= cases). “<”: if the predictor values for the control group are lower or equal than the values of the case group (controls < t <= cases).

如您所见,决定方向的不是 ROC 曲线本身,而是组的中位数。这通常是一种合理的启发式方法。但有时,当曲线非常接近对角线时,分布中的微小异常会导致 ROC 曲线走向另一条路。

你有什么选择?

  1. 接受你的ROC曲线基本上是对角线,它的AUC是0.5。

  2. 如果这导致数值问题,如果低于 0.5,您可以重建 ROC 曲线

    roc_obj <- pROC::roc(结果 ~ 预测变量,数据 = 数据,方向 = "<") 如果 (auc(roc_obj) < 0.5) { roc_obj <- pROC::roc(结果 ~ 预测变量,数据 = 数据,方向 = ">") }