python ADF检验

前言

本文对ADF检验进行研究,python示例代码,不对概念进行分析介绍。

Code


import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import adfuller
import pandas as pd
"""
pip3 install statsmodels
"""

# 数据一、随机数据
# data = np.random.randint(6, 10, 300)

# 数据二、待测数据
data = pd.read_csv("./sample_hushen300.csv", usecols=[1]).values

plt.plot(data)

alpha = 0.05
result = adfuller(data)
print((result))
if result[1] < alpha:  # p_value值大,无法拒接原假设,有可能单位根,需要T检验
    print("stationarity")
else:
    if result[0] < result[4]['5%']:  # 代表t检验的值小于5%,置信度为95%以上,这里还有'1%''10%'
        print("stationarity")  # 拒接原假设,无单位根,平稳的
    else:
        print("no_stationarity")  # 无法拒绝原假设,有单位根,不平稳的


"""
第一个是adt检验的结果,简称为T值,表示t统计量。
第二个简称为p值,表示t统计量对应的概率值。
第三个表示延迟。
第四个表示测试的次数。
第五个是配合第一个一起看的,是在99%95%90%置信区间下的临界的ADF检验的值。
 
第一点,1%%5%10不同程度拒绝原假设的统计值和ADF Test result的比较,
ADF Test result(第一个值)同时小于1%5%10%即说明非常好地拒绝该假设。本数据中,adf结果为-8, 小于三个level的统计值
第二点,p值要求小于给定的显著水平,p值要小于0.05,等于0是最好的。本数据中,P-value 为 1e-15,接近0.
p值为0.0229<0.05,说明在5%下显著,即拒绝原假设,是平稳的
"""

总结

  • ADF检验的原假设是存在单位根,只要这个统计值是小于1%水平下的数字就可以极显著的拒绝原假设,认为数据平稳。
  • 注意,ADF值一般是负的,也有正的,但是它只有小于1%水平下的才能认为是及其显著的拒绝原假设。
  • 对于ADF结果在1% 以上 5%以下的结果,也不能说不平稳,关键看检验要求是什么样子的。

你可能感兴趣的:(Python基础学习,时间序列预测,python,开发语言)