时间序列分析 tsa

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

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

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

  • stattools : 经验性质与检验, acf, pacf, granger因果关系, 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])

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) 模型阶数选择。

模型使用条件最大似然估计(OLS)来估计参数,并支持外生回归变量(AR-X模型)和季节效应。

AR-X 及相关模型也可以使用 arima.ARIMA 类和 SARIMAX 类进行拟合(通过卡尔曼滤波器使用完全最大似然估计)。

请参阅笔记本 自回归 以获取概述。

自回归移动平均过程 (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(模型, 参数, 误差平方和, 赤池信息量准则, ...)

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

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

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

ETS 模型。

exponential_smoothing.ets.ETSResults(模型, ...)

来自误差、趋势、季节性(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过程。

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

分数积分自回归表示

arima_process.lpol_fima(d[, n])

分数积分模型的移动平均表示

arima_process.lpol_sdiff(s)

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

ArmaFft(ar, ma, n)

用于ARMA过程的FFT工具

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

自回归分布滞后模型(Autoregressive Distributed Lag models)介于自回归模型(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 阶数选择的结果

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

AR-X 及相关模型也可以使用 SARIMAX 类进行拟合(通过卡尔曼滤波器使用完全最大似然估计)。

请参阅笔记本 自回归分布滞后模型 以获取概述。

误差修正模型 (ECM)

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

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

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

ardl.UECMResults(model, params, cov_params)

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

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

方法

状态空间模型

请参阅状态空间文档

向量自回归和向量误差修正模型

请参阅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])

克里斯蒂亚诺·菲茨杰拉德不对称,随机游走滤波器。

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(周期[, 初始周期])

季节性虚拟确定性项

Fourier(周期, 阶数)

傅里叶级数确定性项

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

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

CalendarSeasonality(freq, period)

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

CalendarFourier(freq, order)

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

DeterministicTerm()

所有确定性项的抽象基类

CalendarDeterministicTerm(freq)

日历确定性项的抽象基类

FourierDeterministicTerm(order)

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

TimeTrendDeterministicTerm([constant, order])

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

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

请参阅笔记本 时间序列模型中的确定性项 以获取概述。

预测模型

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

预测结果


Last update: Oct 16, 2024