예제 #1
0
def test_autoreg_append_deterministic(append_data):
    y = append_data.y
    y_oos = append_data.y_oos
    y_both = append_data.y_both
    x = append_data.x
    x_oos = append_data.x_oos
    x_both = append_data.x_both

    terms = [TimeTrend(constant=True, order=1), Seasonality(12)]
    dp = DeterministicProcess(y.index, additional_terms=terms)

    res = AutoReg(y, lags=3, trend="n", deterministic=dp).fit()
    res_append = res.append(y_oos, refit=True)
    res_direct = AutoReg(y_both,
                         lags=3,
                         trend="n",
                         deterministic=dp.apply(y_both.index)).fit()
    assert_allclose(res_append.params, res_direct.params)

    res_np = AutoReg(np.asarray(y), lags=3, trend="n", deterministic=dp).fit()
    res_append_np = res_np.append(np.asarray(y_oos))
    assert_allclose(res_np.params, res_append_np.params)

    res = AutoReg(y, exog=x, lags=3, trend="n", deterministic=dp).fit()
    res_append = res.append(y_oos, exog=x_oos, refit=True)
    res_direct = AutoReg(
        y_both,
        exog=x_both,
        lags=3,
        trend="n",
        deterministic=dp.apply(y_both.index),
    ).fit()
    assert_allclose(res_append.params, res_direct.params)
예제 #2
0
def test_autoreg_append(append_data, use_pandas, lags, trend, seasonal):
    period = 12 if not use_pandas else None
    y = append_data.y
    y_oos = append_data.y_oos
    y_both = append_data.y_both
    x = append_data.x
    x_oos = append_data.x_oos
    x_both = append_data.x_both
    if not use_pandas:
        y = np.asarray(y)
        x = np.asarray(x)
        y_oos = np.asarray(y_oos)
        x_oos = np.asarray(x_oos)
        y_both = np.asarray(y_both)
        x_both = np.asarray(x_both)

    res = AutoReg(y, lags=lags, trend=trend, seasonal=seasonal,
                  period=period).fit()
    res_append = res.append(y_oos, refit=True)
    res_direct = AutoReg(y_both,
                         lags=lags,
                         trend=trend,
                         seasonal=seasonal,
                         period=period).fit()
    res_exog = AutoReg(y,
                       exog=x,
                       lags=lags,
                       trend=trend,
                       seasonal=seasonal,
                       period=period).fit()
    res_exog_append = res_exog.append(y_oos, exog=x_oos, refit=True)
    res_exog_direct = AutoReg(
        y_both,
        exog=x_both,
        lags=lags,
        trend=trend,
        seasonal=seasonal,
        period=period,
    ).fit()

    assert_allclose(res_direct.params, res_append.params)
    assert_allclose(res_exog_direct.params, res_exog_append.params)
    if use_pandas:
        with pytest.raises(TypeError, match="endog must have the same type"):
            res.append(np.asarray(y_oos))
        with pytest.raises(TypeError, match="exog must have the same type"):
            res_exog.append(y_oos, np.asarray(x_oos))
    with pytest.raises(ValueError, match="Original model does"):
        res.append(y_oos, exog=x_oos)
    with pytest.raises(ValueError, match="Original model has exog"):
        res_exog.append(y_oos)