时间序列中单位根平稳性检验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%、%5、%10不同程度拒绝原假设的统计值和ADF Test result的比较,ADF Test result同时小于1%、5%、10%即说明非常好地拒绝该假设,本数据中,adf结果为-2.02, 大于三个level的统计值。所以是不平稳的,需要进行一阶差分后,再进行检验。
- 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 函数