LevelTrendComponent#

class pymc_extras.statespace.models.structural.LevelTrendComponent(order: int | list[int] = 2, innovations_order: int | list[int] | None = None, name: str = 'LevelTrend')[source]#

结构时间序列模型的水平和趋势组件

参数:
  • __________

  • order (int) – 模型中包含的趋势的时间导数数量。例如,当 order=3 时,趋势的形式为 y = a + b * t + c * t ** 2,其中系数 a, b, c 来自初始状态值。

  • innovations_order (intsequence of int, optional) – 模型中包含的随机创新数量。默认情况下,innovations_order = order

注释

此类实现了通用结构时间序列模型的水平和趋势组件。在最通用的形式中,水平和趋势由两个随时间变化的方程组描述。

\[\begin{split}\begin{align} \mu_{t+1} &= \mu_t + \nu_t + \zeta_t \\ \nu_{t+1} &= \nu_t + \xi_t \zeta_t &\sim N(0, \sigma_\zeta) \\ \xi_t &\sim N(0, \sigma_\xi) \end{align}\end{split}\]

其中 \(\mu_{t+1}\) 是时间 t 时的时间序列的均值,\(\nu_t\) 是过程的漂移或斜率。当创新项 \(\zeta_t\)\(\xi_t\) 都包含在模型中时,它被称为局部线性趋势模型。这个由两个方程组成的系统(对应于 order=2)可以通过添加或删除方程来扩展或收缩。order=3 将向系统添加一个加速度项

\[\begin{split}\begin{align} \mu_{t+1} &= \mu_t + \nu_t + \zeta_t \\ \nu_{t+1} &= \nu_t + \eta_t + \xi_t \\ \eta_{t+1} &= \eta_{t-1} + \omega_t \\ \zeta_t &\sim N(0, \sigma_\zeta) \\ \xi_t &\sim N(0, \sigma_\xi) \\ \omega_t &\sim N(0, \sigma_\omega) \end{align}\end{split}\]

在将所有创新项设置为零并定义初始状态 \(\mu_0, \nu_0, \eta_0\) 后,这些方程可以塌缩为

\[\mu_t = \mu_0 + \nu_0 \cdot t + \eta_0 \cdot t^2\]

这阐明了阶数和初始状态如何影响模型。特别是,初始状态是截距、斜率、加速度等的系数。

从这个角度来看,允许创新可以理解为允许这些系数随时间变化。每个组件都可以通过将列表传递给 innovations_order 参数来单独选择时间变化。例如,具有随时间变化的趋势和加速度的常数截距被指定为 order=3, innovations_order=[0, 1, 1]

通过选择 orderinnovations_order,可以获得各种各样的模型。值得注意的模型包括

  • 常数截距,order=1, innovations_order=0

\[\mu_t = \mu\]
  • 常数线性斜率,order=2, innovations_order=0

\[\mu_t = \mu_{t-1} + \nu\]
  • 高斯随机游走,order=1, innovations_order=1

\[\mu_t = \mu_{t-1} + \zeta_t\]
  • 带漂移的高斯随机游走,order=2, innovations_order=1

\[\mu_t = \mu_{t-1} + \nu + \zeta_t\]
  • 平滑趋势,order=2, innovations_order=[0, 1]

\[\begin{split}\begin{align} \mu_t &= \mu_{t-1} + \nu_{t-1} \\ \nu_t &= \nu_{t-1} + \xi_t \end{align}\end{split}\]
  • 局部水平,order=2, innovations_order=2

[1] 指出平滑趋势模型比完整的局部线性趋势模型产生更渐变的斜率,并且等效于“积分趋势模型”。

参考文献

__init__(order: int | list[int] = 2, innovations_order: int | list[int] | None = None, name: str = 'LevelTrend')[source]#

方法

__init__([order, innovations_order, name])

build([name, filter_type, verbose])

从当前组件构建 StructuralTimeSeries 状态空间模型

make_and_register_data(name, shape[, dtype])

用于创建 pytensor 符号变量并在 _name_to_data 字典中注册它的辅助函数

make_and_register_variable(name, shape[, dtype])

用于创建 pytensor 符号变量并在 _name_to_variable 字典中注册它的辅助函数

make_symbolic_graph()

populate_component_properties()