YGA*_*YGA 64 python numpy weighted standard-deviation statsmodels
numpy.average()有一个权重选项,但numpy.std()没有.有没有人有解决方法的建议?
Eri*_*got 111
以下简短的"手动计算"怎么样?
def weighted_avg_and_std(values, weights):
    """
    Return the weighted average and standard deviation.
    values, weights -- Numpy ndarrays with the same shape.
    """
    average = numpy.average(values, weights=weights)
    # Fast and numerically precise:
    variance = numpy.average((values-average)**2, weights=weights)
    return (average, math.sqrt(variance))
MSe*_*ert 28
有一个类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
您初始化类(请注意,您必须传递校正因子,此时的delta 自由度):
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
>>> weighted_stats.std_mean  
0.020818822467555047
如果你对标准误差和标准偏差之间的关系感兴趣:标准误差是(for ddof == 0)计算为加权标准偏差除以权重之和减去1的平方根(对应的statsmodels版本来源)GitHub上的0.9):
standard_error = standard_deviation / sqrt(sum(weights) - 1)
| 归档时间: | 
 | 
| 查看次数: | 35259 次 | 
| 最近记录: |