一、ADF检验原假设介绍
ADF(Augmented Dickey-Fuller)检验是用于时间序列数据的检验方法,旨在检验时间序列数据是否存在单位根,以判断时间序列是否是平稳的。ADF检验方法的原假设是存在单位根,备择假设是数据是平稳的。
需要注意的是,存在单位根意味着时间序列的均值和方差会随着时间的推移而改变,不具有稳定性。
二、ADF检验的实现
在Python中,我们可以使用statsmodels包中的adfuller函数进行ADF检验。adfuller函数的部分参数介绍如下:
adfuller(x, maxlag=None, regression='c', autolag='AIC', store=False, regresults=False)
x:需要进行ADF检验的时间序列数据
maxlag:使用的滞后阶数,默认为12,可以根据数据实际情况进行调整
regression:拟合趋势项的类型,包括'c'(常数项)、'ct'(常数项和时间趋势)和'ctt'(常数项、时间趋势和二次时间趋势)
autolag:滞后阶数的选取方式,包括'AIC'、'BIC'、't-stat'和'None'。
store:是否需要存储ADF检验的各种结果
regresults:是否需要输出ADF检验的回归结果
三、ADF检验的结果解读
在进行ADF检验后,我们会得到一个p值。如果p值小于设定的显著性水平(通常为0.05),则可以拒绝原假设,认为数据是平稳的。如果p值大于设定的显著性水平,则无法拒绝原假设,认为数据存在单位根,不具有稳定性。
另外,ADF检验的结果还包括统计量的值和对应的置信区间。如果统计量的值小于置信区间的上限,则可以拒绝原假设,认为数据是平稳的。
四、ADF检验的应用举例
下面是一个用Python实现ADF检验的简单示例:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller
# 生成一组随机时间序列数据
np.random.seed(123)
data = np.random.normal(size=100)
data = pd.Series(data).cumsum()
# 进行ADF检验
result = adfuller(data)
print('ADF Statistic: %f' % result[0])
print('p-value: %f' % result[1])
print('Critical Values:')
for key, value in result[4].items():
print('\t%s: %.3f' % (key, value))
# 根据ADF检验的结果判断时间序列的平稳性
if result[1] < 0.05:
print('The data is stationary')
else:
print('The data is not stationary')
以上示例中,我们首先生成一组随机时间序列数据,然后使用adfuller函数对数据进行ADF检验。最后根据ADF检验的结果判断时间序列的平稳性。
五、ADF检验的优缺点
ADF检验具有以下优点:
1. 可以很好地处理非平稳时间序列数据;
2. 检验结果简单易懂,通过p值即可判断平稳性。
但是ADF检验也存在一定的缺点:
1. ADF检验只能检验一阶整合过程,对于高阶整合过程或序列中存在其它形式的非平稳性,检验结果可能不准确;
2. ADF检验还需要选择调整的一些参数,比如滞后阶数和拟合趋势,则需要经验和实践。