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 к удвоению.