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