如何在scipy中计算出峰度?

4 python statistics numpy scipy

我有这个代码来计算kurtosis(http://mathworld.wolfram.com/Kurtosis.html)使用我自己的代码,我将它与scipy.stats.kurtosis

a = array([   1. ,    2. ,    2.5,  400. ,    6. ,    0. ])
#kurtosis (gives: 4.19886)
print (sum((a - np.mean(a)) ** 4)/len(a)) / np.std(a)**4
# scipy kurtosis (gives: 5.996677)
print scipy.stats.kurtosis(a,bias=False)
Run Code Online (Sandbox Code Playgroud)

为什么scipy会给出不同的结果?我遵循mathworld中的定义.

mtr*_*ean 8

如果你阅读了scipy的峰度函数的文档,scipy默认是暗示过度的Kurtosis(减3):

scipy.stats.kurtosis(a,axis = 0,fisher = True,bias = True)

计算数据集的峰度(Fisher或Pearson).

峰度是第四个中心矩,除以方差的平方.如果使用Fisher的定义,则从结果中减去3.0,得到0.0表示正态分布.

如果偏差为假,则使用k统计量来计算峰度,以消除来自偏差矩估计量的偏差

设置fisherFalse将给出您的期望:

In [1]: a = np.array([   1. ,    2. ,    2.5,  400. ,    6. ,    0. ])

In [2]: scipy.stats.kurtosis(a, fisher=False)
Out[2]: 4.198860780044809
Run Code Online (Sandbox Code Playgroud)

  • 显然,对"偏见"参数的解释令人困惑.设置`bias = False`将进行偏差校正,而不是相反. (3认同)