Skip to content

Commit

Permalink
Merge pull request #7055 from bashtage/fix-simulate-1
Browse files Browse the repository at this point in the history
BUG: Fix squeeze when nsimulation is 1
  • Loading branch information
bashtage committed Sep 29, 2020
2 parents 2322d35 + 9fe5477 commit 0376f69
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 7 deletions.
7 changes: 4 additions & 3 deletions statsmodels/tsa/holtwinters/results.py
Expand Up @@ -743,10 +743,11 @@ def simulate(
if use_boxcox:
y = inv_boxcox(y, lamda)

sim = np.squeeze(y)
sim = np.atleast_1d(np.squeeze(y))
if y.shape[0] == 1 and y.size > 1:
sim = sim[None, :]
# Wrap data / squeeze where appropriate
use_pandas = isinstance(self.model.data, PandasData)
if not use_pandas:
if not isinstance(self.model.data, PandasData):
return sim

_, _, _, index = self.model._get_prediction_index(
Expand Down
41 changes: 37 additions & 4 deletions statsmodels/tsa/holtwinters/tests/test_holtwinters.py
Expand Up @@ -358,7 +358,10 @@ def test_ndarray(self):
@pytest.mark.xfail(reason="Optimizer does not converge", strict=False)
def test_forecast(self):
fit1 = ExponentialSmoothing(
self.aust, seasonal_periods=4, trend="add", seasonal="add",
self.aust,
seasonal_periods=4,
trend="add",
seasonal="add",
).fit(method="bh", use_brute=True)
assert_almost_equal(
fit1.forecast(steps=4), [60.9542, 36.8505, 46.1628, 50.1272], 3
Expand Down Expand Up @@ -884,8 +887,10 @@ def test_float_boxcox(trend, seasonal):
assert_allclose(res.params["use_boxcox"], 0.5)
with pytest.warns(FutureWarning):
res = ExponentialSmoothing(
housing_data, trend=trend, seasonal=seasonal
).fit(use_boxcox = 0.5)
housing_data,
trend=trend,
seasonal=seasonal,
).fit(use_boxcox=0.5)
assert_allclose(res.params["use_boxcox"], 0.5)


Expand Down Expand Up @@ -1624,7 +1629,10 @@ def test_error_initialization(ses):
ExponentialSmoothing(ses, initial_seasonal=[1.0, 0.2, 0.05, 4])
with pytest.raises(ValueError):
ExponentialSmoothing(
ses, trend="add", initialization_method="known", initial_level=1.0,
ses,
trend="add",
initialization_method="known",
initial_level=1.0,
)
with pytest.raises(ValueError):
ExponentialSmoothing(
Expand Down Expand Up @@ -1963,3 +1971,28 @@ def test_boxcox_components(ses):
assert not hasattr(res, "_untransformed_level")
assert not hasattr(res, "_untransformed_trend")
assert not hasattr(res, "_untransformed_seasonal")


@pytest.mark.parametrize("repetitions", [1, 10])
@pytest.mark.parametrize("random_errors", [None, "bootstrap"])
def test_forecast_1_simulation(austourists, random_errors, repetitions):
# GH 7053
fit = ExponentialSmoothing(
austourists,
seasonal_periods=4,
trend="add",
seasonal="add",
damped_trend=True,
initialization_method="estimated",
).fit()

sim = fit.simulate(
1, anchor=0, random_errors=random_errors, repetitions=repetitions
)
expected_shape = (1,) if repetitions == 1 else (1, repetitions)
assert sim.shape == expected_shape
sim = fit.simulate(
10, anchor=0, random_errors=random_errors, repetitions=repetitions
)
expected_shape = (10,) if repetitions == 1 else (10, repetitions)
assert sim.shape == expected_shape

0 comments on commit 0376f69

Please sign in to comment.