【发布时间】:2015-08-19 02:35:51
【问题描述】:
我正在编写一个算法并计算每日收益分布的峰度。我试图让我的峰度计算与 Excel 的计算相匹配。 Excel 的计算应该使用此网页顶部的公式:http://www.macroption.com/kurtosis-excel-kurt/
这是我用来模拟该公式的代码(returns 是一个由一系列每日回报组成的 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。
有人知道为什么这两个值不同吗?
【问题讨论】:
-
您可以为
std尝试不同的ddof,例如。ddof=1。检查该函数的文档。通常选择population v sample dof的效果很小,但是使用s**4,效果会被放大。 -
您还可以使用
scipy.stats.kurtosis,并查找其他[numpy] kurtosisSO 问题。 -
给出不同值的数据样本是什么?如果在此处发布太大,您能否找到一个可以在此处发布的小数据样本,以产生不同的答案?
-
(不是解决方案)您可以用
summation=np.sum((returns-avg)**4)替换您的for循环 -
@hpaulj 我可以确认使用
std = np.std(returns, ddof = 1)与使用来自Microsoft's kurtosis help page 的数据的Excel 提供相同的结果。也许你应该把你的评论作为答案?
标签: python numpy statistics finance kurtosis