时间序列平稳性检验
平稳性是时间序列分析中的一个重要概念,它指的是时间序列的统计特征在不同时间段上是不发生明显变化的。具体来说,如果一个时间序列是平稳的,那么它的均值、方差和自相关系数等统计量都不会随着时间的推移而发生显著的变化。
为了确定一个时间序列是否是平稳的,需要进行平稳性检验。常见的平稳性检验方法包括基于统计量的检验方法,如ADF检验、KPSS检验和PP检验等,以及基于谱分析的检验方法,如周期图谱检验和相关谱检验等。
下面简要介绍几种常用的平稳性检验方法:
1. ADF检验
ADF检验是一种基于单位根检验的平稳性检验方法,通常用于检验时间序列是否具有单位根,以判断其是否是平稳的。具体来说,ADF检验假设时间序列存在单位根,然后通过建立ADF统计量来检验这个假设。
from statsmodels.tsa.stattools import adfuller
# 进行ADF检验
result = adfuller(series)
# 输出ADF统计量的值
print('ADF Statistic: %f' % result[0])
# 输出p-value的值
print('p-value: %f' % result[1])
如果ADF统计量小于对应的临界值,且p值小于显著性水平(如0.05),则可以拒绝单位根假设,并认为时间序列是平稳的。
2. KPSS检验
KPSS检验也是一种常见的平稳性检验方法,与ADF检验相反,它假设时间序列是平稳的,然后通过建立KPSS统计量来检验这个假设。
from statsmodels.tsa.stattools import kpss
# 进行KPSS检验
result = kpss(series)
# 输出KPSS统计量的值
print('KPSS Statistic: %f' % result[0])
# 输出p-value的值
print('p-value: %f' % result[1])
如果KPSS统计量小于对应的临界值,且p值小于显著性水平(如0.05),则可以接受平稳性假设,并认为时间序列是平稳的。
3. PP检验
PP检验是一种基于Bootstrap重采样的平稳性检验方法,通常用于检验时间序列是否具有趋势。具体来说,PP检验首先使用回归方法对时间序列进行趋势估计,然后通过Bootstrap重采样来构建估计量的分布,并计算出检验统计量。
from arch.unitroot import PhillipsPerron
# 进行PP检验
result = PhillipsPerron(series)
# 输出PP统计量的值
print('PP Statistic: %f' % result.stat)
# 输出p-value的值
print('p-value: %f' % result.pvalue)
如果PP统计量小于对应的临界值,且p值小于显著性水平(如0.05),则可以拒绝趋势假设,并认为时间序列是平稳的。
4. 周期图谱检验
周期图谱检验是一种基于谱分析的平稳性检验方法,通常用于检验时间序列是否具有周期性。具体来说,周期图谱检验首先将时间序列进行傅里叶变换,得到其频域表示,然后计算频率分量的幅值和相位,进而检验时间序列是否具有周期性。
from statsmodels.tsa.stattools import periodogram
# 计算周期图谱
frequencies, power_spectrum = periodogram(series)
# 对幅值进行归一化
normalized_power_spectrum = power_spectrum / sum(power_spectrum)
# 输出最大幅值的频率
print('Max amplitude frequency: %f' % frequencies[np.argmax(normalized_power_spectrum)])
如果时间序列的幅值在一定的频率区间内有明显的峰值,且这些峰值在一定的时间间隔内重复出现,则可以认为时间序列具有周期性。
总之,平稳性检验是时间序列分析中的一个基本问题,它能够帮助我们确定一个时间序列是否具有统计稳定性,从而确定适当的建模方法。常用的平稳性检验方法包括ADF检验、KPSS检验、PP检验和周期图谱检验等,每种方法都有其特点和适用范围。