在Python中statsmodels ADF检验问题,怎么解决

Python027

在Python中statsmodels ADF检验问题,怎么解决,第1张

adf检验是用来检验序列是否平稳的方式

一般来说是时间序列中的一种检验方法

python中可使用现成的工具statsmodels来实现adf检验

import numpy as np

import statsmodels.tsa.stattools as ts

x = np.array([1, 2, 3, 4, 5, 6, 7])

result = ts.adfuller(x, 1)

print result

(-2.6825663173365015, 0.077103947319183241, 0, 7, {'5%': -3.4775828571428571, '1%': -4.9386902332361515, '10%': -2.8438679591836733}, 15.971188911270618)

最参数和返回结果的理解还不够深刻

后头再把参数和返回结果都加上

参数项:

statsmodels.tsa.stattools.adfuller(x, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)[source]¶

x: 序列,一维数组

maxlag:差分次数

regresion:{c:只有常量,

ct:有常量项和趋势项,

ctt:有常量项、线性和二次趋势项,

nc:无任何选项}

autolag:{aic or bic: default, then the number of lags is chosen to minimize the corresponding information criterium,

None:use the maxlag,

t-stat:based choice of maxlag. Starts with maxlag and drops a lag until the t-statistic on the last lag l

并不是所有的时间序列都是可预测的,想象一下,假如一个时间序列的变化特性是不稳定的,那么它每个时期的波动对于之后一个时期的变化的影响都是无法预测的,因为它随时可能变脸。而当一个时间序列的变化特征维持稳定,数据的历史分布和未来分布就会趋于一致,这时我们就可以根据历史数据对未来作出预测。用来刻画数据变化特征稳定的量就是时间序列的平稳性。

如果图像没有明显的趋势,围绕着一个水平线稳定波动,序列传播没有明显的疏密变化,则可以判定为稳定序列。当然这种方法过于主观,还是需要更为严密的统计学检验。

观察图像的方式很直观,但也很主观,不适用于机器自动判断序列的稳定性。因此我们需要一个更有说服力、更加客观的统计方法来帮助我们检验时间序列的平稳性,这种方法,就是单位根检验。

当一个时间序列的滞后算子多项式方程 存在单位根时 ,我们认为该时间序列是 非平稳 的;反之,当该方程 不存在单位根 时,我们认为该时间序列是 平稳 的。其原理比较复杂,想要理解它需要较好的数学基础,这里我们只关注在Python中如何使用。

常见的单位根检验方法有 DF检验 ADF检验 PP检验 ,这里演示如何使用最常用的ADF检验。

(1)Python中的statsmodels库提供ADF检验函数,使用时需要引入

from statsmodels.tsa.stattools import adfuller as ADF

(2)具体函数如下:

statsmodels.tsa.stattools.adfuller(x, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)

(3)返回值解析:

(-5.2350403606036302, 7.4536580061930903e-06, 0, 60, {'1%': -3.5443688564814813, '5%': -2.9110731481481484, '10%': -2.5931902777777776}, 1935.4779504450603)