我注意到从scipy统计信息返回的偏斜度是不正确的。 Pandas.skew()实际上提供了更好的结果。 我最近正尝试复制经典论文“ French&Schwert的预期股票收益率和波动率”。我使用1928年至1984年的S&P500数据。我按照论文中的公式计算收益率的标准偏差,对于std dev的均值std dev,我可以获得相同的结果。 但是,当我使用scipy.stats.skew函数时,我无法获得任何数量的sp return std dev。该函数返回“ nan”,显然应该在其中返回一个值。 我切换到Pandas.skew()。它给了我与论文中一样的正确值。
很显然,scipy.stats.skew()函数出了点问题。
scipy.stats.skew() pandas.skew()
array([0.6922229,0.69186265,-0.11292165,4.23571807,-1.9556035, 5.39873607,南])
关闭Close_gspc 0.693745 调整Close_gspc_lag 0.693384 SP_返回-0.113170 SP_Return_square 4.245033 SP_Return_lag -1.959904 SP_varianceMon 5.410609 SP_varianceMon_sqr根2.800919 dtype:float64
答案 0 :(得分:1)
您没有提供足够的信息或示例代码来重现所获得的nan
。
要使scipy.stats.skew
的计算值与Pandas中的skew()
方法相同,请添加参数bias=False
。
这是一个例子。
首先,导入:
In [21]: import numpy as np
In [22]: import pandas as pd
In [23]: from scipy.stats import skew
生成一些数据:
In [24]: np.random.seed(8675309)
In [25]: x = np.random.weibull(0.2, size=15)
使用scipy和Pandas计算偏斜:
In [26]: skew(x, bias=False)
Out[26]: 3.7582525674514544
In [27]: pd.Series(x).skew()
Out[27]: 3.7582525674514544