description: Runs posterior inference to impute the missing values in a time series. (deprecated argument values)
View source on GitHub |
Runs posterior inference to impute the missing values in a time series. (deprecated argument values)
tfp.sts.impute_missing_values(
model, observed_time_series, parameter_samples, include_observation_noise=False,
timesteps_are_event_shape=True
)
Warning: SOME ARGUMENT VALUES ARE DEPRECATED: (timesteps_are_event_shape=True)
. They will be removed after 2021-12-31.
Instructions for updating:
Imputed distributions returned by
tfp.sts.impute_missing_valueswill soon compute per-timestep probabilities (treating timesteps as part of the batch shape) instead of a single probability for an entire series (the current approach, in which timesteps are treated as event shape). Please update your code to pass
timesteps_are_event_shape=False` (this will soon be the default) and to explicitly sum over the per-timestep log probabilities if this is required.
This method computes the posterior marginals p(latent state | observations)
,
given the time series at observed timesteps (a missingness mask should
be specified using tfp.sts.MaskedTimeSeries
). It pushes this posterior back
through the observation model to impute a predictive distribution on the
observed time series. At unobserved steps, this is an imputed value; at other
steps it is interpreted as the model's estimate of the underlying noise-free
series.
Args | |
---|---|
model
|
tfp.sts.Sum instance defining an additive STS model.
|
observed_time_series
|
float Tensor of shape
concat([sample_shape, model.batch_shape, [num_timesteps, 1]]) where
sample_shape corresponds to i.i.d. observations, and the trailing [1]
dimension may (optionally) be omitted if num_timesteps > 1 . Any NaN s
are interpreted as missing observations; missingness may be also be
explicitly specified by passing a tfp.sts.MaskedTimeSeries instance.
|
parameter_samples
|
Python list of Tensors representing posterior
samples of model parameters, with shapes [concat([
[num_posterior_draws], param.prior.batch_shape,
param.prior.event_shape]) for param in model.parameters] . This may
optionally also be a map (Python dict ) of parameter names to
Tensor values.
|
include_observation_noise
|
If False , the imputed uncertainties
represent the model's estimate of the noise-free time series at each
timestep. If True , they represent the model's estimate of the range of
values that could be observed at each timestep, including any i.i.d.
observation noise.
Default value: False .
|
timesteps_are_event_shape
|
Deprecated, for backwards compatibility only.
If False , the predictive distribution will return per-timestep
probabilities
Default value: True .
|
Returns | |
---|---|
imputed_series_dist
|
a tfd.MixtureSameFamily instance with event shape
[num_timesteps] if timesteps_are_event_shape else [] and
batch shape concat([sample_shape, model.batch_shape,
[] if timesteps_are_event_shape else [num_timesteps]) , with
num_posterior_draws mixture components.
|
To specify a time series with missing values, use tfp.sts.MaskedTimeSeries
:
time_series_with_nans = [-1., 1., np.nan, 2.4, np.nan, 5]
observed_time_series = tfp.sts.MaskedTimeSeries(
time_series=time_series_with_nans,
is_missing=tf.math.is_nan(time_series_with_nans))
Masked time series can be passed to tfp.sts
methods in place of a
observed_time_series
Tensor
:
# Build model using observed time series to set heuristic priors.
linear_trend_model = tfp.sts.LocalLinearTrend(
observed_time_series=observed_time_series)
model = tfp.sts.Sum([linear_trend_model],
observed_time_series=observed_time_series)
# Fit model to data
parameter_samples, _ = tfp.sts.fit_with_hmc(model, observed_time_series)
After fitting a model, impute_missing_values
will return a distribution
```python
imputed_series_distribution = tfp.sts.impute_missing_values( model, observed_time_series, parameter_samples=parameter_samples) print('imputed means and stddevs: ', imputed_series_distribution.mean(), imputed_series_distribution.stddev()) ```