Значение параметра ddof (дельта степеней свободы) в numpy.std() python, его статистический смысл, влияние на выборку и на результат

При расчете среднеквадратичного отклонения значений с выборкой из массива данных берется только часть данных? Например у меня есть таблица с данными, где есть столбец - difference, в нем сто строк с данными. При вот такой записи - sigma = ms['difference'].std(ddof=1), система возьмет для расчета только часть данных или все сто строк?


Ответы (1 шт):

Автор решения: Сергей

Коротко: Все данные берутся.

Подробнее: Согласно документации*: "В расчетах используется делитель N - ddof, где N представляет количество элементов". То есть, объем данных, который берётся, остается неизменным (что и логично, с чего бы по неизвестно каким критериям "выносить" часть выборки?).

Но результат от этой дельты зависеть будет.

Обычно среднеквадратичное отклонение вычисляется, как

x.sum() / N, где N = len(x)

сам x = abs(a - a.mean())**2.

Но это верно для ddof = 0. При изменении ddof изменится и делитель, например, при ddof = 1 делитель станет равен N-1.

С практической точки зрения увеличение ddof приводит к увеличению среднеквадратичного отклонения.

Например, для массива из 10 чисел от 0 до 9 стандартное отклонение изменяется так:

2.87->3.03->3.12 при увеличении ddof 0->1->1.5 соотвественно.

Это тоже логично. Так как количество степеней свободы — это количество значений в итоговом вычислении статистики, способных варьироваться, то увеличивая дельту (которая представляет собой уменьшение этих степеней свободы), мы фактически фиксируем один из параметров, сокращая "свободность" выборки и увеличивая тем самым дисперсию.

*https://numpy.org/doc/stable/reference/generated/numpy.std.html#:~:text=Means%20Delta%20Degrees%20of%20Freedom,By%20default%20ddof%20is%20zero.

→ Ссылка