【问题标题】:statsmodel time series analysis - using AR model with differing lags between endogenous and exogenous variablesstatsmodel 时间序列分析 - 使用内生变量和外生变量之间具有不同滞后的 AR 模型
【发布时间】:2021-05-29 20:43:03
【问题描述】:

我正在尝试在 python 中构建一个 ARDL 模型,其中我有一个模型如下:

y = b0 + b1^t-1 + b2^t-2 + ... b5^t-5 + a1^x-1

换句话说,一个具有 5 个自回归滞后项和 1 个外生滞后项的时间序列模型。

我尝试使用 statsmodels.tsa.arima_model.ARMA,它允许外生变量,并且我得到了包含以下变量的输出:

const, x1, ar.L1.y, ar.L2.y, ar.L3.y, ar.L4.y, ar.L5.y

我用来获取这些变量的代码是

模型 = ARMA(endog=returns, order=(ar_order, 0, exog_order), exog=exog_returns)

model_fit = model.fit()

打印(model_fit.summary())

基于 x1 的系数值,我假设这不是 1 次滞后,而是外生变量的值作为一个整体影响。

无论如何要指定我只是希望模型对模型中的外生变量使用 1 时间滞后?

【问题讨论】:

    标签: python time statistics series statsmodels


    【解决方案1】:

    不要使用ARMA 是否已弃用。使用SARIMAXAutoReg

    使用 exog 变量的关键是确保它们与它们影响的 y 数据对齐。在这里,我将x 移动 1,这样就好像 x 的滞后在驱动 y。

    如果使用 AutoReg,你可以这样做

    from statsmodels.tsa.api import AutoReg
    import numpy as np
    import pandas as pd
    
    rg = np.random.default_rng(0)
    idx = pd.date_range("1999-12-31",freq="M",periods=100)
    x = pd.DataFrame({"x":rg.standard_normal(100)}, index=idx)
    x = x.shift(1) # lag x
    y = x @ np.ones((1,)) + rg.standard_normal(100)
    # Drop first obs which is NaN
    y = y.iloc[1:]
    x = x.iloc[1:]
    
    # 5 lags and exogenous regressors
    res = AutoReg(y,5, exog=x, old_names=False).fit()
    
    # Summary
    res.summary()
    

    这会产生

                                AutoReg Model Results
    ==============================================================================
    Dep. Variable:                      y   No. Observations:                   99
    Model:                   AutoReg-X(5)   Log Likelihood                -127.520
    Method:               Conditional MLE   S.D. of innovations              0.940
    Date:                Mon, 01 Mar 2021   AIC                              0.046
    Time:                        14:57:44   BIC                              0.262
    Sample:                    06-30-2000   HQIC                             0.133
                             - 03-31-2008
    ==============================================================================
                     coef    std err          z      P>|z|      [0.025      0.975]
    ------------------------------------------------------------------------------
    const         -0.0500      0.098     -0.512      0.609      -0.241       0.141
    y.L1          -0.0342      0.070     -0.486      0.627      -0.172       0.104
    y.L2           0.0621      0.070      0.884      0.377      -0.076       0.200
    y.L3          -0.0715      0.071     -1.009      0.313      -0.210       0.067
    y.L4          -0.0941      0.070     -1.347      0.178      -0.231       0.043
    y.L5          -0.0323      0.071     -0.453      0.651      -0.172       0.107
    x              1.0650      0.103     10.304      0.000       0.862       1.268
                                        Roots
    =============================================================================
                      Real          Imaginary           Modulus         Frequency
    -----------------------------------------------------------------------------
    AR.1            1.1584           -1.0801j            1.5838           -0.1194
    AR.2            1.1584           +1.0801j            1.5838            0.1194
    AR.3           -1.3814           -1.7595j            2.2370           -0.3559
    AR.4           -1.3814           +1.7595j            2.2370            0.3559
    AR.5           -2.4649           -0.0000j            2.4649           -0.5000
    -----------------------------------------------------------------------------
    
    

    【讨论】:

    • 非常感谢。那么,说 x 系数只是 1 个时间滞后是正确的,还是有什么不同?因为我看到的系数值与您在模型摘要中的值相似。令我惊讶的是,如果只是 1 次滞后,系数的值就会如此显着。我曾假设 X 在某种程度上代表了整个外生时间序列......
    • X 只是时间滞后。在设置 exog 回归量集时,该模型看起来很像 OLS,但有一些 AR 项。如果您可以使用OLS(y,exog) 将您的模型估计为 ARDL(0,Q),这样 exog 确实包含 x 的滞后值,那么您可以将其估计为 ARDL(P,Q) 为AutoReg(y,lags=P,exog)。此处系数的标准误差为 0.1 完全取决于 x 的方差为 1,残差的方差为 1,因此参数方差 1*(sum(t=2)^100 1**2)^( -1) = 1/99。这正是 OLS 的结果。
    猜你喜欢
    • 2010-12-30
    • 2021-12-22
    • 1970-01-01
    • 2017-02-11
    • 2022-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2019-08-02
    相关资源
    最近更新 更多