簡體   English   中英

eviews和Python中的移動平均線

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM