KPSS (kwiatkowski - philips - schmidt - shin)测试可以配置为测试两种类型的平稳性:
水平平稳性:这个版本的测试检查时间序列是否在没有趋势的恒定平均值附近平稳。零假设是序列是水平平稳的。
趋势平稳性:此版本检查时间序列是否围绕确定性趋势(可能是线性或其他形式)是平稳的。零假设是,序列是趋势平稳的,也就是说,序列有确定的趋势,但去趋势后,残差是平稳的。
例如, y = x + 1 y = x + 1 y=x+1,其中序列似乎具有确定性线性趋势, x x x每增加1,则KPSS测试将根据使用的版本产生不同的结果:
-如果对水平平稳性执行KPSS检验,该检验可能会导致拒绝零假设,因为该系列的平均值随着时间的推移而不是恒定的-它随着 x x x的增加而增加。
-如果对趋势平稳性**执行KPSS检验,该检验可能不会拒绝零假设,假设该系列严格遵循方程 y = x + 1 y = x + 1 y=x+1,没有任何随机变化或噪声。这是因为,在去趋势之后,残差将是常数(在像这样的完美拟合趋势的情况下,残差将为零),表明该序列具有确定性趋势,并且在该趋势周围是平稳的。
在实际应用中,根据对序列的目视检查或基于对数据的先验知识来选择正确的测试是非常重要的。真实世界的数据通常包含一些噪声,而KPSS测试的结果将反映实际时间序列中存在的随机变化。
python
要使用Python中的KPSS测试来测试平稳性,您通常会使用statsmodels
库,该库在其tsa
中提供了KPSS
函数。stattools”模块。下面是一个分步指导如何对水平平稳性和趋势平稳性进行KPSS测试。
首先,确保你已经安装了statsmodels
。如果还没有安装,可以使用pip
来安装:
import numpy as np
from statsmodels.tsa.stattools import kpss
# For reproducibility, let's define a seed for Numpy's random number generator
np.random.seed(0)
# Example time series data: y = x + 1 + some noise
x = np.arange(100) # This would be your time index
noise = np.random.normal(0, 0.5, size=len(x)) # Some random noise
y = x + 1 + noise # The time series with a linear trend and some noise
# Perform KPSS test for level stationarity
kpss_stat, p_value, lags, critical_values = kpss(y, regression='c')
print(f'KPSS Statistic for level stationarity: {kpss_stat}')
print(f'p-value: {p_value}')
print('Critical Values:')
for key, value in critical_values.items():
print(f' {key} : {value}')
# Perform KPSS test for trend stationarity
kpss_stat, p_value, lags, critical_values = kpss(y, regression='ct')
print(f'\nKPSS Statistic for trend stationarity: {kpss_stat}')
print(f'p-value: {p_value}')
print('Critical Values:')
for key, value in critical_values.items():
print(f' {key} : {value}')
让我们来分析一下重要的部分:
kpss(y, regression='c')
:这在序列是水平平稳的零假设下('c’代表常数)进行kpss检验。kpss(y, regression='ct')
:这在序列是趋势平稳的零假设下进行kpss检验(" ct’`表示常数和趋势)。
输出将给出KPSS统计量和p值,以及不同显著性水平的临界值。要解释结果:
-如果KPSS统计量大于临界值(给定的显著性水平),或者p-value小于显著性水平,则平稳性的零假设被拒绝,表明序列可能不是平稳的。
-如果KPSS统计量小于临界值,或者p值高于显著性水平,则不能拒绝原假设,表明序列可能是平稳的。
对于现实世界的时间序列,水平平稳性和趋势平稳性之间的选择应该通过对数据的视觉检查和有关序列预期行为的任何领域知识来决定。