【问题标题】:Moving average in eviews and Pythoneviews 和 Python 中的移动平均线
【发布时间】:2019-12-26 15:52:50
【问题描述】:

我想问在时间序列趋势分析中做移动平均模型时 当我们在 eviews 中做移动平均时,我们会做类似下面的代码

moving average = @movavc(data, n)

然而在python中,我们会做如下的事情:

data["mov_avc"] = data.rolling(window=n).mean()

在对评论进行简单移动平均时,我们首先会丢失最后几个观察结果,在 python 中我们只会丢失第一个观察结果。

怎么回事?

【问题讨论】:

  • 您的数据中是否缺少观测值 (NA)?也许试试 @mav(data, n) 函数?它应该为您提供与 Python 中的 data.rolling(window=n).mean() 相同的结果。

标签: python moving-average eviews


【解决方案1】:

如果我没有正确回答您的问题,您想了解为什么在 python 中执行窗口大小 n 的移动平均不会丢失最后几分。

查看 pandas.rolling() docs 您会看到以下注释:

默认情况下,结果设置在窗口的右边缘。这 可以通过设置 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,而最后的点仍然存在。例如,如果您注意到具有 index C 的行,则滚动后的值为 2。但在 3 之前。这意味着该索引的新值是对索引为 {A,B,C} 的行进行平均的结果,这些索引的值分别为 {1,2,3}。

因此,在计算该位置的平均值时,您可以看到窗口不是以索引 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

【讨论】:

    猜你喜欢
    • 2017-09-01
    • 2022-01-26
    • 2013-12-22
    • 2013-09-02
    • 2021-05-30
    • 2019-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多