如何在scipy中计算出峰度?

时间:2014-11-09 01:24:47

标签: python numpy statistics scipy

我有这个代码使用我自己的代码来计算峰度(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)

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

1 个答案:

答案 0 :(得分:8)

如果您阅读了scipy的峰度函数的documentation,scipy默认会导致过度峰度(减去3):

  

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

     

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

     

Kurtosis是第四个中心时刻除以广场的平方   方差。如果使用Fisher的定义,则从中减去3.0   结果为0.0给出正态分布。

     

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

fisher设置为False会为您提供所期望的内容:

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

In [2]: scipy.stats.kurtosis(a, fisher=False)
Out[2]: 4.198860780044809