平稳性
首先先介绍平稳序列(此处及之后所述平稳均为宽平稳)的性质。
对于时间序列
时间 | 1 | 2 | 3 | 4 | … | t-1 | t |
---|---|---|---|---|---|---|---|
变量 | X1 X_1 X1 | X2 X_2 X2 | X3 X_3X3 | X4 X_4X4 | ... ... ... | Xt−1 X_{t-1} Xt−1 | Xt X_t Xt |
1.常数均值
EXt=μ,∀t∈TEX_t=\mu,\forall t \in TEXt=μ,∀t∈T
2.自协方差函数和自相关系数仅依赖于时间间隔长度而与起止时间无关
γ(t,s)=γ(k,k+s−t),∀t,s,k∈T\gamma (t,s) = \gamma (k,k + s - t),\forall t,s,k \in Tγ(t,s)=γ(k,k+s−t),∀t,s,k∈T
其中
γ(t,s)=E[(Xt−μt)(Xs−μs)]\gamma \left( {t,s} \right){\rm{ = E}}\left[ {\left( {{X_t} - {\mu _t}} \right)\left( {{X_s} - {\mu _s}} \right)} \right]γ(t,s)=E[(Xt−μt)(Xs−μs)]
检验序列的平稳性通常有两种方法,分别为图检验方法和单位根检验法。
图检验方法
其中图检验方法又分为时序图检验法和自相关图法。
一、时序图检验
时序图检验是根据平稳时间序列具有常数均值和常数方差的性质进行判断。示例如下:
时序图在某一个常数附近波动,并没有明显的趋势和季节性,基本可以视为平稳序列。
二、自相关图检验
自相关图检验的原理是平稳序列具有的短期相关性。随着延迟阶数k的增加,平稳时间序列的自相关系数会很快衰减到0,如序列不平稳,则衰减到0的速度较慢。
自相关图是一个平面二维坐标悬垂线图。横坐标表示延迟阶数,纵坐标表示自相关系数。示例如下:
从图中可以看出,该序列的自相关系数一直都比较小,一直在x轴附近波动,因此可以认为该序列是平稳时间序列。
纯随机性检验
纯随机序列的定义
如序列满足下列条件:
(1)EXt=μ,∀t∈TE{X_t} = \mu,\forall {\rm{t}} \in T EXt=μ,∀t∈T
(2)γ(t,s)={σ2,t=s0,t≠s,∀t,s∈T\gamma (t,s) = \begin{cases}\sigma ^2,t = s \\{0,t \ne s} \end{cases}\text,\forall t,s \in Tγ(t,s)={σ2,t=s0,t=s,∀t,s∈T
则该序列为纯随机序列,也称做白噪声(white noise)序列,记为Xt=WN(μ,σ2)X_t=WN(\mu,\sigma^2)Xt=WN(μ,σ2)
注意:白噪声序列也是平稳序列。
纯随机性检验
纯随机性检验又称为白噪声检验,用于检验序列是否为纯随机性序列。
假设条件
原假设:延迟期数小于或等于m期的序列值之间相互独立
备择假设:延迟期数小于或等于m期的序列值之间有相关性
数学语言表达如下:
H0:ρ1=ρ2=...=ρm=0,∀m≥1H_0:\rho_1=\rho_2=...=\rho_m=0,\forall m \geq 1H0:ρ1=ρ2=...=ρm=0,∀m≥1
H1:至少存在一个ρk≠0,∀m≥1,k≤mH_1:至少存在一个\rho_k\neq0,\forall m \geq 1,k\leq mH1:至少存在一个ρk=0,∀m≥1,k≤m
检验统计量
常常使用LB统计量,公式为:
LB=n(n+2)∑k=1nρk2^n−kLB=n(n+2)\sum_{k=1}^n \frac {\hat{\rho_k^2}}{n-k}LB=n(n+2)k=1∑nn−kρk2^
式中n为序列观测期数,m为延迟期数。并且LB统计量近似服从自由度为m的卡方分布,即
LB∼χ2(m)LB\sim\chi^2(m)LB∼χ2(m)
对数据进行纯随机性检验,结果如下:
从上表中可以看出,其pvalue均大于0.05,因此无法拒绝原假设该时间序列为纯随机性序列,可以停止对该序列的统计分析。
本文所使用的代码如下:
import matplotlib.pyplot as plt
import pandas as pd
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
from statsmodels.stats.diagnostic import acorr_ljungbox
data = pd.read_csv(r'D:\附录1.1.CSV') #文件已上传至资源中
plt.plot(data.Year,data.iloc[:,1])
plot_acf(data.iloc[:,1],lags=20)
acorr_ljungbox(data.iloc[:,1], lags = [i for i in range(1,12)],boxpierce=True)