Почему функция chisq.test
в R сортирует данные перед суммированием в порядке убывания?
Данный код:
STATISTIC <- sum(sort((x - E)^2/E, decreasing = TRUE))
Если меня беспокоило числовую стабильность из-за использования арифметики float и захотело использовать какой-то простой для развертывания взлома, я бы сортировал данные в порядке возрастания перед суммированием, чтобы не добавлять в накопитель крошечное значение в большое значение (в чтобы избежать максимально возможного обрезки наименее значимых бит в результате).
Я просмотрел исходный код sum, но он не объяснил, почему передавать данные в порядке убывания на sum()
. Что мне не хватает?
Пример:
x = matrix(1.1, 10001, 1)
x[1] = 10^16 # We have a vector with 10000*1.1 and 1*10^16
c(sum(sort(x, decreasing = TRUE)), sum(sort(x, decreasing = FALSE)))
Результат:
10000000000010996 10000000000011000
Когда мы сортируем данные в порядке возрастания, получаем правильный результат. Если мы сортируем данные в порядке убывания, мы получаем результат, который выключен на 4.