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值高于显著性水平,则不能拒绝原假设,表明序列可能是平稳的。
对于现实世界的时间序列,水平平稳性和趋势平稳性之间的选择应该通过对数据的视觉检查和有关序列预期行为的任何领域知识来决定。
数学上
用数学符号来解释KPSS测试。KPSS检验检验了一个零假设,即一个可观察的时间序列在一个确定性趋势周围是平稳的,而另一个假设是它有一个单位根,这意味着它是非平稳的。
以下是KPSS测试的主要步骤:
-
时间序列建模:
对时间序列 y t y_t yt进行如下建模:y t = μ + τ t + ϵ t y_t = \mu + \tau t + \epsilon_t yt=μ+τt+ϵt
其中 μ \mu μ为截距(常数项), τ \tau τ为时间趋势系数 t t t, ϵ t \epsilon_t ϵt为平稳误差项。如果测试的是水平周围的平稳性,而不是趋势,模型会去掉 τ t \tau t τt项。
-
估算模型:
通常通过普通最小二乘(OLS)对上述方程进行估计,并获得残差 ϵ t ^ \hat{\epsilon_t} ϵt^。 -
计算残差累加和:
计算残差的累积和 S t S_t St为:S t = ∑ i = 1 t ϵ i ^ S_t = \sum_{i=1}^{t} \hat{\epsilon_i} St=i=1∑tϵi^
-
计算检验统计量:
KPSS统计量计算为:KPSS = ∑ t = 1 T S t 2 T 2 σ ^ 2 \text{KPSS} = \frac{\sum_{t=1}^{T} S_t^2}{T^2 \hat{\sigma}^2} KPSS=T2σ^2∑t=1TSt2
其中 T T T为观测数, σ ^ 2 \hat{\sigma}^2 σ^2为 ϵ t \epsilon_t ϵt的长期方差估计值。长期方差通常使用new - west估计器或Bartlett核来估计。
-
决策准则:
对于给定的显著性水平,将测试统计量与来自KPSS测试表的临界值进行比较。如果统计量大于临界值,则拒绝平稳性的零假设,而采用单位根的备用假设(非平稳性)。
KPSS检验的解释与其他单位根检验相反,如增强迪基-富勒(ADF)检验:显著的KPSS统计量表明存在单位根,即非平稳性,而不显著的统计量表明平稳性。
如果你使用KPSS检验拒绝平稳性的零假设,这并不一定意味着时间序列具有单位根;它仅仅意味着时间序列在确定的趋势周围不是平稳的。为了确认单位根的存在,您通常会使用另一个检验,如ADF检验,它具有存在单位根的零假设。
长期方差估计
用于估计时间序列残差的长期方差,这是KPSS检验统计量计算的重要组成部分。根据Kwiatkowski等人(1992)概述的方法,所提供的方程是一个校正残差中潜在自相关的估计量。
下面是函数背后的数学分解:
- 输入:
-“残差”:从时间序列中去除任何确定性成分(如趋势或平均值)后的残差数组。
-“nobs”:时间序列中的观测数。
- ’ lag ':自相关校正中包含的滞后数。
-
残差平方和初始值:
- s _ h a t = ∑ t = 1 n e t 2 s\_hat = \sum_{t=1}^{n} e_t^2 s_hat=∑t=1net2
-这是残差的平方和(’ resides ')。每个残差 e t e_t et是在 t t t时刻观测值与拟合值(去除趋势后)之间的差值。 -
自相关校正:
-对于从1到’ lag '的每个滞后 i i i,该函数计算时间 t t t的残差和时间 t − i t-i t−i的残差的乘积,将这些乘积相加。然后这个总和乘以一个递减的权重 ( 1 − i l a g s + 1 ) (1 - \frac{i}{lags + 1}) (1−lags+1i),它给高阶滞后的权重更小。
—双求和可以表示为 ∑ i = 1 l a g s ( 2 ⋅ ( 1 − i l a g s + 1 ) ⋅ ∑ t = i + 1 n e t ⋅ e t − i ) \sum_{i=1}^{lags} \left( 2 \cdot (1 - \frac{i}{lags + 1}) \cdot \sum_{t=i+1}^{n} e_t \cdot e_{t-i} \right) ∑i=1lags(2⋅(1−lags+1i)⋅∑t=i+1net⋅et−i)
-这部分公式通过考虑残差在不同时间滞后时的协方差来解释残差中的自相关。 -
标准化:
-然后将总数 s _ h a t s\_hat s_hat除以观测值“nobs”的数量以使统计量正常化。
-结果是残差的长期方差的估计,考虑到自相关到指定数量的滞后。
函数不仅考虑残差本身的方差,而且考虑残差之间在不同滞后的协方差,从而估计时间序列残差的长期方差。这一点很重要,因为如果不适当地考虑自相关的存在,会使方差估计产生偏差,从而导致从KPSS测试中得出不正确的结论。
如果强行用样本方差代替长期方差会发生什么
在不考虑自相关的情况下,使用残差的样本方差作为KPSS检验中的长期方差可能导致误导性结果。
-
长期方差低估:
如果在时间序列中存在正自相关,这在许多经济和金融时间序列中很常见,那么样本方差通常会低估残差的真实长期方差。这是因为样本方差只测量平均值的平均平方偏差,忽略了观测值之间的任何序列依赖性。 -
第一类错误:
低估长期方差会导致KPSS检验统计量膨胀,因为检验统计量与估计的长期方差呈负相关。膨胀的检验统计量增加了错误地拒绝平稳性零假设的可能性,而实际上它是正确的,这被称为第一类错误。 -
长期方差的高估:
相反,如果序列中存在负自相关,则样本方差可能高估长期方差。 -
第二类错误:
对长期方差的高估会导致KPSS检验统计量的缩小,这增加了在零假设为假时无法拒绝零假设的可能性,即II型错误。
KPSS测试是专门设计用于测试单位根对确定性趋势周围的平稳性的替代。为了使该检验对自相关和异方差具有鲁棒性,需要正确估计长期方差。使用new - west估计器或类似的方法,通过考虑到一定数量的滞后的自相关来提供对长期方差的一致估计,从而给出更可靠的测试结果。
存在自相关的情况下,直接使用样本方差作为长期方差的估计量可能导致对时间序列平稳性的不准确评估。因此,对于考虑自相关的长期方差,使用适当的估计器是很重要的,例如由Kwiatkowski等人(1992)提供的估计器。