Я использую Rstudio и пытаюсь использовать roc
из пакета pROC
с boot
для начальной загрузки. Я следую коду на this link. Код из этой ссылки использует другую функцию с boot
, которая отлично работает. Но когда я пробую roc
, он дает ошибку.R: Ошибка «неправильное количество индексов на матрице» при попытке загрузки с помощью 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, но они, похоже, не применяются к моему делу. Может ли кто-нибудь объяснить причину возникновения этой ошибки и что это значит?
EDIT: я вернулся только площадь под кривой, используя следующие функции:
roc_boot <- function(D, d) {
E=D[d,]
objectROC <- roc(E$x,E$y)
return(objectROC$auc)
}
Это дает ответ площади под кривой, но он такой же, как ответ без самозагрузки, то есть нет никаких улучшений. Мне нужно передать весь объект roc
, чтобы улучшить его из-за начальной загрузки.
Вы хотите вернуть объект roc или рассчитать площадь под ручкой? Ошибка возникает из-за того, что boot ищет одно значение, возвращаемое из аргумента статистики. –
@JimM. Я хочу вернуть объект. Это возможно? Я вернул область под кривой, используя '$ auc' объекта roc. Но в этом случае область такая же, как и область без начальной загрузки. Я подозреваю, что мне нужно будет передать объект 'roc', чтобы иметь некоторое улучшение из-за начальной загрузки. Я отредактирую вопрос, чтобы добавить это. –
Как улучшение вашего кода, я бы предложил увеличить количество загрузочных файлов где-то в районе 1000 в зависимости от изменчивости ваших данных. Просто при загрузке объекты roc не приведут к улучшению (более высокий auc?), Чем если бы вы только вернули статистику auc. Если вы посмотрите на свой загрузочный объект 'b', это даст вам разницу между средним значением начальной загрузки и auc, вычисленным на исходном наборе данных, а также смещением. –