我想驗證熊貓的ewm.std計算,以便我可以實現我的代碼的一步更新。以下是代碼問題的完整描述。熊貓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)
(1.1352524643949702,1.1436193844674576)
我已經使用標準制劑。有人能告訴我爲什麼這兩個值不應該是一樣的嗎?即大熊貓如何計算指數加權標準?
編輯:Julien的答案後 - 讓我再舉一個用例。我正在繪製由熊貓計算的var的比率,並使用從熊貓ewm協方差的Cython代碼推斷出的公式I.這個比例應該是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) + a * (mrt-mewma.shift(1))**2)
(var_calculated/var_pandas).plot()
該圖顯示問題清楚。
編輯2:通過試驗和錯誤,我想通了正確的公式:
var_calculated = (1-a) * (var_pandas.shift(1) + bias * a * (mrt-mewma.shift(1))**2)
但我不認爲它應該是正確的!有人可以說明這一點嗎?
潛在重複[此questi上](http://stackoverflow.com/questions/37924377/does-pandas-calculate-ewm-wrong)? –
@JulienMarrec No.我可以確切地驗證ewma。我在ewmstd獲得冠軍。 –
ewm在此定義:[window.py#L1387](https://github.com/pandas-dev/pandas/blob/master/pandas/core/window.py#L1387)。 ewm.std調用是[here](https://github.com/pandas-dev/pandas/blob/master/pandas/core/window.py#L1555).-然後去_zqrst [here]( https://github.com/pandas-dev/pandas/blob/master/pandas/core/window.py#L1761) –