R-функция colAUC в пакете caTools не работает с большими выборками

Например:

require(caTools)
colAUC(runif(90000), sample(c(0,1), 90000, replace = TRUE))
             [,1]
0 vs. 1 0.5000629

работает нормально, однако

colAUC(runif(100000), sample(c(0,1), 100000, replace = TRUE))

дает

            [,1]
0 vs. 1   NA
Warning message:
In n1 * n2 : NAs produced by integer overflow

Я делаю что-то не так, или это, возможно, ошибка? ROCR::performance дает разумный ответ для образцов такого размера.

1 ответ

Решение

Отвечая на мой собственный вопрос. Во-первых, у colAUC есть параметр alg который позволяет варианты "Wilcoxon" или же "ROC", "ROC" Опция вычисляет AUC путем интегрирования кривой ROC с использованием правила трапеции, чего я и ожидал, и это не дает ошибки для больших выборок, например

> colAUC(runif(1000000), sample(c(0,1), 1000000, replace = TRUE), alg = "ROC")
             [,1]
0 vs. 1 0.5004179

Однако значение по умолчанию alg является "Wilcoxon"и этот алгоритм вычисляет n1 * n2 где n1 а также n2 рассчитываются table оператор и так имеют тип целое число. Это означает, что 32-разрядное целое число - R, по-видимому, еще не поддерживает 64-разрядные целые числа. Таким образом, возникает ошибка переполнения. Эту ошибку можно устранить, если перед умножением n1 и n2 были преобразованы в числовые. Я отправлю письмо ответственному за пакет, чтобы он знал об этой проблеме.

ОБНОВЛЕНИЕ: я получил электронное письмо от сопровождающего пакета, в котором говорилось, что он исправил это, приведя n1 и n2 к удвоению.

Другие вопросы по тегам