statsmodels.tsa.statespace.sarimax.SARIMAX

class statsmodels.tsa.statespace.sarimax.SARIMAX(endog, exog=None, order=(1, 0, 0), seasonal_order=(0, 0, 0, 0), trend=None, measurement_error=False, time_varying_regression=False, mle_regression=True, simple_differencing=False, enforce_stationarity=True, enforce_invertibility=True, hamilton_representation=False, concentrate_scale=False, trend_offset=1, use_exact_diffuse=False, dates=None, freq=None, missing='none', validate_specification=True, **kwargs)[source]

带有外生回归量的季节性自回归积分移动平均模型

Parameters:
endogarray_like

观察到的时间序列过程 \(y\)

exogarray_like, optional

外生回归变量的数组,形状为 nobs x k。

orderiterable or iterable of iterables, optional

模型的(p,d,q)阶数,用于表示AR参数、差分和MA参数的数量。d必须是一个整数,表示过程的积分阶数,而pq可以是表示AR和MA阶数的整数(以便包含所有直到这些阶数的滞后项),或者是指定要包含的特定AR和/或MA滞后项的可迭代对象。默认是一个AR(1)模型:(1,0,0)。

seasonal_orderiterable, optional

季节性成分模型的(P,D,Q,s)阶数,用于AR参数、差分、MA参数和周期性。 D必须是一个整数,表示过程的积分阶数, 而PQ可以是表示AR和MA阶数的整数(以便包含所有直到这些阶数的滞后),或者是指定要包含的特定AR和/或MA滞后的可迭代对象。s是一个整数,表示周期性(季节中的周期数),通常对于季度数据为4,对于月度数据为12。默认情况下没有季节性效应。

trendstr{‘n’,’c’,’t’,’ct’} or iterable, optional

控制确定性趋势多项式 \(A(t)\) 的参数。 可以指定为一个字符串,其中 ‘c’ 表示常数(即趋势多项式的零次项),‘t’ 表示随时间的线性趋势,‘ct’ 表示两者兼具。也可以指定为一个可迭代对象,定义要包含的非零多项式指数,按升序排列。例如,[1,1,0,1] 表示 \(a + bt + ct^3\)。默认情况下不包含趋势分量。

measurement_errorbool, optional

是否假设内生观测值 endog 存在测量误差。默认值为 False。

time_varying_regressionbool, optional

当提供了解释变量exog时,用于选择是否允许外生回归量的系数随时间变化。默认值为False。

mle_regressionbool, optional

是否将外生变量的回归系数估计作为最大似然估计的一部分,或者通过卡尔曼滤波(即递归最小二乘法)进行估计。如果time_varying_regression为True,则此项必须设置为False。默认值为True。

simple_differencingbool, optional

是否使用部分条件最大似然估计。如果为 True,则在估计之前进行差分,这会丢弃前 \(s D + d\) 行,但会得到一个较小的状态空间公式。有关使用此选项时解释结果的重要细节,请参见“注释”部分。如果为 False,则将完整的 SARIMAX 模型置于状态空间形式,以便可以使用所有数据点进行估计。默认为 False。

enforce_stationaritybool, optional

是否将AR参数转换为强制模型自回归分量中的平稳性。默认值为True。

enforce_invertibilitybool, optional

是否将MA参数转换以强制模型中移动平均分量的可逆性。默认值为True。

hamilton_representationbool, optional

是否使用ARMA过程的Hamilton表示法(如果为True)或Harvey表示法(如果为False)。默认为False。

concentrate_scalebool, optional

是否将尺度(误差项的方差)从似然中集中出来。这通过最大似然估计减少了需要估计的参数数量,但尺度参数的标准误差将不可用。

trend_offsetint, optional

时间趋势值的起始偏移量。默认值为1,因此如果trend=’t’,趋势值等于1, 2, …, nobs。通常仅在通过扩展先前数据集创建模型时设置。

use_exact_diffusebool, optional

是否对非平稳状态使用精确的扩散初始化。默认是 False(在这种情况下使用近似的扩散初始化)。

**kwargs

关键字参数可用于为状态空间矩阵或卡尔曼滤波选项提供默认值。详情请参见表示法卡尔曼滤波器

Attributes:
measurement_errorbool

是否假设内生观测值 endog 存在测量误差。

state_errorbool

转移方程是否具有误差分量。

mle_regressionbool

外生变量的回归系数是否通过最大似然估计法进行估计。

state_regressionbool

外生变量的回归系数是否作为状态空间的一部分,并通过卡尔曼滤波进行估计。

time_varying_regressionbool

外生回归变量的系数是否允许随时间变化。

simple_differencingbool

是否使用部分条件最大似然估计。

enforce_stationaritybool

是否将AR参数进行转换以确保模型自回归部分的平稳性。

enforce_invertibilitybool

是否将MA参数转换以强制模型中移动平均分量的可逆性。

hamilton_representationbool

是否使用ARMA过程的Hamilton表示法。

trendstr{‘n’,’c’,’t’,’ct’} or iterable

控制确定性趋势多项式 \(A(t)\) 的参数。更多信息请参阅类参数文档。

polynomial_arndarray

包含自回归滞后多项式滞后的数组,从最低阶到最高阶排序。多项式从滞后0开始。初始化为1,除非系数被约束为零(在这种情况下为零)。

polynomial_mandarray

包含移动平均滞后多项式滞后的数组,从最低阶到最高阶排序。初始化为1,除非某个系数被约束为零(在这种情况下为零)。

polynomial_seasonal_arndarray

包含季节性移动平均滞后多项式滞后的数组,从最低阶到最高阶排序。初始化为1,除非某个系数被约束为零(在这种情况下为零)。

polynomial_seasonal_mandarray

包含季节性移动平均滞后多项式滞后的数组,从最低阶到最高阶排序。初始化为1,除非某个系数被约束为零(在这种情况下为零)。

polynomial_trendndarray

包含趋势多项式系数的数组,从最低次到最高次排序。初始化为1,除非系数被约束为零(在这种情况下为零)。

k_arint

模型中的最高自回归阶数,从零开始索引。

k_ar_paramsint

要估计的自回归参数的数量。

k_diffint

积分顺序。

k_maint

模型中最高移动平均阶数,从零开始索引。

k_ma_paramsint

要估计的移动平均参数的数量。

seasonal_periodsint

赛季中的周期数。

k_seasonal_arint

模型中最高季节性自回归阶数,从零开始索引。

k_seasonal_ar_paramsint

要估计的季节自回归参数的数量。

k_seasonal_diffint

季节性整合的顺序。

k_seasonal_maint

模型中最高季节性移动平均订单,从零开始索引。

k_seasonal_ma_paramsint

要估计的季节移动平均参数的数量。

k_trendint

趋势多项式的阶数加一(即常数多项式会有k_trend=1)。

k_exogint

外生回归变量的数量。

注释

SARIMA模型被指定为\((p, d, q) \times (P, D, Q)_s\)

\[\phi_p (L) \tilde \phi_P (L^s) \Delta^d \Delta_s^D y_t = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \zeta_t\]

在单变量结构模型方面,这可以表示为

\[\begin{split}y_t & = u_t + \eta_t \\ \phi_p (L) \tilde \phi_P (L^s) \Delta^d \Delta_s^D u_t & = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \zeta_t\end{split}\]

其中 \(\eta_t\) 仅适用于测量误差的情况(尽管在纯回归模型的情况下也会使用,即如果 p=q=0)。

在这个模型中,带有SARIMA误差的回归可以很容易地表示为

\[\begin{split}y_t & = \beta_t x_t + u_t \\ \phi_p (L) \tilde \phi_P (L^s) \Delta^d \Delta_s^D u_t & = A(t) + \theta_q (L) \tilde \theta_Q (L^s) \zeta_t\end{split}\]

此模型是在提供外生回归变量时使用的。

请注意,简化形式的滞后多项式将写为:

\[\begin{split}\Phi (L) \equiv \phi_p (L) \tilde \phi_P (L^s) \\ \Theta (L) \equiv \theta_q (L) \tilde \theta_Q (L^s)\end{split}\]

如果mle_regression为True,回归系数将被视为通过最大似然估计的额外参数。否则,它们将作为状态的一部分,并使用扩散初始化。然而,在这种情况下,由于近似扩散初始化,结果可能会对初始方差敏感。

此类允许以状态空间模型的两种不同基础表示形式来表示ARMA模型:Hamilton的表示形式和Harvey的表示形式。两者在分析上是等价的,因为它们都是ARMA模型的分析表示,但每个模型的状态向量具有不同的含义。因此,最大似然估计不会导致相同的参数估计,即使使用相同的参数集,也会导致不同的对数似然值。

Harvey表示法很方便,因为它允许将差分整合到状态向量中,从而可以使用所有观测值进行估计。

在这种差分模型的实现中,Hamilton 表示法无法适应状态向量中的差分,因此必须使用 simple_differencing(它在估计之前进行差分,因此会丢失前 d + sD 个观测值)。

许多其他软件包使用汉密尔顿表示法,因此与Stata和R的测试需要使用它以及简单的差分(如Stata所做的那样)。

如果使用filter_concentrated = True,则模型的尺度将从似然中集中出来。这样做的一个好处是参数向量的维度减少,从而使得对数似然函数的数值最大化可能更快且更稳定。如果在具有测量误差的模型中使用此选项,需要注意的是,估计的测量误差参数将是相对于尺度的,并且命名为“snr.measurement_error”而不是“var.measurement_error”。在这种情况下,要计算测量误差的方差,需要将snr.measurement_error参数乘以尺度。

如果使用 simple_differencing = True,则在将模型转换为状态空间形式之前,会对 endogexog 数据进行差分。这具有与用户在构建模型之前对数据进行差分相同的效果,这对使用结果有影响:

  • 预测和预报将基于差分数据,而不是原始数据。(如果使用simple_differencing = False,则预测和预报将基于原始数据)。

  • 如果原始数据具有Int64Index,则将为差分数据创建一个新的RangeIndex,该索引从一开始,并且预测和预测将使用这个新索引。

关于状态空间模型的详细信息可以在[1]中找到。一些特定的参考文献包括:

  • 第3.4章描述了ARMA和ARIMA模型在状态空间形式中的表示(使用Harvey表示法),并提供了基本季节模型和具有乘法形式的模型的参考(例如航空模型)。它还展示了一个完整的ARIMA过程的状态空间模型(如果simple_differencing=False,这就是这里所做的)。

  • 第3.6章描述了通过卡尔曼滤波器估计回归效应(如果mle_regression为False,则执行此操作),具有时变系数的回归,以及具有ARMA误差的回归(回想一下,如果存在回归效应,则此类估计的模型是具有SARIMA误差的回归)。

  • 第8.4章描述了将ARMA模型应用于示例数据集的应用。文档中的一个示例IPython笔记本提供了本节的复现。

参考文献

[1]

德宾, 詹姆斯, 和西姆·扬·库普曼. 2012. 《状态空间方法的时间序列分析:第二版》. 牛津大学出版社.

方法

clone(endog[, exog])

克隆状态空间模型并使用新数据,可选择新的规格

filter(params[, transformed, ...])

卡尔曼滤波

fit([start_params, transformed, ...])

通过卡尔曼滤波以最大似然法拟合模型。

fit_constrained(约束[, start_params])

使用一些受等式约束的参数拟合模型。

fix_params(params)

将参数固定为特定值(上下文管理器)

from_formula(公式, 数据[, 子集])

状态空间模型未实现

handle_params(params[, transformed, ...])

确保模型参数满足形状和其他要求

hessian(params, *args, **kwargs)

似然函数的Hessian矩阵,在给定参数处求值

impulse_responses(params[, steps, impulse, ...])

脉冲响应函数

information(params)

模型的费舍尔信息矩阵。

initialize()

初始化SARIMAX模型。

initialize_approximate_diffuse([variance])

初始化近似漫反射

initialize_default([...])

初始化默认值

initialize_known(初始状态, ...)

初始化已知

initialize_statespace(**kwargs)

初始化状态空间表示

initialize_stationary()

初始化静止状态

loglike(params, *args, **kwargs)

对数似然评估

loglikeobs(params[, transformed, ...])

对数似然评估

observed_information_matrix(params[, ...])

观测信息矩阵

opg_information_matrix(params[, ...])

梯度信息矩阵的外积

predict(params[, exog])

模型拟合后,predict 返回拟合值。

prepare_data()

准备用于状态空间表示的数据

score(params, *args, **kwargs)

在参数处计算得分函数。

score_obs(params[, method, transformed, ...])

计算每个观测值的得分,在参数处进行评估

set_conserve_memory([conserve_memory])

设置内存保护方法

set_filter_method([filter_method])

设置过滤方法

set_inversion_method([inversion_method])

设置反演方法

set_smoother_output([smoother_output])

设置平滑输出

set_stability_method([stability_method])

设置数值稳定性方法

simulate(params, nsimulations[, ...])

模拟一个遵循状态空间模型的新时间序列

simulation_smoother([simulation_output])

获取状态空间模型的模拟平滑器。

smooth(params[, transformed, ...])

卡尔曼平滑

transform_jacobian(无约束[, ...])

参数变换函数的雅可比矩阵

transform_params(无约束)

将优化器使用的无约束参数转换为似然评估中使用的约束参数。

untransform_params(constrained)

将似然评估中使用的约束参数转换为优化器使用的无约束参数

update(params[, transformed, ...])

更新模型的参数

属性

endog_names

内生变量名称

exog_names

外生变量的名称。

initial_design

初始设计矩阵

initial_selection

初始选择矩阵

initial_state_intercept

初始状态截距向量

initial_transition

初始转移矩阵

initial_variance

初始化

loglikelihood_burn

model_latex_names

所有可能的模型参数的latex名称。

model_names

所有可能的模型参数的纯文本名称。

model_orders

模型中每个多项式的阶数。

param_names

人类可读的参数名称列表(适用于模型中实际包含的参数)。

param_terms

模型中实际包含的参数列表,按排序顺序排列。

params_complete

start_params

最大似然估计的初始参数

state_names

(list of str) 未观测状态的可读名称列表。

tolerance


Last update: Oct 16, 2024