В чем разница между 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 дает оценку минимальной дисперсии для среднего значения, которая, вероятно, будет ближе к истинному среднему значению, чем несмещенная оценка, а также несколько проще.