-
Notifications
You must be signed in to change notification settings - Fork 22
OES
oETS (occurrence ETS) models the probability of demand occurrence for intermittent time series data. It implements the occurrence part of the iETS (intermittent ETS) framework.
Note:
oes()is an ETS-only wrapper ofom(). It disables ARIMA, formula, and some advanced options, providing a lightweight interface for pure ETS occurrence models. For the full feature set (ARIMA, regressors, auto-selection), useom()in R or theOM/OMG/AutoOMclasses in Python — see OM.
Python: Use
OM,OMG, andAutoOM(see OM).
Note: iETS refers to the full model for demand sizes and demand occurrence. oETS refers to the occurrence part only.
Intermittent demand data contains many zero values, common in:
- Spare parts inventory
- Slow-moving items
- Event-based data
- Count data with rare occurrences
oETS models the probability of non-zero demand using ETS-style state-space models, which can then be combined with a demand sizes model for full intermittent demand forecasting.
See OM for the complete mathematical framework, including the full iETS decomposition (y_t = o_t × z_t), latent-variable state equations, per-subtype link formulas, and model variants (oETS, oARIMA, oETSX, oARIMAX).
oes() is an ETS-only wrapper around om(). Calling oes(y, ...) is equivalent to om(y, ..., orders=list(ar=0,i=0,ma=0), formula=NULL). For the full feature set use om() directly.
library(smooth)
# Generate intermittent data
y <- rpois(100, 0.5)
# Fixed probability
oes(y, occurrence="fixed", h=10, holdout=TRUE)
# Odds-ratio model with ETS(M,N,N)
oes(y, model="MNN", occurrence="odds-ratio", h=10, holdout=TRUE)
# Inverse odds-ratio
oes(y, model="MNN", occurrence="inverse-odds-ratio", h=10, holdout=TRUE)
# Direct (TSB-like)
oes(y, model="MNN", occurrence="direct", h=10, holdout=TRUE)
# General model (calls oesg internally, which wraps omg)
oes(y, model="MNN", occurrence="general", h=10, holdout=TRUE)
# Automatic selection between subtypes
oes(y, model="MNN", occurrence="auto", h=10, holdout=TRUE)oesg() is the ETS-only wrapper around omg(), allowing different ETS models for a_t and b_t:
# Different models for a and b — oETS_G(M,N,N)(A,A,N)
oesg(y, modelA="MNN", modelB="AAN", h=10, holdout=TRUE)
# Same model for both
oesg(y, modelA="MNN", modelB="MNN", h=10, holdout=TRUE)# With ARIMA — not available via oes()
om(y, model="NNN", orders=list(ar=1, i=0, ma=0), occurrence="odds-ratio")
# With external regressors — not available via oes()
om(y, model="MNN", formula=~x1+x2, occurrence="direct")Combine occurrence and demand sizes in one model:
# iETS(M,M,N)_F - fixed probability
adam(y, "MMN", occurrence="fixed", h=10, holdout=TRUE)
# iETS(M,M,N)_O - odds-ratio with specified oETS model
adam(y, "MMN", occurrence="odds-ratio", oesmodel="MMN", h=10, holdout=TRUE)
# Two-step approach: estimate oETS first, then use in adam
oesModel <- oes(y, model="MMN", occurrence="odds-ratio", h=10, holdout=TRUE)
adam(y, "MMN", occurrence=oesModel, h=10, holdout=TRUE)
# General model
adam(y, "MMN", occurrence="general", oesmodel="MMN", h=10, holdout=TRUE)oes() accepts an ETS-only subset of om() parameters. For the full parameter list see OM.
| Parameter | Type (R) | Default | Description |
|---|---|---|---|
y |
vector/ts | — | Time series data; binarised automatically (non-zero → 1) |
model |
character | "ZXZ" |
ETS model for occurrence (e.g., "MNN") |
occurrence |
character | "auto" |
Occurrence subtype; see link table above |
persistence |
numeric vector | NULL | Fixed smoothing parameters |
initial |
character | "backcasting" |
Initialisation method |
phi |
numeric | NULL | Damping parameter |
ic |
character | "AICc" |
Information criterion |
h |
integer | 0 | Forecast horizon |
holdout |
logical | FALSE | Use holdout validation |
bounds |
character | "usual" |
Parameter bounds |
Parameters not available in oes() (use om() instead): orders, formula, regressors, arma, loss, verbose, nlopt_kargs.
See OM for the full iETS(E,T,S)_X(...) notation and occurrence-only oETS / oARIMA naming.
oes() returns an object of class c("om","adam","smooth") (R). Because oes() delegates to om(), the output structure is identical to that of om(). See OM for the full attribute list.
| Element | Type (R) | Description |
|---|---|---|
model |
character | ETS model type used |
occurrence |
character | Occurrence subtype |
fitted |
vector | Fitted probability values ∈ (0,1) |
states |
matrix | State vector values |
persistence |
numeric vector | Smoothing parameters |
phi |
numeric | Damping parameter |
initial |
numeric vector | Initial states |
logLik |
numeric | Bernoulli log-likelihood |
residuals |
vector | o_t − p̂_t |
y |
vector | Binarised occurrence (0/1) |
- Svetunkov, I., & Boylan, J.E. (2023). iETS: State space model for intermittent demand forecasting. International Journal of Production Economics, 265, 109013. DOI: 10.1016/j.ijpe.2023.109013.
- Svetunkov, I. (2023). Forecasting and Analytics with the Augmented Dynamic Adaptive Model (ADAM). Online: https://openforecast.org/adam/.
- Intermittent state-space models: Chapter 13.