def test_deterministic(reset_randomstate): y = pd.Series(np.random.normal(size=200)) terms = [TimeTrend(constant=True, order=1), Seasonality(12)] dp = DeterministicProcess(y.index, additional_terms=terms) m = AutoReg(y, trend="n", seasonal=False, lags=2, deterministic=dp) res = m.fit() m2 = AutoReg(y, trend="ct", seasonal=True, lags=2, period=12, old_names=False) res2 = m2.fit() assert_almost_equal(np.asarray(res.params), np.asarray(res2.params)) with pytest.warns(RuntimeWarning, match="When using deterministic, trend"): AutoReg(y, trend="ct", seasonal=False, lags=2, deterministic=dp)
def test_time_trend_smoke(index, forecast_index): tt = TimeTrend(True, 2) tt.in_sample(index) steps = 83 if forecast_index is None else len(forecast_index) warn = None if type(index) is NumericIndex and np.any(np.diff(index) != 1): warn = UserWarning with pytest.warns(warn): tt.out_of_sample(steps, index, forecast_index) str(tt) hash(tt) assert isinstance(tt.order, int) assert isinstance(tt._constant, bool) assert TimeTrend.from_string("ctt") == tt assert TimeTrend.from_string("ct") != tt assert TimeTrend.from_string("t") != tt assert TimeTrend.from_string("n") != tt assert Seasonality(12) != tt tt0 = TimeTrend(False, 0) tt0.in_sample(index) str(tt0)
det_proc.range(58, 70) # ## Advanced Construction # # Deterministic processes with features not supported directly through the # constructor can be created using `additional_terms` which accepts a list # of `DetermisticTerm`. Here we create a deterministic process with two # seasonal components: day-of-week with a 5 day period and an annual # captured through a Fourier component with a period of 365.25 days. from statsmodels.tsa.deterministic import Fourier, Seasonality, TimeTrend index = pd.period_range("2020-03-01", freq="D", periods=2 * 365) tt = TimeTrend(constant=True) four = Fourier(period=365.25, order=2) seas = Seasonality(period=7) det_proc = DeterministicProcess(index, additional_terms=[tt, seas, four]) det_proc.in_sample().head(28) # ## Custom Deterministic Terms # # The `DetermisticTerm` Abstract Base Class is designed to be subclassed # to help users write custom deterministic terms. We next show two # examples. The first is a broken time trend that allows a break after a # fixed number of periods. The second is a "trick" deterministic term that # allows exogenous data, which is not really a deterministic process, to be # treated as if was deterministic. This lets use simplify gathering the # terms needed for forecasting. # # These are intended to demonstrate the construction of custom terms. They # can definitely be improved in terms of input validation.
def test_seasonality_smoke(index, forecast_index): s = Seasonality(12) s.in_sample(index) steps = 83 if forecast_index is None else len(forecast_index) warn = None if type(index) is NumericIndex and np.any(np.diff(index) != 1): warn = UserWarning with pytest.warns(warn): s.out_of_sample(steps, index, forecast_index) assert isinstance(s.period, int) str(s) hash(s) if isinstance(index, (pd.DatetimeIndex, pd.PeriodIndex)) and index.freq: s = Seasonality.from_index(index) s.in_sample(index) s.out_of_sample(steps, index, forecast_index) Seasonality.from_index(list(index))