В statsmodels
имеется класс, который облегчает вычисление взвешенной статистики: statsmodels.stats.weightstats.DescrStatsW
.
Исходя из этого набора данных и весов:
import numpy as np
from statsmodels.stats.weightstats import DescrStatsW
array = np.array([1,2,1,2,1,2,1,3])
weights = np.ones_like(array)
weights[3] = 100
Вы инициализируете класс (обратите внимание, что вы должны передать поправочный коэффициент, дельта степеней свободы на данный момент):
weighted_stats = DescrStatsW(array, weights=weights, ddof=0)
Тогда вы можете рассчитать:
.mean
средневзвешенное значение :
>>> weighted_stats.mean
1.97196261682243
.std
взвешенное стандартное отклонение :
>>> weighted_stats.std
0.21434289609681711
.var
взвешенная дисперсия :
>>> weighted_stats.var
0.045942877107170932
.std_mean
стандартная ошибка средневзвешенного значения:
>>> weighted_stats.std_mean
0.020818822467555047
На всякий случай, если вас интересует связь между стандартной ошибкой и стандартным отклонением: стандартная ошибка (для ddof == 0
) рассчитывается как взвешенное стандартное отклонение, деленное на квадратный корень из суммы весов минус 1 ( соответствующий источник для statsmodels
версии 0.9 на GitHub ):
standard_error = standard_deviation / sqrt(sum(weights) - 1)