Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 这个代码和这个公式有什么区别?_Python_Numpy_Statistics_Finance_Kurtosis - Fatal编程技术网

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

Python 这个代码和这个公式有什么区别?,python,numpy,statistics,finance,kurtosis,Python,Numpy,Statistics,Finance,Kurtosis,我正在写一个算法,计算每日收益分布的峰度。我试图让我的峰度计算与Excel的相匹配。Excel的计算假定使用此网页顶部的公式: 下面是我用来模拟该公式的代码(returns是由一系列每日返回组成的numpy数组): 显然,excel使用的公式和我的代码之间存在差异。。。Excel给出的峰度为1.94,而我的代码给出的值为2.81 有人知道为什么这两个值不同吗?重写我的评论: 将ddof=1参数提供给np.std()将其计算从总体更改为样本(n-1)。通常,std中的变化很小,但使用s**4时,s

我正在写一个算法,计算每日收益分布的峰度。我试图让我的峰度计算与Excel的相匹配。Excel的计算假定使用此网页顶部的公式:

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

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

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

重写我的评论:

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

重写我的评论:


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

您可以为
std
尝试不同的
ddof
,例如
ddof=1
。检查该函数的文档。通常,选择总体v样本自由度的效果很小,但使用
s**4
,效果会被放大。您也可以使用
scipy.stats.kurtosis
,并查找其他
[numpy]kurtosis
来提问。给出不同值的数据样本是什么?如果它太大而不能在这里发布,你能找到一个小的数据样本,你可以在这里发布它,它会产生不同的答案吗?(不是一个解决方案)你可以用
summation=np.sum((返回平均值)**4)替换
@hpaulj循环的
std=np.std(返回,ddof=1)
使用中的数据给出与Excel相同的结果。也许你应该把你的评论作为答案?你可以为
std
尝试不同的
ddof
,例如
ddof=1
。检查该函数的文档。通常,选择总体v样本自由度的效果很小,但使用
s**4
,效果会被放大。您也可以使用
scipy.stats.kurtosis
,并查找其他
[numpy]kurtosis
来提问。给出不同值的数据样本是什么?如果它太大而不能在这里发布,你能找到一个小的数据样本,你可以在这里发布它,它会产生不同的答案吗?(不是一个解决方案)你可以用
summation=np.sum((返回平均值)**4)替换
@hpaulj循环的
std=np.std(返回,ddof=1)
使用中的数据给出与Excel相同的结果。也许你应该把你的评论作为答案?
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