2014-11-09 106 views
4

我有這樣的代碼使用自己的代碼來計算峯度(http://mathworld.wolfram.com/Kurtosis.html),我把它比作scipy.stats.kurtosisscipy是如何計算峯度的?

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的給不同的結果?我遵循數學世界的定義。

回答

8

如果你讀SciPy的的峯度函數的documentation,SciPy的是calculting默認超額峯度(與減3):

scipy.stats.kurtosis(A,軸= 0,漁民=真, bias = True)

計算數據集的峯度(Fisher或Pearson)。

峯度是第四中心時刻除以 方差的平方。如果使用費希爾定義,則從 中減去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 
+0

非常違反直覺 - 爲什麼不'scipy.stats.kurtosis(a,fisher = False,bias = False)''給出與我的代碼相同的答案?我的代碼沒有偏差修正 – user248237dfsf 2014-11-09 01:38:47

+3

顯然,對'bias'參數的解釋很混亂。設置'bias = False'會做偏差修正,而不是相反。 – mtrbean 2014-11-09 01:42:48