R:尝试使用 roc 启动时出错 "incorrect number of subscripts on matrix"

R: Error "incorrect number of subscripts on matrix" when trying boot with roc

我正在使用 Rstudio,并尝试使用包 pROC 中的 rocboot 进行引导。我正在关注 this link 上的代码。来自 link 的代码使用另一个带有 boot 的函数,效果很好。但是当我尝试 roc 时,它给出了错误。

下面是我的代码:(在输出中我打印样本的尺寸以查看重新采样完成了多少次。这里 R=5,采样完成了 6 次然后发生错误) .

library(boot)

roc_boot <- function(D, d) {
  E=D[d,]
  print(dim(E))
  return(roc(E$x,E$y))
}

x = round(runif(100))
y = runif(100)
D = data.frame(x, y)

b = boot(D, roc_boot, R=5)

输出:

[1] 100   2
[1] 100   2
[1] 100   2
[1] 100   2
[1] 100   2
[1] 100   2
Error in boot(D, roc_boot, R = 5) : 
  incorrect number of subscripts on matrix

这里有什么问题?

如果我将 roc 替换为 sum 等其他函数,那么它会完美运行(打印 6 行没有任何错误)。多次启动时它也会给出不同的答案(同时保持 D 相同)。

请注意,错误是在所有重新采样完成后发生的。我找不到这个特定错误的来源。我看过 this 等其他答案,但它们似乎不适用于我的情况。有人还可以解释为什么会出现此错误及其含义吗?

编辑: 我使用以下函数仅返回曲线下的面积:

roc_boot <- function(D, d) {
  E=D[d,]
  objectROC <- roc(E$x,E$y)
  return(objectROC$auc)
}

这给出了曲线下面积的答案,但它与没有自举的答案相同,这意味着没有改进。由于引导,我需要传递整个 roc 对象才能得到改进。

事实证明,您无法从 boot 中的函数 statistic return roc 对象。它必须是一个数值。所以下面的修改消除了错误(在问题中编辑)

roc_boot <- function(D, d) {
  E=D[d,]
  objectROC <- roc(E$x,E$y)
  return(objectROC$auc)
}

此外,正如@Calimo 所建议的,boot 只会提高置信区间而不是实际答案。就我而言,置信区间略有改善。