这里介绍时间序列中的各种统计检验的方法, 主要是检验原理和应用场景.
Augmented Dickey-Fuller unit root test
单位根检验, ADF检验, 作用是检验时间序列的平稳性.
检验一个单变量自回归模型(AR模型)是否存在单位根. 单变量自回归模型指的是AR(1), 即:
Xt=ρXt−1+εt
单位根存在时有以下的表现和性质:
ρ<1时, 单位根不存在, ρ=1时, 单位根存在
单位根不存在时, 时间序列是平稳的, 即ρ<1时, Xt是平稳序列
之所以ρ<1时, 时间序列是平稳的, 原理在于:
当ρ<1时:
Var(Xt)=Var(ρXt−1+εt)=Var(ρ(ρXt−2+εt−1)+εt)=Var(ρ2Xt−1+ρεt−1+εt)=⋯=Var(ρtX0+ρt−1ε1+ρt−2ε2+⋯+ρεt−1+εt)=Var(ρt−1ε1+ρt−2ε2+⋯+ρεt−1+εt)=ρ2(t−1)Var(ε1)+ρ2(t−2)Var(ε2)+⋯+Var(εt)=σ2(1+ρ2+ρ4+⋯+ρ2(t−1))=σ21−ρ21
上面的推到过程中使用到了:
第五行: ρtX0项的消失是因为X0是常数项, 其方差为0
第七行: 所有误差项的方差是相同的, 都是σ2
因此可以得到时间序列Xt的方差是一个常数, 即1−ρ21. 这满足平稳序列的方差是个常数的性质.
当ρ=1时:
Var(Xt)=Var(Xt−1+εt)=Var(Xt−2+εt−1+εt)=Var(X0+ε1+ε2+⋯+εt−1+εt)=Var(ε1)+Var(ε2)+⋯+Var(εt)=tσ2
因此, 此时时间序列的方差是一个与时间有关的函数, 肯定是非平稳的.
以上是单位根与平稳性关系的原理. 整个平稳性检验的过程为:
原假设为ρ=1, 即时间序列是不平稳的
通过线性回归方法拟合出自回归模型.
需要注意的是, 这里假设的自回归模型不是AR(1), 而是包含若干个lag
的AR(p)
这里p参数的选择, 在statsmodels.tsa.stattools.adfuller
中都有体现
根据12∗(n/100)1/4公式自动得出
使用AIC或BIC评价线性模型拟合的结果, 选取最好的
使用t统计量, 从12∗(n/100)1/4开始, 逐步自减1, 直到t统计量低于5%显著性水平. 这里的检验是对回归系数进行的检验
根据拟合好的模型, 只选取p[0]
即Xt−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
模型进行建模的序列)则不能通过检测.
检验方法: 通过序列本身的自相关系数ρ的值, 判断指定lag
范围内的自相关系数集合ρ1,ρ2,⋯,ρm是否都为0, 其中m是人为指定的判断范围.
因此, Ljung-Box test假设时间序列是完全随机的, 各个值之间没有相关性, 完全独立, 因此原假设H0为:
H0:ρ1=ρ2=⋯=ρm=0
如果所有的自相关系数中有一个显著不为0, 则认为时间序列是有相关性的, 就要拒绝原假设, 因此备择假设为:
H1:∃i∈{1,⋯,m},ρi=0
构造检测需要使用的统计量:
Q(m)=n(n+2)k=1∑mn−kρk2
其中n是时间序列的长度. 这个统计量服从自由度为m的χ2分布. 因此对于显著性水平α, 当Q>χ1−α,m2时, 拒绝原假设, 否则接受原假设.
注意, 接受原假设意味着接受时间序列是相互独立的, 即为白噪声序列.
用途: Ljung-Box test常用在对模型(如ARIMA)拟合之后的残差序列进行检验, 如果残差序列能够通过检测, 说明残差序列是白噪声序列, 模型拟合的效果很好.