我正在尝试验证 Pandas 的 ewm.std 计算,以便我可以为我的代码实现一步更新。这是代码问题的完整描述。
mrt = pd.Series(np.random.randn(1000))
N = 100
a = 2/(1+N)
bias = (2-a)/2/(1-a)
x = mrt.iloc[-2]
ma = mrt.ewm(span=N).mean().iloc[-3]
var = mrt.ewm(span=N).var().iloc[-3]
ans = mrt.ewm(span=N).std().iloc[-2]
print(np.sqrt( bias*(1-a) * (var + a * (x- ma)**2)), ans)
Run Code Online (Sandbox Code Playgroud)
(1.1352524643949702, 1.1436193844674576)
我使用了标准配方。有人能告诉我为什么这两个值不应该相同吗?即熊猫如何计算指数加权标准?
编辑:在 Julien 回答之后 - 让我再举一个用例。我正在绘制由熊猫计算的 var 的比率,并使用我从熊猫 ewm 协方差的 Cython 代码推断的公式。这个比率应该是 1。(我猜我的公式有问题,如果有人能指出的话)。
mrt = pd.Series(np.random.randn(1000))
N = 100
a = 2./(1+N)
bias = (2-a)/2./(1-a)
mewma = mrt.ewm(span=N).mean()
var_pandas = mrt.ewm(span=N).var()
var_calculated = bias * (1-a) * (var_pandas.shift(1) + …Run Code Online (Sandbox Code Playgroud)