【问题标题】:Python/Statsmodels - Vector autoregression endogPython/Statsmodels - 向量自回归 endog
【发布时间】:2016-09-07 13:20:29
【问题描述】:

我正在尝试使用 statsmodels 库运行 VAR,显然我的 endog 格式是错误的。尝试了一些不同的方法,但我不知道如何解决它。

我正在运行以下代码:

def VAR_run(pred_frame,targetframe):

    #preparing the dates
    dates=pred_frame.index

    # preparing target
    targetmatrix=targetframe.as_matrix()

    # preparing pred_frame
    predmatrix=pred_frame.as_matrix()

    #creating endog
    timeseries=(predmatrix,targetmatrix)

    model=VAR((timeseries),dates=dates)

我得到的错误如下:

File "/Users/file.py", line 1198, in M_pred_frame
VAR_run(pred_frame,targetframe)
File "/file.py", line 1156, in VAR_run
model=VAR((timeseries),dates=dates)
File "/Library/Python/2.7/site-packages/statsmodels/tsa/vector_ar/var_model.py", line 334, in __init__
raise ValueError("Only gave one variable to VAR")
ValueError: Only gave one variable to VAR

谁能启发我的旅程?


额外信息

pred_frame原来是熊猫DataFrame这样的:

            Value  lag1  2lag  3lag  4lag  5lag  6lag  7lag  8lag  9lag
Date                                                                      
...
2015-12-01   1.01  0.82  0.54  0.22  0.62  0.79  0.74  0.71  1.32  1.22   
2016-01-01   0.96  1.01  0.82  0.54  0.22  0.62  0.79  0.74  0.71  1.32   
2016-02-01   1.27  0.96  1.01  0.82  0.54  0.22  0.62  0.79  0.74  0.71  

targetframe原来也是熊猫DataFrame这样的:

            Tgt
Date            
...
2015-10-01  0.54
2015-11-01  0.82
2015-12-01  1.01
2016-01-01  0.96
2016-02-01  1.27

当变成数组时,它们看起来像这样:

targetmatrix = [[  nan]
                [ 1.18]
                [ 0.5 ]
                [ 0.51]
                ...]

predmatrix= ...[  1.27         0.96         1.01       ...,  -2.14865885  -2.14865885
            -3.19355784]
            [         nan          nan          nan ..., -18.13211803  -2.14865885
            -2.14865885]
            [         nan          nan          nan ...,          nan          nan
            nan]]


dates = DatetimeIndex(['1958-04-01', '1958-05-01', '1958-06-01', '1958-07-01',
                       '1958-08-01', '1958-09-01', '1958-10-01', '1958-11-01',
                       '1958-12-01', '1959-01-01',
                       ...
                       '2015-07-01', '2015-08-01', '2015-09-01', '2015-10-01',
                       '2015-11-01', '2015-12-01', '2016-01-01', '2016-02-01',
                       '2016-03-01', '2016-04-01'],
                       dtype='datetime64[ns]', name=u'Date', length=697, freq='MS')

关于形状:

targetmatrix.shape = (230, 1)
predmatrix.shape = (697, 1920)
dates.shape=(697,)

我们将非常感谢您的帮助 :)

【问题讨论】:

    标签: python numpy pandas machine-learning statsmodels


    【解决方案1】:

    statsmodels.tsa.api.VAR 模型适用于多元时间序列,如 here 所示。所以输入至少需要.shape=(T, 2)

    还有多种其他方法可用于单变量时间序列分析(see docs)。这些方法接受一维输入(或.shape=(T, 1))。

    【讨论】:

    • 您是否熟悉另一种 Statsmodels 方法,该方法的行为类似于 VAR 或 VARMAX 并且使您也可以使用外生变量? (并且仍然接受您在答案中提到的一维输入)
    猜你喜欢
    • 2014-12-22
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-05
    • 2015-12-31
    • 1970-01-01
    • 2014-07-27
    • 2017-10-20
    相关资源
    最近更新 更多