В чем разница между numpy var() и дисперсией статистики() в python?

Я пытался выполнить одно упражнение Dataquest, и я понял, что разница, которую я получаю, различна для двух пакетов.

например, для [1,2,3,4]

from statistics import variance
import numpy as np
print(np.var([1,2,3,4]))
print(variance([1,2,3,4]))
//1.25
//1.6666666666666667

Ожидаемый ответ упражнения вычисляется с помощью np.var()

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

Ответ 1

Использовать этот

print(np.var([1,2,3,4],ddof=1))

1.66666666667

Дельта Степени свободы: делитель, используемый в расчете, равен N - ddof, где N представляет количество элементов. По умолчанию ddof равен нулю.

Среднее значение обычно рассчитывается как x.sum()/N, где N = len(x). Однако, ddof указан N - ddof вместо него используется делитель N - ddof.

В стандартной статистической практике ddof=1 обеспечивает объективную оценку дисперсии гипотетической бесконечной совокупности. ddof=0 обеспечивает максимальную оценку вероятности дисперсии для нормально распределенных переменных.

Статистические библиотеки, такие как numpy, используют дисперсию n для того, что они называют var или дисперсией, и стандартным отклонением.

Для получения дополнительной информации обратитесь к этой документации: Numpy Doc

Ответ 2

Правильно, что деление на N-1 дает несмещенную оценку среднего значения, что может создать впечатление, что деление на N-1, следовательно, немного более точно, хотя и немного сложнее. Слишком часто не указывается, что деление на N дает оценку минимальной дисперсии для среднего значения, которая, вероятно, будет ближе к истинному среднему значению, чем несмещенная оценка, а также несколько проще.