-
Notifications
You must be signed in to change notification settings - Fork 22
Bounds
title: Bounds
slug: Bounds
summary: The bounds parameter: "usual", "admissible", "none", and stability conditions on smoothing parameters.
status: stable
applies_to: [adam, es]
related: [Persistence, ADAM]
This page documents the bounds parameter used across smooth functions to control parameter restrictions during estimation.
| Field | Value |
|---|---|
| Argument name | bounds |
| Type | string |
| Valid values |
"usual", "admissible", "none"
|
| Default (most functions) | "usual" |
| Default (CES, SSARIMA, OM for some occurrences) | "admissible" |
| Applies to | R: all forecasting functions. Python: ADAM, AutoADAM, ES, CES, MSARIMA, OM. |
The bounds parameter specifies what restrictions to place on smoothing parameters and other model parameters during optimization.
# R: Usual bounds (default for ETS)
model <- adam(y, model="AAA", lags=12, bounds="usual")
# R: Admissible bounds (stability-focused)
model <- adam(y, model="AAA", lags=12, bounds="admissible")# Python: Usual bounds
model = ADAM(model="AAA", lags=12, bounds="usual")| Bounds | Description | Guarantees | Speed |
|---|---|---|---|
"usual" |
Traditional ETS restrictions | Averaging behavior | Fast |
"admissible" |
Stability-focused restrictions | Model stability | Medium |
"none" |
No restrictions | None (potentially unstable) | Fast |
The default for most functions. Restricts parameters to ensure the model behaves as an averaging/smoothing method:
For ETS (Error, Trend, Seasonal):
| Parameter | Restriction | Interpretation |
|---|---|---|
| α (alpha) | 0 ≤ α ≤ 1 | Level smoothing |
| β (beta) | 0 ≤ β ≤ α | Trend smoothing (cannot exceed level) |
| γ (gamma) | 0 ≤ γ ≤ 1-α | Seasonal smoothing |
| φ (phi) | 0 ≤ φ ≤ 1 | Damping parameter |
# R: Usual bounds
model <- adam(y, model="AAA", lags=12, bounds="usual")Guarantees model stability by ensuring the eigenvalues of the discount matrix are within the unit circle. The exact bounds depend on the model structure.
Key features:
- Ensures that the impact of initial observations diminishes with the increase of the sample size
- More flexible than usual bounds
- Allows negative smoothing parameters in some cases
- Default for ARIMA-based models (SSARIMA, MSARIMA)
# R: Admissible bounds (recommended for ARIMA)
model <- ssarima(y, orders=list(ar=1, i=1, ma=1), bounds="admissible")model = ADAM(model="AAN", bounds="admissible")
model.fit(y)For ARIMA:
| Parameter | Restriction |
|---|---|
| AR coefficients | Stationarity region |
| MA coefficients | Invertibility region |
No restrictions are applied. Use with caution.
Warning: Models estimated with bounds="none" may be:
- Unstable/Non-invertible (numerical issues)
- Difficult to interpret
# R: No bounds (use carefully!)
model <- adam(y, model="AAA", lags=12, bounds="none")model = ADAM(model="AAA", lags=12, bounds="none")
model.fit(y)When to use:
- Research/experimentation
- When you know the optimal parameters lie outside usual bounds
- When other constraints prevent instability
| Model Type | Default Bounds | Recommended |
|---|---|---|
| Additive (ANN, AAN, AAA, etc.) | "usual" |
"usual" or "admissible"
|
| Multiplicative (MNN, MAN, etc.) | "usual" |
"usual" |
| Mixed (MAM, etc.) | "usual" |
"usual" |
| Model | Default Bounds | Recommended |
|---|---|---|
| SSARIMA | "admissible" |
"admissible" |
| MSARIMA | "admissible" |
"admissible" |
| ADAM with ARIMA |
"usual", but switched to "admissible" for ARIMA |
"admissible" |
| Model | Default Bounds | Notes |
|---|---|---|
| CES | "admissible" |
Complex parameter stability |
| GUM | "admissible" |
Transition matrix stability |
| SMA | N/A | No smoothing parameters |
| Function | "usual" |
"admissible" |
"none" |
|---|---|---|---|
| ADAM | Yes (default) | Yes | Yes |
| ES | Yes (default) | Yes | Yes |
| SSARIMA | Yes | Yes (default) | Yes |
| MSARIMA | Yes | Yes (default) | Yes |
| CES | Yes | Yes (default) | Yes |
| GUM | Yes | Yes (default) | Yes |
For fine-tuned control, you can pass custom lower and upper bound vectors.
# R: Custom bounds for specific parameters
model <- adam(y, model="AAN", bounds="none",
initial="optimal",
B=c(0.3, 0.1, 100, 1), # Starting values
lb=c(0.1, 0, 50, 0), # Lower bounds
ub=c(0.5, 0.2, 150, 2)) # Upper bounds# Python: Custom bounds via lb / ub dicts
model = ADAM(model="AAN", bounds="none",
initial="optimal",
nlopt_kargs={"B": [0.3, 0.1, 100, 1],
"lb": [0.1, 0, 50, 0],
"ub": [0.5, 0.2, 150, 2])
model.fit(y)The order of parameters in lb and ub follows:
- Smoothing parameters (α, β, γ, δ)
- Damping parameter (φ)
- ARMA parameters
- Initial states
- Parameters for explanatory variables
-
ETS models: Start with
bounds="usual"(default) -
ARIMA models: Use
bounds="admissible"for stability -
Multiplicative models:
bounds="usual"helps prevent extreme values -
Poor fit: If estimation produces boundary values, try
bounds="admissible" -
Research: Use
bounds="none"only when exploring parameter space
- Svetunkov, I. (2023). Forecasting and Analytics with the Augmented Dynamic Adaptive Model (ADAM). Online: https://openforecast.org/adam/
- ETS bounds: Section 4.7.
- Stability — additive error: Section 5.4.
- Stability — multiplicative error: Section 6.4.
- ADAM-ARIMA bounds: Subsection 9.2.2.
- Hyndman, R.J., et al. (2008). Forecasting with Exponential Smoothing: The State Space Approach. Springer. Chapter 10 (Stability and Invertibility).
- ADAM - Main ADAM function
- Persistence - Smoothing parameters
- Orders-and-Lags - ARIMA order specification
- Loss-Functions - Loss function options