0x05 时间序列中的检验

这里介绍时间序列中的各种统计检验的方法, 主要是检验原理和应用场景.

Augmented Dickey-Fuller unit root test

单位根检验, ADF检验, 作用是检验时间序列的平稳性.

检验一个单变量自回归模型(AR模型)是否存在单位根. 单变量自回归模型指的是AR(1), 即:

Xt=ρXt1+εtX_t=\rho X_{t-1} + \varepsilon_t

单位根存在时有以下的表现和性质:

  • ρ<1\rho \lt 1时, 单位根不存在, ρ=1\rho=1时, 单位根存在

  • 单位根不存在时, 时间序列是平稳的, 即ρ<1\rho \lt 1时, XtX_t是平稳序列

之所以ρ<1\rho \lt 1时, 时间序列是平稳的, 原理在于:

  • ρ<1\rho \lt 1时:

    Var(Xt)=Var(ρXt1+εt)=Var(ρ(ρXt2+εt1)+εt)=Var(ρ2Xt1+ρεt1+εt)==Var(ρtX0+ρt1ε1+ρt2ε2++ρεt1+εt)=Var(ρt1ε1+ρt2ε2++ρεt1+εt)=ρ2(t1)Var(ε1)+ρ2(t2)Var(ε2)++Var(εt)=σ2(1+ρ2+ρ4++ρ2(t1))=σ211ρ2\begin{aligned} Var(X_t) &= Var(\rho X_{t-1} + \varepsilon_t) \\ &= Var(\rho(\rho X_{t-2} + \varepsilon_{t-1}) + \varepsilon_t) \\ &= Var(\rho^2X_{t-1} + \rho \varepsilon_{t-1} + \varepsilon_t) \\ &= \cdots \\ &= Var(\rho^tX_0 + \rho^{t-1}\varepsilon_{1} + \rho^{t-2}\varepsilon_{2} + \cdots + \rho\varepsilon_{t-1} + \varepsilon_t) \\ &= Var(\rho^{t-1}\varepsilon_{1} + \rho^{t-2}\varepsilon_{2} + \cdots + \rho\varepsilon_{t-1} + \varepsilon_t) \\ &=\rho^{2(t-1)}Var(\varepsilon_{1}) + \rho^{2(t-2)}Var(\varepsilon_{2}) + \cdots + Var(\varepsilon_t) \\ &= \sigma^2(1+\rho^2 + \rho^4 + \cdots + \rho^{2(t-1)}) \\ &= \sigma^2\frac{1}{1-\rho^2} \end{aligned}

    上面的推到过程中使用到了:

    • 第二行: AR模型的迭代

    • 第五行: ρtX0\rho^t X_0项的消失是因为X0X_0是常数项, 其方差为0

    • 第七行: 所有误差项的方差是相同的, 都是σ2\sigma^2

    • 第八行: 等比数列的求和公式

    因此可以得到时间序列XtX_t的方差是一个常数, 即11ρ2\frac{1}{1-\rho^2}. 这满足平稳序列的方差是个常数的性质.

  • ρ=1\rho=1时:

    Var(Xt)=Var(Xt1+εt)=Var(Xt2+εt1+εt)=Var(X0+ε1+ε2++εt1+εt)=Var(ε1)+Var(ε2)++Var(εt)=tσ2\begin{aligned} Var(X_t) &= Var(X_{t-1} + \varepsilon_t) \\ &= Var(X_{t-2} + \varepsilon_{t-1} + \varepsilon_t) \\ &= Var(X_0 + \varepsilon_{1} + \varepsilon_{2} + \cdots + \varepsilon_{t-1} + \varepsilon_t) \\ &=Var(\varepsilon_{1}) + Var(\varepsilon_{2}) + \cdots + Var(\varepsilon_t) \\ &= t\sigma^2 \end{aligned}

    因此, 此时时间序列的方差是一个与时间有关的函数, 肯定是非平稳的.

以上是单位根与平稳性关系的原理. 整个平稳性检验的过程为:

  • 原假设为ρ=1\rho=1, 即时间序列是不平稳的

  • 通过线性回归方法拟合出自回归模型.

    • 需要注意的是, 这里假设的自回归模型不是AR(1), 而是包含若干个lagAR(p)

    • 这里p参数的选择, 在statsmodels.tsa.stattools.adfuller中都有体现

      • 根据12(n/100)1/412*(n/100)^{1/4}公式自动得出

      • 使用AIC或BIC评价线性模型拟合的结果, 选取最好的

      • 使用tt统计量, 从12(n/100)1/412*(n/100)^{1/4}开始, 逐步自减1, 直到tt统计量低于5%显著性水平. 这里的检验是对回归系数进行的检验

    • 根据拟合好的模型, 只选取p[0]Xt1X_{t-1}项的相关系数进行检验, 检验的方法是MacKinnon, 得到对应p值, 进行判断, 并返回结果

Python中的使用方法为:

from statsmodels.tsa.stattools import adfuller

使用方法参考statsmodels.tsa.stattools.adfuller.

Kwiatkowski-Phillips-Schmidt-Shin test

KPSS检验也是用来检验时间序列平稳性的方法.

KPSS检验的原假设等价于时间序列是平稳的, 因此, 只要得到的p值不小于显著性水平即可说明时间序列是平稳的.

KPSS检验中构建了一个比较复杂的统计量, 且这个统计量服从的分布也不是常用的几种分布. 通过论文作者给出的不同显著性水平对应的临界统计值表线性插值的方法, 对计算得到的统计量, 计算得到其p值, 做出判断.

Python中的使用方法为:

from statsmodels.tsa.stattools import kpss

使用方法参考statsmodels.tsa.stattools.kpss.

Ljung-Box test

  • 目标: 检验时间序列是否具有自相关性, 换句话说是对序列的随机性进行的检测. 白噪声序列可以通过检测, 具有自相关性的序列(如可以使用AR模型进行建模的序列)则不能通过检测.

  • 检验方法: 通过序列本身的自相关系数ρ\rho的值, 判断指定lag范围内的自相关系数集合ρ1,ρ2,,ρm\rho_1, \rho_2, \cdots, \rho_m是否都为0, 其中mm是人为指定的判断范围.

因此, Ljung-Box test假设时间序列是完全随机的, 各个值之间没有相关性, 完全独立, 因此原假设H0H_0为:

H0:ρ1=ρ2==ρm=0H_0: \rho_1=\rho_2=\cdots=\rho_m=0

如果所有的自相关系数中有一个显著不为0, 则认为时间序列是有相关性的, 就要拒绝原假设, 因此备择假设为:

H1:i{1,,m},ρi0H_1: \exists{}i\in{\{1,\cdots,m\}}, \quad \rho_i \neq 0

构造检测需要使用的统计量:

Q(m)=n(n+2)k=1mρk2nkQ(m)=n(n+2)\sum\limits_{k=1}^m\frac{\rho_k^2}{n-k}

其中nn是时间序列的长度. 这个统计量服从自由度为mmχ2\chi^2分布. 因此对于显著性水平α\alpha, 当Q>χ1α,m2Q \gt \chi^2_{1-\alpha,m}时, 拒绝原假设, 否则接受原假设.

注意, 接受原假设意味着接受时间序列是相互独立的, 即为白噪声序列.

  • 用途: Ljung-Box test常用在对模型(如ARIMA)拟合之后的残差序列进行检验, 如果残差序列能够通过检测, 说明残差序列是白噪声序列, 模型拟合的效果很好.

最后更新于