我用自己的代码计算峰度(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中的定义。

最佳答案

如果你读了ScPy峰度函数的“AA>”,SISPY就默认地计算了多余峰度(减去3):
Sistay.Stuts.峰度(a,轴=0,Fisher=true,偏差=真)
计算数据集的峰度(Fisher或皮尔森)。
峰度是第四个中心矩除以
方差。如果使用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

10-02 03:54