时间序列ADF检验,pythonF检验
来自:https://pengfoo.com/post/machine-learning/2017-01-24摘要在ARMA/ARIMA等自回归模型中,模型要求时间序列数据的稳定性。因此,需要对数据或数据的N阶差分进行检验,一种常用的方法是ADF检验,即英雄母鸡检验。
平稳随机过程在数学上,平稳随机过程或严格意义上的平稳随机过程,也称为狭义平稳过程,是一种在固定时间和地点的概率分布与在所有时间和地点的概率分布相同的随机过程:即随机过程的统计特征不随时间变化。这样,数学期望和方差的参数不随时间和位置而变化。
理论上,平稳有两种:严格平稳和宽平稳。在实践中,广泛使用宽平稳性。广义的数学定义是:
对于时间序列ytyt,如果对于任何t,k,mt,k,m,满足以下条件:
$$E(y_t)=E(y_{t m})\\
cov(y_t,y_{t k})=cov(y_{t k},y_{t k m})$$
则称时间序列ytyt是宽平稳的。
这是ARMA模型稳定的必要条件。所以对于时间序列,首先需要保证使用自回归的N阶差分序列是稳定的。
用肉眼检查。我们以一场天池比赛的数据集为例。如图,是该店2015年9月至2016年10月的销售额:
这个数据明显不稳定,我们来看看一阶差分:
_ series=PD . series(data=data[ CNT ])# omit diff 1=DTA=_ series . diff(1)[1:]# DTA[0]isnandiff 1 . plot()PLT . save fig(。/1.jpg差异)
看起来平均值稳定在0左右,也有一定的周期性。
让我们继续看看二阶差分是否可以更平滑:
似乎二阶差分和一阶差分都比较稳定,肉眼很难区分。
只是肉眼无法分辨是否真的光滑,所以我们有必要引入数学方法来正式检验光滑度。
英雄母鸡测试英雄母鸡测试是指测试序列中是否存在英雄母鸡,因为英雄母鸡的存在是非平稳的时间序列。英雄母鸡指的是英雄母鸡过程。可以证明,如果序列中有英雄母鸡,过程就会不稳定,从而导致回归分析中的假回归。
mmydls检验(Dickey-Fuller检验)和增广的Dickey-Fuller检验可以检验自回归模型中是否存在英雄母鸡(单位根)。mmydls测试模型由D. Aygdqb和zxdxlc建立。
有关测试的详细信息,请参见[6]。因为公式太难打,这里就不赘述了。
python中的Adf通常使用statsmodel库对Python中的时间序列进行建模。这个库在我心目中的科学计算库列表中一直垫底,因为早期的文档确实很匮乏,但最近似乎在改善。
Adf验证可以在stats models . TSA . stat tools . ad fuller中进行,一般可以传入类似数据的一维数组,包括list、numpy数组和pandas系列,其他参数可以保留默认。
它的返回值是一个元组,格式如下:
对上述一阶差分数据进行adf检验,可以得到以下结果:
print sm . TSA . stat tools . adfuller(DTA)(-9.1916312162314355,2.1156279593784273e-15,12,338,{5%: -2.8701292813761641, 1% :-3.4449882962847, 10% :-2.577
如何确定序列能否稳定?主要见:
1%, %5.将原假设的统计值与adf检验结果进行比较。如果ADF检验结果同时小于1%、5%、10%,则说明该假设被很好地拒绝了。在该数据中,ADF结果为-9,小于三级的统计值。P值是否非常接近0。在这个数据中,P值是2e-15,接近于0。0的原始假设。ADF测试就是有英雄母鸡。只要统计值小于1%,就可以极其显著地拒绝原假设,认为数据是稳定的。注意,ADF值一般为负值和正值,但只有小于1%才能认为是对原假设的显著拒绝。
至于ADF在1%以上5%以下的结果,不能说不稳定。关键看检验要求。
但是对于这个例子,我们可以自豪地说,数据是稳定的。
谢谢你做了这么一点工作。
参考文献[1]英雄母鸡测试-百度文库
[2]使用Python和statsmodels进行时间序列分析
[3]平稳时间序列预测方法
[4]统计模型文档
[5]平滑随机过程-百度百科
[6]mmydls测试-维基百科
【7】如何看英雄母鸡测试——ADF测试结果
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。