时间序列分析 tsa

statsmodels.tsa 包含对时间序列分析有用的模型类和函数。基本模型包括单变量自回归模型 (AR)、向量自回归模型 (VAR) 和单变量自回归移动平均模型 (ARMA)。非线性模型包括马尔可夫切换动态回归和自回归。它还包括时间序列的描述性统计,例如自相关、偏自相关函数和周期图,以及 ARMA 或相关过程的相应理论属性。它还包括处理自回归和移动平均滞后多项式的方法。此外,还提供相关的统计检验和一些有用的辅助函数。

估计可以通过精确或条件最大似然或条件最小二乘完成,可以使用卡尔曼滤波器或直接滤波器。

目前,函数和类必须从相应的模块导入,但主要的类将在 statsmodels.tsa 命名空间中提供。statsmodels.tsa 中的模块结构为

  • stattools : 经验特性和检验,acf、pacf、格兰杰因果关系、adf 单元根检验、kpss 检验、bds 检验、ljung-box 检验等等。

  • ar_model : 单变量自回归过程,使用条件和精确最大似然以及条件最小二乘进行估计

  • arima.model : 单变量 ARIMA 过程,使用替代方法进行估计

  • statespace : 综合状态空间模型规范和估计。参见 状态空间文档.

  • vector_ar, var : 向量自回归过程 (VAR) 和向量误差修正模型,估计、脉冲响应分析、预测误差方差分解和数据可视化工具。参见 vector_ar 文档.

  • arma_process : 给定参数的 arma 过程的特性,这包括在 ARMA、MA 和 AR 表示之间转换的工具,以及 acf、pacf、谱密度、脉冲响应函数等

  • sandbox.tsa.fftarma : 与 arma_process 相似,但在频域中工作

  • tsatools : 额外的辅助函数,用于创建滞后变量数组、为趋势构造回归量、去趋势等等。

  • filters : 用于过滤时间序列的辅助函数

  • regime_switching : 马尔可夫切换动态回归和自回归模型

一些对时间序列分析也有用的附加函数位于 statsmodels 的其他部分,例如附加的统计检验。

matplotlib、nitime 和 scikits.talkbox 中也提供了一些相关的函数。这些函数更适合在信号处理中使用,其中可以获得更长的时间序列,并且更常在频域中工作。

描述性统计和检验

stattools.acovf(x[, adjusted, demean, fft, ...])

估计自协方差。

stattools.acf(x[, adjusted, nlags, qstat, ...])

计算自相关函数。

stattools.pacf(x[, nlags, method, alpha])

部分自相关估计.

stattools.pacf_yw(x[, nlags, method])

使用非递归yule_walker估计部分自相关.

stattools.pacf_ols(x[, nlags, efficient, ...])

通过OLS计算部分自相关.

stattools.pacf_burg(x[, nlags, demean])

计算Burg的部分自相关估计量.

stattools.ccovf(x, y[, adjusted, demean, fft])

计算两个序列的互协方差.

stattools.ccf(x, y[, adjusted, fft, nlags, ...])

互相关函数.

stattools.adfuller(x[, maxlag, regression, ...])

增广 Dickey-Fuller 单位根检验.

stattools.kpss(x[, regression, nlags, store])

Kwiatkowski-Phillips-Schmidt-Shin 平稳性检验.

stattools.range_unit_root_test(x[, store])

范围单位根平稳性检验.

stattools.zivot_andrews

Zivot-Andrews 结构性断点单位根检验.

stattools.coint(y0, y1[, trend, method, ...])

测试单变量方程的非协整性.

stattools.bds(x[, max_dim, epsilon, distance])

时间序列独立性BDS检验统计量

stattools.q_stat(x, nobs)

计算Ljung-Box Q统计量.

stattools.breakvar_heteroskedasticity_test(resid)

残差异方差检验

stattools.grangercausalitytests(x, maxlag[, ...])

四种格兰杰非因果关系检验.

stattools.levinson_durbin(s[, nlags, isacov])

自回归过程的Levinson-Durbin递归.

stattools.innovations_algo(acov[, nobs, rtol])

将自协方差转换为MA参数的创新算法.

stattools.innovations_filter(endog, theta)

使用创新算法过滤观测值.

stattools.levinson_durbin_pacf(pacf[, nlags])

返回acf和ar系数的Levinson-Durbin算法.

stattools.arma_order_select_ic(y[, max_ar, ...])

计算许多ARMA模型的信息准则.

x13.x13_arima_select_order(endog[, ...])

使用x12/x13 ARIMA进行自动季节性ARIMA阶数识别.

x13.x13_arima_analysis(endog[, maxorder, ...])

对月度或季度数据进行x13-arima分析.

估计

以下是主要估计类,可以通过statsmodels.tsa.api访问,以及它们的返回结果类

单变量自回归过程 (AR)

Statsmodels中的基本自回归模型是

ar_model.AutoReg(endog, lags[, trend, ...])

自回归 AR-X(p) 模型

ar_model.AutoRegResults(model, params, ...)

用于保存拟合AutoReg模型结果的类.

ar_model.ar_select_order(endog, maxlag[, ...])

自回归 AR-X(p) 模型阶数选择.

ar_model.AutoReg模型使用条件MLE(OLS)估计参数,并支持外生回归量(AR-X模型)和季节性效应.

AR-X和相关模型也可以使用arima.ARIMA类和SARIMAX类拟合(使用卡尔曼滤波器通过完全MLE)。

有关概述,请参阅笔记本 自回归.

自回归移动平均过程 (ARMA) 和卡尔曼滤波器

基本ARIMA模型和结果类如下

arima.model.ARIMA(endog[, exog, order, ...])

自回归积分移动平均 (ARIMA) 模型及其扩展

arima.model.ARIMAResults(model, params, ...)

用于保存拟合SARIMAX模型结果的类.

该模型允许使用各种方法估计参数(包括通过Hannan-Rissanen方法进行条件MLE和通过卡尔曼滤波器进行完全MLE)。它是SARIMAX模型的特例,它包含了状态空间模型的许多继承特征(包括预测/预测、残差诊断、模拟和脉冲响应等)。

有关概述,请参阅笔记本 ARMA: 太阳黑子数据ARMA: 人工数据.

指数平滑

线性和平滑非线性指数平滑模型可用

ExponentialSmoothing(endog[, trend, ...])

霍尔特-温特斯指数平滑

SimpleExpSmoothing(endog[, ...])

简单指数平滑

Holt(endog[, exponential, damped_trend, ...])

霍尔特指数平滑

HoltWintersResults(model, params, sse, aic, ...)

拟合指数平滑模型的结果.

另外,基于“创新”状态空间方法也实现了线性和平滑非线性指数平滑模型。除了对参数拟合、样本内预测和样本外预测的通常支持外,这些模型还支持预测区间、模拟等。

exponential_smoothing.ets.ETSModel(endog[, ...])

ETS 模型.

exponential_smoothing.ets.ETSResults(model, ...)

错误、趋势、季节 (ETS) 指数平滑模型的结果

最后,线性指数平滑模型也已作为一般状态空间框架的特例单独实现(这与上述“创新”状态空间方法不同)。虽然这种方法不允许非线性(乘法)指数平滑模型,但它包含了状态空间模型的所有特征(包括预测/预报、残差诊断、模拟和脉冲响应等)。

statespace.exponential_smoothing.ExponentialSmoothing(endog)

线性指数平滑模型

statespace.exponential_smoothing.ExponentialSmoothingResults(...)

拟合线性指数平滑模型的结果

有关概述,请参阅笔记本 指数平滑

ARMA 过程

以下是使用给定滞后多项式的 ARMA 过程的理论性质的工具。

arima_process.ArmaProcess([ar, ma, nobs])

指定滞后多项式的 ARMA 过程的理论性质。

arima_process.ar2arma(ar_des, p, q[, n, ...])

找到 ar 过程的 arma 近似值。

arima_process.arma2ar(ar, ma[, lags])

ARMA 过程的有限滞后 AR 近似值。

arima_process.arma2ma(ar, ma[, lags])

ARMA 过程的有限滞后近似 MA 表示。

arima_process.arma_acf(ar, ma[, lags])

ARMA 过程的理论自相关函数。

arima_process.arma_acovf(ar, ma[, nobs, ...])

平稳 ARMA 过程的理论自协方差

arima_process.arma_generate_sample(ar, ma, ...)

从 ARMA 模拟数据。

arima_process.arma_impulse_response(ar, ma)

计算 ARMA 过程的脉冲响应函数(MA 表示)。

arima_process.arma_pacf(ar, ma[, lags])

ARMA 过程的理论偏自相关函数。

arima_process.arma_periodogram(ar, ma[, ...])

由滞后多项式 ar 和 ma 给出的 ARMA 过程的周期图。

arima_process.deconvolve(num, den[, n])

从信号中解卷积除数,对 n 项的多项式进行除法

arima_process.index2lpol(coeffs, index)

将系数扩展到滞后多项式

arima_process.lpol2index(ar)

从滞后多项式中删除零

arima_process.lpol_fiar(d[, n])

分数积分的 AR 表示

arima_process.lpol_fima(d[, n])

分数积分的 MA 表示

arima_process.lpol_sdiff(s)

返回季节性差分 (1-L^s) 的系数

ArmaFft(ar, ma, n)

arma 过程的 fft 工具

自回归分布滞后 (ARDL) 模型

自回归分布滞后模型跨越了自回归模型 (AutoReg) 和向量自回归模型 (VAR) 之间的空间。

ardl.ARDL(endog, lags[, exog, order, trend, ...])

自回归分布滞后 (ARDL) 模型

ardl.ARDLResults(model, params, cov_params)

用于保存拟合 ARDL 模型的结果的类。

ardl.ardl_select_order(endog, maxlag, exog, ...)

ARDL 阶数选择

ardl.ARDLOrderSelectionResults(model, ics, ...)

ARDL 阶数选择的結果

ardl.ARDL 模型使用条件 MLE (OLS) 估计参数,并允许使用简单的确定性项(趋势和季节性虚拟变量)以及使用DeterministicProcess的复杂确定性项。

AR-X 和相关模型也可以使用SARIMAX 类拟合(使用卡尔曼滤波器的完整 MLE)。

有关概述,请参阅笔记本 自回归分布滞后模型

误差修正模型 (ECM)

误差修正模型是 ARDL 模型的重新参数化,它将内生变量的差分回归到内生变量的滞后水平以及外生变量的可选滞后差分上。

ardl.UECM(endog, lags[, exog, order, trend, ...])

无约束误差相关模型 (UECM)

ardl.UECMResults(model, params, cov_params)

用于保存拟合 UECM 模型的结果的类。

ardl.BoundsTestResult(stat, crit_vals, ...)

方法

状态空间模型

请参阅状态空间文档

向量 AR 和向量误差修正模型

请参阅vector_ar 文档。

政权转换模型

MarkovRegression(endog, k_regimes[, trend, ...])

一阶 k-状态马尔可夫切换回归模型

MarkovAutoregression(endog, k_regimes, order)

马尔可夫切换回归模型

参见笔记本 马尔可夫切换动态回归马尔可夫切换自回归 以获得概述。

时间序列过滤器

bkfilter(x[, low, high, K])

使用 Baxter-King 带通滤波器过滤时间序列。

hpfilter(x[, lamb])

Hodrick-Prescott 滤波器。

cffilter(x[, low, high, drift])

Christiano Fitzgerald 非对称随机游走滤波器。

convolution_filter(x, filt[, nsides])

通过卷积进行线性过滤。

recursive_filter(x, ar_coeff[, init])

自回归或递归过滤。

miso_lfilter(ar, ma, x[, useic])

将多个时间序列过滤成一个时间序列。

fftconvolve3(in1[, in2, in3, mode])

使用 FFT 卷积两个 N 维数组。

fftconvolveinv(in1, in2[, mode])

使用 FFT 卷积两个 N 维数组。

seasonal_decompose(x[, model, filt, period, ...])

使用移动平均进行季节性分解。

STL(endog[, period, seasonal, trend, ...])

使用 LOESS 进行季节趋势分解。

MSTL(endog[, periods, windows, lmbda, ...])

使用 LOESS 对多个季节性进行季节趋势分解。

DecomposeResult(observed, seasonal, trend, resid)

季节性分解的结果类

参见笔记本 时间序列过滤器 以获得概述。

TSA 工具

add_lag(x[, col, lags, drop, insert])

返回包含给定数组的滞后的数组。

add_trend(x[, trend, prepend, has_constant])

向数组添加趋势和/或常数。

detrend(x[, order, axis])

使用给定顺序的趋势沿轴 0 或 1 对数组进行去趋势。

lagmat(x, maxlag[, trim, original, use_pandas])

创建滞后的二维数组。

lagmat2ds(x, maxlag0[, maxlagex, dropex, ...])

为二维数组生成滞后矩阵,列按变量排列。

VARMA 过程

VarmaPoly(ar[, ma])

用于跟踪 Varma 多项式格式的类

插值

dentonm(indicator, benchmark[, freq])

修改后的 Denton 方法,用于将低频数据转换为高频数据。

确定性过程

确定性过程简化了使用时间趋势或季节模式创建确定性序列的过程。 它们还提供方法来简化生成用于样本外预测的确定性项。 一个 DeterministicProcess 可以直接与 AutoReg 一起使用来构建复杂确定性动力学,并在没有构建外生趋势的情况下进行预测。

DeterministicProcess(index, *[, period, ...])

确定性项的容器类。

TimeTrend([constant, order])

常数和时间趋势确定性项

Seasonality(period[, initial_period])

季节性虚拟变量确定性项

Fourier(period, order)

傅里叶级数确定性项

CalendarTimeTrend(freq[, constant, order, ...])

基于日历时间的常数和时间趋势确定性项

CalendarSeasonality(freq, period)

基于日历时间的季节性虚拟变量确定性项

CalendarFourier(freq, order)

基于日历时间的傅里叶级数确定性项

DeterministicTerm()

所有确定性项的抽象基类

CalendarDeterministicTerm(freq)

日历确定性项的抽象基类

FourierDeterministicTerm(order)

所有傅立叶确定性项的抽象基类

TimeTrendDeterministicTerm([constant, order])

所有时间趋势确定性项的抽象基类

希望编写自定义确定性项的用户必须使用子类 DeterministicTerm.

有关概述,请参阅笔记本 时间序列模型中的确定性项.

预测模型

Theta 模型

Theta 模型是一种简单的预测方法,它将线性时间趋势与简单指数平滑器相结合(Assimakopoulos & Nikolopoulos)。Theta 模型参数的估计器和预测方法在

ThetaModel(endog, *[, period, ...])

Assimakopoulos 和 Nikolopoulos (2000) 的 Theta 预测模型

ThetaModelResults(b0, alpha, sigma2, ...)

来自估计的 Theta 模型的结果类。

STL 分解后的预测

statsmodels.tsa.seasonal.STL 通常用于从时间序列中去除季节性成分。然后可以使用任何非季节性模型对去季节化的时间序列进行建模,并且通过将来自非季节性模型的预测添加到来自最终完整周期的季节性成分的估计来构建预测,这些估计使用随机游走模型进行预测。

STLForecast(endog, model, *[, model_kwargs, ...])

使用 STL 去除季节性进行基于模型的预测

STLForecastResults(stl, result, model, ...)

使用 STL 去除季节性进行预测的结果

有关概述,请参阅笔记本 季节性分解.

预测结果

大多数预测方法支持 get_prediction 方法,该方法返回 PredictionResults 对象,该对象包含预测、方差,并且可以构建预测区间。

结果类

PredictionResults(predicted_mean, var_pred_mean)

预测结果


上次更新:2024 年 10 月 3 日