R: Ошибка неправильного количества индексов в матрице при попытке загрузки с roc

Я использую 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 одного и того же).

Обратите внимание, что ошибка возникает после того, как выполнена повторная выборка. Я не могу найти источник этой конкретной ошибки. Я просмотрел другие ответы, такие как это, но они не кажется, не применимо к моему делу. Может ли кто-нибудь также объяснить, почему возникает эта ошибка и что это вообще означает?

РЕДАКТИРОВАТЬ: я вернул только область под кривой, используя следующую функцию:

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

Это дает ответ площади под кривой, но он такой же, как ответ без начальной загрузки, то есть улучшения нет. Мне нужно передать весь объект roc, чтобы получить улучшение из-за начальной загрузки.


person dc95    schedule 28.06.2016    source источник
comment
Вы хотите вернуть объект roc или вычислить площадь под roc? Ошибка возникает из-за того, что загрузчик ищет единственное значение, которое будет возвращено из статистического аргумента.   -  person    schedule 29.06.2016
comment
@ДжимМ. Я хочу вернуть объект. Это возможно? Я вернул область под кривой, используя $auc объекта roc. Но в этом случае площадь такая же, как и без начальной загрузки. Я подозреваю, что мне нужно будет передать объект roc, чтобы получить некоторое улучшение из-за начальной загрузки. Я отредактирую вопрос, чтобы добавить это.   -  person dc95    schedule 29.06.2016
comment
В качестве улучшения вашего кода я бы предложил увеличить количество бутстрапов примерно до 1000 в зависимости от изменчивости ваших данных. Простая загрузка объектов roc не приведет к улучшению (выше auc?), чем если вы просто вернете статистику auc. Если вы посмотрите на свой загрузочный объект b, он даст вам разницу между средним значением начальной загрузки и auc, рассчитанным на исходном наборе данных, также известным как смещение.   -  person    schedule 29.06.2016
comment
Чего вы хотите достичь? Начальная загрузка дает вам меру неопределенности статистики. Это не определяется непосредственно на кривой ROC, поэтому вам нужен, например, AUC.   -  person Calimo    schedule 29.06.2016
comment
Кстати, отредактированный код у меня работает нормально и дает AUC со смещением и std.error, как и ожидалось. Что значит нет улучшения? Начальная загрузка не улучшает вашу статистику, она только сообщает о ее неопределенности.   -  person Calimo    schedule 29.06.2016


Ответы (1)


Оказывается, вы не можете вернуть объект roc из функции statistic в boot. Это должно быть числовое значение. Таким образом, следующая модификация избавляет от ошибки (как отредактировано в вопросах)

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

Более того, как предложил @Calimo, boot улучшает только доверительный интервал, а не фактический ответ. В моем случае наблюдается небольшое улучшение доверительного интервала.

person dc95    schedule 09.07.2016