Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Numpy 用Python计算加权统计矩_Numpy_Scipy_Skew_Kurtosis_Code Statistics - Fatal编程技术网

Numpy 用Python计算加权统计矩

Numpy 用Python计算加权统计矩,numpy,scipy,skew,kurtosis,code-statistics,Numpy,Scipy,Skew,Kurtosis,Code Statistics,我一直在寻找一个函数或包,它允许我以加权的方式计算分布的偏斜和峰度,因为我有直方图数据 例如,我有数据 将numpy导入为np np.数组([[1,2], [2, 5], [3, 6], [4,12], [5, 1]) 其中第一列[1,2,3,4,5]是数值,第二列[2,5,6,12,1]是数值的频率 我已经找到了如何使用中指定的加权的\u avg\u和\u std函数以加权方式进行前两个矩(平均值、标准偏差),但我不太确定如何将其扩展到偏斜和峰度,甚至第n个统计矩 我已经找到了定义本身,可以

我一直在寻找一个函数或包,它允许我以加权的方式计算分布的偏斜和峰度,因为我有直方图数据

例如,我有数据

将numpy导入为np
np.数组([[1,2],
[2, 5],
[3, 6],
[4,12],
[5, 1])
其中第一列
[1,2,3,4,5]
是数值,第二列
[2,5,6,12,1]
是数值的频率

我已经找到了如何使用中指定的
加权的\u avg\u和\u std
函数以加权方式进行前两个矩(平均值、标准偏差),但我不太确定如何将其扩展到偏斜和峰度,甚至第n个统计矩

我已经找到了定义本身,可以手动编写函数来从头开始实现它,但在我开始之前,我想知道是否有任何现有的包或函数可以实现这一点

谢谢

编辑: 我明白了,下面的代码是有效的(请注意,这是针对人口时刻的)

skewnews=np.average((平均值)/np.sqrt(方差))**3,权重=权重)

kurtosis=np.average((平均值)/np.sqrt(方差))**4-3,权重=权重)

我想您已经按照您提供的链接中的配方列出了所需的所有成分:

将numpy导入为np
a=np.数组([[1,2],[2,5],[3,6],[4,12],[5,1]]
值,权重=a.T
定义n_加权力矩(值、权重,n):
断言n>0&(values.shape==weights.shape)
w_平均值=np平均值(值,权重=权重)
w_var=np.和(权重*(值-w_平均值)**2)/np.和(权重)
如果n==1:
返回w_平均值
elif n==2:
返回w_var
其他:
w_标准=np.sqrt(w_变量)
返回np.和(权重*((值-w_平均值)/w_标准)**n)/np.和(权重)
#与np.平均值相同((值-w_平均值)/w_标准)**n,权重=权重)
其结果是:

范围(1,5)内的n的
:
打印(f'矩{n}值为{n_加权_矩(值,权重,n)}')
力矩1的值为3.19230769223076925
力矩2值为1.0784023668639053
力矩3值为-0.5962505715592139
力矩4的值为2.384432138280637
请注意,在计算多余峰度时,为一般n矩实现的公式没有考虑到这一点。

摘自

这是密码

def weighted_mean(var, wts):
    """Calculates the weighted mean"""
    return np.average(var, weights=wts)


def weighted_variance(var, wts):
    """Calculates the weighted variance"""
    return np.average((var - weighted_mean(var, wts))**2, weights=wts)


def weighted_skew(var, wts):
    """Calculates the weighted skewness"""
    return (np.average((var - weighted_mean(var, wts))**3, weights=wts) /
            weighted_variance(var, wts)**(1.5))

def weighted_kurtosis(var, wts):
    """Calculates the weighted skewness"""
    return (np.average((var - weighted_mean(var, wts))**4, weights=wts) /
            weighted_variance(var, wts)**(2))