R:尝试使用 roc 启动时出错 "incorrect number of subscripts on matrix"
R: Error "incorrect number of subscripts on matrix" when trying boot with roc
我正在使用 Rstudio,并尝试使用包 pROC
中的 roc
和 boot
进行引导。我正在关注 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
只会提高置信区间而不是实际答案。就我而言,置信区间略有改善。
我正在使用 Rstudio,并尝试使用包 pROC
中的 roc
和 boot
进行引导。我正在关注 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
只会提高置信区间而不是实际答案。就我而言,置信区间略有改善。