在python

时间:2017-07-14 16:53:23

标签: python r statistics time-series statsmodels

我正在使用VAR模型预测滞后2的多变量时间序列。我有三个功能,并希望预测多个时间戳。我没有预测所有这三个特征,而是实际知道其中两个特征的值,并且只想预测一个特征。

如果我想要预测所有三个功能5个时间戳,我可以按照以下方式进行操作(这是一个玩具示例):

import pandas as pd
from statsmodels.tsa.api import VAR    
data=pd.DataFrame({'Date':['1959-06-01','1959-06-02','1959-06-03','1959-06-04']\
                   ,'a':[1,2,3,5],'b':[2,3,5,8],'c':[3,4,7,11]})
data.set_index('Date', inplace=True)
model = VAR(data)
results = model.fit(2)
results.forecast(data.values[-2:], 5)

请注意data

            a  b   c
Date                
1959-06-01  1  2   3
1959-06-02  2  3   4
1959-06-03  3  5   7
1959-06-04  5  8  11

预测给了我

array([[   8.01388889,   12.90277778,   17.79166667],
       [  12.93113426,   20.67650463,   28.421875  ],
       [  20.73343461,   33.12405961,   45.51468461],
       [  33.22366195,   52.98948789,   72.75531383],
       [  53.15895736,   84.72805652,  116.29715569]])

假设我知道a的下5个值实际上应该是8,13,21,34,55,而b的下5个值应该是13,21,34,55,89。有没有办法将其合并到statsmodels.tsa(或任何其他python包)中的模型中,以仅预测c的5个值?我知道R有这样的选择,将“硬”条件合并到cpredict.VAR中,但我想知道是否可以在python中完成。

以上是一个玩具示例。实际上我有几十个功能,但我仍然知道所有功能,并且只想使用VAR模型预测其中一个。

1 个答案:

答案 0 :(得分:1)

解决此问题时,我也遇到类似的问题。这是一种临时方法,可以满足您的要求。

prediction = model_fit.forecast(model_fit.y, steps=len(test))
predictions = prediction[:,0]

` 其中projection [:,0]中的0表示包含所需预测值的列。