我有这个代码可以使用我自己的代码计算峰度(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 给出不同的结果?我遵循数学世界中的定义。
如果您阅读了 scipy 峰度函数的文档,scipy 默认计算超额峰度(负 3):
scipy.stats.峰度(a,轴= 0,fisher = True,偏差= True)
计算数据集的峰度(Fisher 或 Pearson)。
峰度是第四中心矩除以平方 方差。如果使用 Fisher 的定义,则减去 3.0 正态分布的结果为 0.0。
如果偏差为 False,则使用 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
任何人都可以发布总体峰度和超峰度的数学公式以及使用样本时两者的偏差校正公式吗?