R:尝试使用 roc 启动时出现错误“矩阵上的下标数量不正确”

问题描述 投票:0回答:1

我正在使用 Rstudio,并尝试使用

roc
包中的
pROC
boot
进行引导。我正在关注此链接上的代码。该链接中的代码使用另一个带有
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
对象才能得到改进。

r runtime-error statistics-bootstrap proc-r-package
1个回答
4
投票

事实证明,您无法从

roc
中的函数
statistic
返回
boot
对象。它必须是一个数值。因此,以下修改消除了错误(如问题中编辑的那样)

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

此外,正如@Calimo 所建议的,

boot
只提高了置信区间,而不是实际的答案。就我而言,置信区间略有改善。

© www.soinside.com 2019 - 2024. All rights reserved.