Подтвердить что ты не робот

Различные стандартные отклонения для одного входа от Wolfram и numpy

В настоящее время я работаю над переопределением некоторого алгоритма, написанного на Java в Python. Один шаг - рассчитать стандартное отклонение списка значений. Исходная реализация использует DescriptiveStatistics.getStandardDeviation из библиотеки Apache Math 1.1 для этого. Я использую стандартное отклонение numpy 1.5. Проблема в том, что они дают (очень) разные результаты для одного и того же ввода. Образец, который у меня есть, таков:

[0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]

Получаю следующие результаты:

numpy           : 0.10932134388775223
Apache Math 1.1 : 0.12620366805397404
Wolfram Alpha   : 0.12620366805397404

Я проверил с Wolfram Alpha, чтобы получить третье мнение. Я не думаю, что такое различие можно объяснить только точностью. Кто-нибудь знает, почему это происходит, и что я могу с этим поделать?

Изменить. Вычисление его вручную в Python дает тот же результат:

>>> from math import sqrt
>>> v = [0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842]
>>> mu = sum(v) / 4
>>> sqrt(sum([(x - mu)**2 for x in v]) / 4)
0.10932134388775223

Кроме того, о том, чтобы не использовать его правильно:

>>> from numpy import std
>>> std([0.113967640255, 0.223095775796, 0.283134228235, 0.416793887842])
0.10932134388775223
4b9b3361

Ответ 1

Апач и Вольфрам делятся на N-1, а не на N. Это степень регулировки свободы, так как вы оцениваете μ. Делясь на N-1, вы получаете несмещенную оценку стандартного отклонения населения. Вы можете изменить поведение NumPy с помощью параметра ddof.

Это описано в документации NumPy:

Среднее квадратическое отклонение обычно рассчитывается как x.sum()/N, где N = len (x). Если, однако, ddof заданный, дивизор N - ddof равен используется вместо этого. В стандартной статистической практика, ddof = 1 обеспечивает беспристрастное оценщик дисперсии бесконечное население. ddof = 0 обеспечивает оценка максимального правдоподобия дисперсия для нормально распределенных переменные. Стандартное отклонение Вычисленная в этой функции квадратный корень из оцененной дисперсии, так что даже с ddof = 1 это не будет непредвзятая оценка стандарта отклонение как таковое.