Если я правильно понимаю, интегрированное случайное блуждание - это всего лишь частный случай LocalLinearTrend, в котором уровень просто интегрирует случайно меняющийся компонент наклона (ie у него нет независимого источника вариаций). Вы можете исправить это, создав подкласс LocalLinearTrend
и исправив level_scale = 0.
в моделях, которые он строит:
class IntegratedRandomWalk(sts.LocalLinearTrend):
def __init__(self,
slope_scale_prior=None,
initial_slope_prior=None,
observed_time_series=None,
name=None):
super(IntegratedRandomWalk, self).__init__(
slope_scale_prior=slope_scale_prior,
initial_slope_prior=initial_slope_prior,
observed_time_series=observed_time_series,
name=None)
# Remove 'level_scale' parameter from the model.
del self._parameters[0]
def _make_state_space_model(self,
num_timesteps,
param_map,
initial_state_prior=None,
initial_step=0):
# Fix `level_scale` to zero, so that the level
# cannot change except by integrating the
# slope.
param_map['level_scale'] = 0.
return super(IntegratedRandomWalk, self)._make_state_space_model(
num_timesteps=num_timesteps,
param_map=param_map,
initial_state_prior=initial_state_prior,
initial_step=initial_step)
(это было бы математически эквивалентно построению LocalLinearTrend
с level_scale_prior
, сконцентрированным в нуле, но это ограничение затрудняет вывод, поэтому обычно лучше просто игнорировать или полностью удалить параметр, как я сделал здесь).
Под случайными блужданиями высшего порядка вы подразумеваете авторегрессионные модели? Если это так, sts.Autoregressive
может иметь значение.