理解平稳性
一般来说,平稳时间序列是指随着时间的推移具有相当稳定的统计特性的时间序列,特别是在均值和方差方面。平稳性可能是一个比较模糊的概念,将序列排除为不平稳可能比说序列是平稳的更容易。通常不平稳序列有几个特征:
- 平均值随时间推移发生变化,不保持稳定;
- 每个周期的波峰和波谷之间的距离在增长(缩短),也就是序列的方差随时间推移而增加(减小);
- 整个序列表现出强烈的季节性行为,与平稳性相反。
如何判断序列是否平稳?
时间序列平稳性检验方法,一般可分为两类:
- 图形分析方法
- 假设检验方法
1.图形分析方法
这是最简单的方法,即可视化时间序列数据,或可视化时间序列的统计特征,进行肉眼判断。
1.1 可视化数据
import numpy as np
import pandas as pd
import akshare as ak
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
sns.set(style='darkgrid')
warnings.filterwarnings('ignore')
np.random.seed(123)
# -------------- 准备数据 --------------
# 白噪声
white_noise = np.random.standard_normal(size=1000)
# 随机游走
x = np.random.standard_normal(size=1000)
random_walk = np.cumsum(x)
# GDP
df = ak.macro_china_gdp()
df = df.set_index('季度')
# df.index = pd.to_datetime(df.index)
gdp = df['国内生产总值-绝对值'][::-1].astype('float')
# GDP DIFF
gdp_diff = gdp.diff(4).dropna()
# -------------- 绘制图形 --------------
fig, ax = plt.subplots(2, 2, figsize=(22,16), dpi=300)
ax[0][0].plot(white_noise)
ax[0][0].set_title('white_noise')
ax[0][1].plot(random_walk)
ax[0][1].set_title('random_walk')
ax[1][0].plot(gdp)
ax[1][0].set_title('gdp')
ax[1][1].plot(gdp_diff)
ax[1][1].set_title('gdp_diff')
plt.show()
- 白噪声:曲线围绕0值上下波动,波动幅度前后、上下一致,为平稳序列;
- 随机游走:曲线无确定趋势,均值、方差波动较大,非平稳序列;
- GDP数据趋势上升,均值随时间增加,非平稳序列;
- GDP季节差分后数据,曲线大致在一条水平线上下波动,波动幅度前后变化较小,可认为是平稳的。
1.2 可视化统计特征
可视化统计特征,是指绘制时间序列自相关图和偏自相关图,根据自相关图的表现来判断序列是否平稳。
自相关,也叫序列相关,是一个信号与自身不同时间点的相关度,或者说与自身的延迟拷贝(或滞后性)的相关性,是延迟的函数。不同滞后期得到的自相关系数,叫自相关图。(这里有一个默认假设是序列是平稳序列,平稳序列的自相关性只和时间间隔k有关,不随时间t的变化而变化,因而可以称自相关函数是延迟k的函数)
平稳序列通常具有短期自相关性,对于平稳的时间序列,自相关系数往往会迅速退化到零(滞后期约短相关性越高,滞后期为0,相关性为1);而对于非平稳的数据,退化会发生得更慢,或存在先减后增或者周期性波动等变动。
自相关的计算公式为根据滞后期kkk将序列拆成等长的两个序列,计算两个序列的相关性得到滞后期为kkk时的自相关性。举例:
X=[2,3,4,3,8,7],A=[2,3,4,3,8],B=[3,4,3,8,7]X=[2,3,4,3,8,7],\quad A=[2,3,4,3,8], \quad B=[3,4,3,8,7]X=[2,3,4,3,8,7],A=[2,3,4,3,8],B=[3,4,3,8,7]
Xˉ=16∑i=16Xi=4.5\bar{X} = \frac{1}{6} \sum_{i=1}^{6}X_i = 4.5Xˉ=61i=1∑6Xi=4.5
s2(X)=16∑i=16(Xi−Xˉ)(Xi−Xˉ)=4.916s^2(X)=\frac{1}{6} \sum_{i=1}^{6}(X_i- \bar{X})(X_i- \bar{X})=4.916 s2(X)=61i=1∑6(Xi−Xˉ)(Xi−Xˉ)=4.916
r(1)=15(Ai−Xˉ)(Bi−Xˉ)=1.75r(1)=\frac{1}{5}(A_i-\bar{X})(B_i-\bar{X})=1.75r(1)=