这个代码和这个公式有什么区别?

时间:2015-08-19 02:35:52

标签: python numpy statistics finance kurtosis

我正在编写算法并计算每日回报分布的峰度。我试图让我的峰值计算与Excel的计算相符。 Excel的计算应该使用此网页顶部的公式:http://www.macroption.com/kurtosis-excel-kurt/

这是我用来模拟该公式的代码(返回是一个由每日返回系列组成的numpy数组):

def kurtosis(returns):
    n = len(returns)
    avg = np.average(returns)
    std = np.std(returns)
    coefficient = 1.0 * n * (n+1) / ((n-1) * (n-2) * (n-3) * std**4.0)
    term = (3 * (n-1)**2.0) / ((n-2) * (n-3))
    summation = 0

    for x in returns: 
        summation += ( (x - avg) ) ** 4.0
    kurt = coefficient * summation - term

    return kurt 

显然,excel使用的公式和我的代码之间存在差异... Excel的峰度为1.94,而我的代码值为2.81。

有没有人知道为什么这两个值不同?

1 个答案:

答案 0 :(得分:0)

重写我的评论:

ddof=1提供np.std()参数会将其计算从种群更改为样本(n-1)。通常std的变化很小,但使用s**4时,s中的小变化会被放大。