我想问一下,在做时间序列中的移动平均模型时,趋势分析,当我们在eview中做移动平均时,我们做一些类似于下面的代码
moving average = @movavc(data, n)然而,在python中,我们将执行如下操作:
data["mov_avc"] = data.rolling(window=n).mean()当在eview中做简单的移动平均时,我们首先损失,但最后几次观察,在python中,我们只会失去第一次观测。
是怎么回事?
发布于 2019-08-21 11:37:02
如果我正确地回答了您的问题,您想了解为什么在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 NaNhttps://stackoverflow.com/questions/57590424
复制相似问题