FrequencySeasonality#

class pymc_extras.statespace.models.structural.FrequencySeasonality(season_length, n=None, name=None, innovations=True)[source]#

季节性组件,在频域中建模

参数:
  • season_length (float) – 单个季节性周期中的周期数,例如,对于具有年度季节性模式的月度数据为 12,对于具有每周季节性模式的每日数据为 7,等等。也允许非整数 seasonal_length,例如一年(太阳年)中的 365.2422 天。

  • n (int) – 季节性组件中包含的傅里叶特征的数量。默认值为 season_length // 2,这是最大可能值。较小的数字可用于更像波浪的季节性模式。

  • name (str, default None) – 此季节性组件的名称。用于标记维度和坐标。当同一模型中包含多个季节性组件时很有用。默认值为 f"Seasonal[s={season_length}, n={n}]"

  • innovations (bool, default True) – 是否在季节性效应的强度中包含随机创新

注释

季节性效应是任何每隔固定间隔重复的模式。虽然有很多可能的方法来建模季节性效应,但此处使用的实现是由 [1] 描述为“规范”频域表示的方法。季节性组件可以表示为

\[\begin{split}\begin{align} \gamma_t &= \sum_{j=1}^{2n} \gamma_{j,t} \\ \gamma_{j, t+1} &= \gamma_{j,t} \cos \lambda_j + \gamma_{j,t}^\star \sin \lambda_j + \omega_{j, t} \\ \gamma_{j, t}^\star &= -\gamma_{j,t} \sin \lambda_j + \gamma_{j,t}^\star \cos \lambda_j + \omega_{j,t}^\star \lambda_j &= \frac{2\pi j}{s} \end{align}\end{split}\]

其中 \(s\)seasonal_length

TimeSeasonality 组件不同,FrequencySeasonality 组件不需要整数季节长度。此外,对于较长的季节性周期,可以通过选择 n << s // 2 来获得更紧凑的状态空间表示。使用 TimeSeasonality,每日数据中的年度季节性模式需要 364 个状态,而 FrequencySeasonality 始终需要 2 * n 个状态,而与 seasonal_length 无关。这种紧凑性的代价是代表性能力较弱。在 n = 1 时,季节性模式将是纯正弦波。在 n = s // 2 时,可以表示任何任意模式。

FrequencySeasonality 增加灵活性的一个代价是可解释性降低。此模型的状态是与季节性模式的傅里叶表示中不同频率相关的系数 \(\gamma_1, \gamma^\star_1, \gamma_2, \gamma_2^\star ..., \gamma_n, \gamma^\star_n\)。因此,无法隔离和识别“星期一”效应等。

__init__(season_length, n=None, name=None, innovations=True)[source]#

方法

__init__(season_length[, n, name, innovations])

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()