1

在roc函数的默认方向 = "auto"设置下,似乎应该自动配置病例和对照,以使预测变量的 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 图,为此我无法手动为每个参数提供方向。

我可以做些什么来使默认方向=“自动”设置正确确定我的案例和控制吗?

非常感谢!

4

1 回答 1

1

在 roc 函数的默认方向 = "auto" 设置下,似乎应该自动配置病例和对照,以使预测变量的 ROC 曲线高于绘图的对角线并且 AUC >= 0.5。

这并不完全正确。以下是该文件所说的direction=auto

“auto”(默认):自动定义中位数较高的组并相应地采取方向。“>”:如果对照组的预测值高于病例组的值(控制 > t >= 病例)。“<”:如果对照组的预测值低于或等于病例组的值(对照 < t <= 病例)。

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

你有什么选择?

  1. 接受您的 ROC 曲线基本上是对角线并且其 AUC 为 0.5。

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

    roc_obj <- pROC::roc(Outcome ~ Predictor, data = data, direction = "<") if (auc(roc_obj) < 0.5) { roc_obj <- pROC::roc(Outcome ~ Predictor, data = data, direction = ">") }

于 2022-01-27T16:55:16.193 回答