时间序列的ADF检验(单位根检验)

from statsmodels.tsa.stattools import adfuller

我使用的是python的statsmodels。
1532680234(1).jpg

可以看到里面的参数
x:array_like,1维,时间序列

maxlag:int型,最大延迟阶数

regression:Constant and trend order to include in regression,回归中包含的常数和趋势阶数。解释一下:ADF检验和DF检验一样可以用于三种类型的单位根检验。(王燕,应用时间序列分析,6.3.2ADF检验,分了三种类型,代码里给了四种类型)

    * 'c' : constant only (default),默认,仅有常数均值。
    * 'ct' : constant and trend,有常数均值,有趋势。
    * 'ctt' : constant, and linear and quadratic trend,有常数均值有线性和二次趋势。
    * 'nc' : no constant, no trend,无常数均值,无趋势。

当选择的回归类型不同时,检验结果也会不同。我在这里深深地踩了一个坑。可以看一下时序图,你的数据是否有趋势,是否有常数均值。
autolag : {'AIC', 'BIC', 't-stat', None},自动选择延迟阶数
* if None, then maxlag lags are used,如果选择none,则使用最大延迟阶数
* if 'AIC' (default) or 'BIC', then the number of lags is chosen
to minimize the corresponding information criterion,如果选择AIC或者BIC,则延迟阶数是根据相应的最小信息准则决定的。(BIC就是SBC准则)(王燕,应用时间序列分析,3.3.6模型优化)
* 't-stat' based choice of maxlag. Starts with maxlag and drops a
lag until the t-statistic on the last lag length is significant
using a 5%-sized test,这个选择要基于最大延迟maxlag,从最大延迟阶数开始,每次减少一个延迟,直到某一阶延迟的t统计量对5%来说是显著的。(也就是说p_value值小于0.05,显著拒绝原假设,证明无单位根,也就是说序列是平稳的)


image.png

这是我的数据的检测结果。
第一部分是τ(tao)统计量的值。
第二部分是p_value的值。
第三部分是结果使用的延迟阶数。
第四部分是ADF回归和计算临界值所使用的观察次数。
第五部分是临界值。
第六部分是最大的信息准则的值(如果autolag 非空),也就是AIC或者BIC的值。
当我们看序列是否平稳的结果时,一般首先看第二部分的p_value值。如果p_value值比0.05小,证明有单位根,也就是说序列平稳。如果p_value比0.05大则证明非平稳。
源码里有一句note,如果p_value接近于0.05时,则要通过临界值进行判断。也就是说如果p_value接近于0.05就要通过第一部分τ(tao)统计量的值和第五部分的临界值进行对比。τ(tao)统计量的值比临界值小,就证明平稳,反之就是非平稳。我的检测结果τ(tao)统计量的值再临界值5%-10%之间。比5%的临界值大。这里的1%,5%,10%对应的是99%,95%,90%置信区间。
ADF检验只适合AR(P)模型。
且对方差齐性效果好,对异方差性效果不佳。异方差可用PP检验。

你可能感兴趣的:(时间序列的ADF检验(单位根检验))