You are here:  Home » 量化交易与机器学习 » 时间序列中单位根平稳性检验adfuller详解 (ADF Test in Python)

statsmodels.tsa.stattools.adfuller中可进行adf校验,一般传入一个data就行,包括list, numpy array 和 pandas series都可以作为输入,其他参数可以保留默认.

statsmodels.tsa.stattools.adfuller

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

增强Dickey-Fuller单位根检验

Augmented Dickey-Fuller测试可用于在存在串行相关的情况下在单变量过程中测试单位根。

参数
x (array_like,1d)
数据系列
maxlag (int)
测试中包含的最大延迟,默认为12 *(nobs / 100)^ {1/4}
regression({‘c’,’ct’,’ctt’,’nc’})
包含在回归中的常量和趋势顺序

  • ‘c’:仅限常量(默认)
  • ‘ct’:恒定和趋势
  • ‘ctt’:常数,线性和二次趋势
  • ‘nc’:没有恒定,没有趋势
autolag {‘AIC’,’BIC’,’t-stat’,无}
  • 如果为None,则使用maxlag滞后
  • 如果是’AIC’(默认值)或’BIC’,则选择滞后数以最小化相应的信息标准
  • 基于’t-stat’的maxlag选择。从maxlag开始并使用5%大小的测试来降低滞后,直到最后一个滞后长度的t统计量显着为止
store(bool)
如果为True,则另外返回adf统计信息的结果实例。默认值为False
regolults (bool,可选)
如果为True,则返回完整的回归结果。默认值为False
返回
adf (float)
测试统计
pvalue float)
MacKinnon基于MacKinnon的近似p值(1994年,2010年)
usedlag (int)
使用的滞后数量
nobs( int)
用于ADF回归的观察数和临界值的计算
critical values(dict)
测试统计数据的临界值为1%,5%和10%。基于MacKinnon(2010)
icbest(float)
如果autolag不是None,则最大化信息标准。
resstore (ResultStore,可选)
一个虚拟类,其结果作为属性附加

adfuller(price_A)
#检验后输出的结果
(-2.0226025821924765, 0.27675142429522215, 54, 101983, {'1%': -3.430414123085256, '5%': -2.861568341405142, '10%': -2.566785085137168}, -915434.180263706)

 

如何确定该序列能否平稳呢?主要看:

  1. 1%、%5、%10不同程度拒绝原假设的统计值和ADF Test result的比较,ADF Test result同时小于1%、5%、10%即说明非常好地拒绝该假设,本数据中,adf结果为-2.02, 大于三个level的统计值。所以是不平稳的,需要进行一阶差分后,再进行检验。
  2. P-value是否非常接近0,接近0,则是平稳的,否则,不平稳。

使用以下语句进行一阶差分。

price_A = np.diff(price_A)

使用一阶差分后的数据再次进行ADF检验:

adfuller(price_A)
(-91.9315631374553, 0.0, 5, 49492, {'1%': -3.430482135278395, '5%': -2.861598401066143, '10%': -2.566801084958309}, -427493.8830610331)

 

现在的数据就符合以上两个条件,所以判断为一阶单整。

下面来判断两者是否存在协整关系。使用statsmodels 模块中有 coint 函数