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 (int 或 sequence 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]
。通过选择
order
和innovations_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
()