A state space model (SSM) posits a set of latent (unobserved) variables that
evolve over time with dynamics specified by a probabilistic transition model
p(z[t+1] | z[t])
. At each timestep, we observe a value sampled from an
observation model conditioned on the current state, p(x[t] | z[t])
. The
special case where both the transition and observation models are Gaussians
with mean specified as a linear function of the inputs, is known as a linear
Gaussian state space model and supports tractable exact probabilistic
calculations; see tfp$distributions$LinearGaussianStateSpaceModel
for
details.
A smooth seasonal effect model is a special case of a linear Gaussian SSM. It
is the sum of a set of "cyclic" components, with one component for each
frequency:
frequencies[j] = 2. * pi * frequency_multipliers[j] / period
Each cyclic component contains two latent states which we denote effect
and
auxiliary
. The two latent states for component j
drift over time via:
effect[t] = (effect[t-1] * cos(frequencies[j]) +
auxiliary[t-] * sin(frequencies[j]) +
Normal(0., drift_scale))
auxiliary[t] = (-effect[t-1] * sin(frequencies[j]) +
auxiliary[t-] * cos(frequencies[j]) +
Normal(0., drift_scale))
sts_smooth_seasonal_state_space_model(
num_timesteps,
period,
frequency_multipliers,
drift_scale,
initial_state_prior,
observation_noise_scale = 0,
initial_step = 0,
validate_args = FALSE,
allow_nan_stats = TRUE,
name = NULL
)
an instance of LinearGaussianStateSpaceModel
.
Scalar integer
Tensor
number of timesteps to model
with this distribution.
positive scalar float
Tensor
giving the number of timesteps
required for the longest cyclic effect to repeat.
One-dimensional float
Tensor
listing the
frequencies (cyclic components) included in the model, as multipliers of
the base/fundamental frequency 2. * pi / period
. Each component is
specified by the number of times it repeats per period, and adds two
latent dimensions to the model. A smooth seasonal model that can
represent any periodic function is given by
frequency_multipliers = [1,2, ..., floor(period / 2)]
.
However, it is often desirable to enforce a
smoothness assumption (and reduce the computational burden) by dropping
some of the higher frequencies.
Scalar (any additional dimensions are treated as batch
dimensions) float
Tensor
indicating the standard deviation of the
latent state transitions.
instance of tfd$MultivariateNormal
representing the prior distribution on latent states. Must have
event shape [num_features]
.
Scalar (any additional dimensions are
treated as batch dimensions) float
Tensor
indicating the standard
deviation of the observation noise. Default value: 0.
.
scalar integer
Tensor
specifying the starting timestep.
Default value: 0
.
logical
. Whether to validate input
with asserts. If validate_args
is FALSE
, and the inputs are
invalid, correct behavior is not guaranteed. Default value: FALSE
.
logical
. If FALSE
, raise an
exception if a statistic (e.g. mean/mode/etc...) is undefined for any
batch member. If TRUE
, batch members with valid parameters leading to
undefined statistics will return NaN for this statistic. Default value: TRUE
.
string prefixed to ops created by this class. Default value: "LocalLinearTrendStateSpaceModel".
Harvey, A. Forecasting, Structural Time Series Models and the Kalman Filter. Cambridge: Cambridge University Press, 1990.
The auxiliary
latent state only appears as a matter of construction and thus
its interpretation is not particularly important. The total smooth seasonal
effect is the sum of the effect
values from each of the cyclic components.
The parameters drift_scale
and observation_noise_scale
are each (a batch
of) scalars. The batch shape of this Distribution
is the broadcast batch
shape of these parameters and of the initial_state_prior
.
Mathematical Details
The smooth seasonal effect model implements a
tfp$distributions$LinearGaussianStateSpaceModel
with
latent_size = 2 * len(frequency_multipliers)
and observation_size = 1
.
The latent state is the concatenation of the cyclic latent states which themselves
comprise an effect
and an auxiliary
state. The transition matrix is a block diagonal
matrix where block j
is:
transition_matrix[j] = [[cos(frequencies[j]), sin(frequencies[j])],
[-sin(frequencies[j]), cos(frequencies[j])]]
The observation model picks out the cyclic effect
values from the latent state:
observation_matrix = [[1., 0., 1., 0., ..., 1., 0.]]
observation_noise ~ Normal(loc=0, scale=observation_noise_scale)
For further mathematical details please see Harvey (1990).
Other sts:
sts_additive_state_space_model()
,
sts_autoregressive_state_space_model()
,
sts_autoregressive()
,
sts_constrained_seasonal_state_space_model()
,
sts_dynamic_linear_regression_state_space_model()
,
sts_dynamic_linear_regression()
,
sts_linear_regression()
,
sts_local_level_state_space_model()
,
sts_local_level()
,
sts_local_linear_trend_state_space_model()
,
sts_local_linear_trend()
,
sts_seasonal_state_space_model()
,
sts_seasonal()
,
sts_semi_local_linear_trend_state_space_model()
,
sts_semi_local_linear_trend()
,
sts_smooth_seasonal()
,
sts_sparse_linear_regression()
,
sts_sum()