def test_autoreg_summary_corner(): data = sm.datasets.macrodata.load_pandas().data["cpi"].diff().dropna() dates = period_range(start='1959Q1', periods=len(data), freq='Q') data.index = dates res = AutoReg(data, lags=4).fit() summ = res.summary().as_text() assert 'AutoReg(4)' in summ assert 'cpi.L4' in summ assert '03-31-1960' in summ res = AutoReg(data, lags=0).fit() summ = res.summary().as_text() assert 'intercept' in summ assert 'AutoReg(0)' in summ
def test_autoreg_summary_corner(old_names): data = sm.datasets.macrodata.load_pandas().data["cpi"].diff().dropna() dates = period_range(start="1959Q1", periods=len(data), freq="Q") data.index = dates res = AutoReg(data, lags=4, old_names=old_names).fit() summ = res.summary().as_text() assert "AutoReg(4)" in summ assert "cpi.L4" in summ assert "03-31-1960" in summ res = AutoReg(data, lags=0, old_names=old_names).fit() summ = res.summary().as_text() if old_names: assert "intercept" in summ else: assert "const" in summ assert "AutoReg(0)" in summ
## AR(p) is simplest time-model, can nest in SARIMAX(p,d,q,s) with ## moving average MA(q), integration order I(d), seasonality S(s), exogenous X from statsmodels.tsa.statespace.sarimax import SARIMAX adf = alf(s, log=1, freq='Q').loc[19591201:20171231] adf.index = pd.DatetimeIndex(adf.index.astype(str), freq='infer') arima = SARIMAX(adf, order=(2, 1, 0), trend='c').fit() fig = arima.plot_diagnostics(figsize=(10, 6)) plt.tight_layout(pad=2) plt.savefig(os.path.join(imgdir, 'ar.jpg')) plt.show() arima.summary() # Forecasting ## One-step ahead predictions model = AutoReg(df_train, lags=lags, old_names=False).fit() print(model.summary()) # Observations to predict are from the test split from sklearn.metrics import mean_squared_error all_dates = AutoReg(df, lags=lags, old_names=False) df_pred = all_dates.predict(model.params, start=df_train.index[-1]).shift(1).iloc[1:] mse = mean_squared_error(df_test, df_pred) var = np.mean(np.square(df_test - df_train.mean())) print(f"Short-term Forecasts: rmse={np.sqrt(mse):.6f} r2={1-mse/var:.4f}") fig, ax = plt.subplots(clear=True, num=1, figsize=(4, 6)) df_pred.plot(ax=ax, c='C0') df_test.plot(ax=ax, c='C1') ax.legend(['Predicted', 'Actual']) ax.set_title(s + " (one-step forecasts)") plt.tight_layout(pad=2)