2016-06-28 3 views
1

Я использую 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, чтобы улучшить его из-за начальной загрузки.

+0

Вы хотите вернуть объект roc или рассчитать площадь под ручкой? Ошибка возникает из-за того, что boot ищет одно значение, возвращаемое из аргумента статистики. –

+0

@JimM. Я хочу вернуть объект. Это возможно? Я вернул область под кривой, используя '$ auc' объекта roc. Но в этом случае область такая же, как и область без начальной загрузки. Я подозреваю, что мне нужно будет передать объект 'roc', чтобы иметь некоторое улучшение из-за начальной загрузки. Я отредактирую вопрос, чтобы добавить это. –

+0

Как улучшение вашего кода, я бы предложил увеличить количество загрузочных файлов где-то в районе 1000 в зависимости от изменчивости ваших данных. Просто при загрузке объекты roc не приведут к улучшению (более высокий auc?), Чем если бы вы только вернули статистику auc. Если вы посмотрите на свой загрузочный объект 'b', это даст вам разницу между средним значением начальной загрузки и auc, вычисленным на исходном наборе данных, а также смещением. –

ответ

2

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

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

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

Смежные вопросы