[英]Moving average in eviews and Python
我想問一下,在時間序列趨勢分析中進行移動平均模型時,我們在eview中進行移動平均時,我們在下面執行類似代碼的操作
moving average = @movavc(data, n)
但是在python中,我們將執行以下操作:
data["mov_avc"] = data.rolling(window=n).mean()
在eview中進行簡單移動平均時,我們首先丟失,但也丟失了最后幾個觀察值,在python中,我們只會丟失第一個觀察值。
怎么樣了
如果我正確地回答了您的問題,那么您想了解為什么在python中執行窗口大小n的移動平均值不會丟失最后幾分。
查看pandas.rolling() 文檔,您會看到以下注釋:
默認情況下,結果設置為窗口的右邊緣。 可以通過設置center = True將其更改為窗口的中心。
這意味着默認情況下,滾動窗口不以其計算平均值為中心。
讓我們來看一個例子。
我們有一個簡單的DataFrame:
In [2]: ones_matrix = np.ones((5,1))
...: ones_matrix[:,0] = np.array([i+1 for i in range(ones_matrix.shape[0])])
...: index = [chr(ord('A')+i) for i in range(ones_matrix.shape[0])]
...: df = pd.DataFrame(data = ones_matrix,columns=['Value'],index=index)
...: df
Out[2]:
Value
A 1.0
B 2.0
C 3.0
D 4.0
E 5.0
現在讓我們滾動3號窗口。 (請注意,我明確寫了參數center = False,但這是調用df.rolling()的默認值)
In [3]: rolled_df = df.rolling(window=3,center=False).mean()
...: rolled_df
Out[3]:
Value
A NaN
B NaN
C 2.0
D 3.0
E 4.0
前兩行是NaN,而最后的點保留在那里。 例如,如果您在索引為C的行上注意到,則滾動后的值為2 。 但在3點之前。 這意味着該索引的新值是對索引分別為{1,2,3}的索引為{A,B,C}的行進行平均的結果。
因此,在計算該位置的平均值時,您可以看到窗口不在索引C的中心,而是在索引B的中心。
您可以通過設置centered = True來更改它,從而輸出預期的行為:
In [4]: centred_rolled_df = df.rolling(window=3,center=True).mean()
...: centred_rolled_df
Out[4]:
Value
A NaN
B 2.0
C 3.0
D 4.0
E NaN
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.