时间序列的平稳性检验方法汇总篇

本文介绍了时间序列平稳性检验的三种方法:图形分析、简单统计和假设检验。图形分析包括可视化数据和统计特征,如折线图、自相关图和偏自相关图。简单统计方法通过计算序列前后部分的均值和方差来判断平稳性。假设检验主要包括单位根检验,如DF检验、ADF检验、PP检验和DF-GLS检验,用于确定序列是否存在单位根,从而判断平稳性。文章通过实例和代码展示了如何应用这些方法,并提到了KPSS检验作为补充。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上文我们已经知道了什么是时间序列的平稳性,也见到了一些平稳时间序列和非平稳的时间序列,那么当我们有一个新的时间序列数据时,怎么判断它是否是平稳的呢?

时间序列平稳性检验方法,大体可分为三类:

  1. 图形分析方法
  2. 简单统计方法
  3. 假设检验方法

一、图形分析方法

图形分析方法是一种最基本、最简单直接的方法,即绘制图形,肉眼判断。

可直接可视化时间序列数据,也可以可视化时间序列的统计特征。

可视化数据

可视化数据即绘制时间序列的折线图,看曲线是否围绕某一数值上下波动(判断均值是否稳定),看曲线上下波动幅度变化大不大(判断方差是否稳定),看曲线不同时间段波动的频率[~紧凑程度]变化大不大(判断协方差是否稳定),以此来判断时间序列是否是平稳的。

以下绘制几张图,大家来直观判断一下哪些是平稳的,哪些是非平稳的。

import numpy as np
import pandas as pd
import akshare as ak
from matplotlib import pyplot as plt

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)

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()


a. 白噪声,曲线围绕0值上下波动,波动幅度前后、上下一致,为平稳序列。
b. 随机游走,曲线无确定趋势,均值、方差波动较大,非平稳序列。
c. GDP数据趋势上升,均值随时间增加,非平稳序列。
d. GDP季节差分后数据,曲线大致在一条水平线上上下波动,波动幅度前后变化较小,可认为是平稳的。

可视化统计特征

可视化统计特征,是指绘制时间序列的自相关图和偏自相关图,根据自相关图的表现来判断序列是否平稳。

自相关,也叫序列相关,是一个信号与自身不同时间点的相关度,或者说与自身的延迟拷贝–或滞后–的相关性,是延迟的函数。不同滞后期得到的自相关系数,叫自相关图。

(这里有一个默认假设,即序列是平稳的,平稳序列的自相关性只和时间间隔k有关,不随时间t的变化而变化,因而可以称自相关函数是延迟(k)的函数)

平稳序列通常具有短期相关性,对于平稳的时间序列,自相关系数往往会迅速退化到零(滞后期越短相关性越高,滞后期为0时,相关性为1);而对于非平稳的数据,退化会发生得更慢,或存在先减后增或者周期性的波动等变动。

自相关的计算公式为根据滞后期k将序列拆成等长的两个序列,计算这两个序列的相关性得到滞后期为k时的自相关性。

举例:

X = [ 2 , 3 , 4 , 3 , 8 , 7 ] \small X = [2,3,4,3,8,7] X=[2,3,4,3,8,7]

A = [ 2 , 3 , 4 , 3 , 8 ] \small A = [2,3,4,3,8] A=[2,3,4,3,8]

B = [ 3 , 4 , 3 , 8 , 7 ] \small B = [3,4,3,8,7] B=[3,4,3,8,7]

X ˉ = ∑ i = 1 6 X i = 4.5 \small \bar{X}=\sum_{i=1}^{6}X_i=4.5 Xˉ=i=16Xi=4.5

s 2 ( X ) = 1 6 ∑ i = 1 6 ( X i − X ˉ ) ( X i − X ˉ ) = 4.916. \small s^2(X)=\frac{1}{6}\sum_{i=1}^{6}{(X_i-\bar{X})(X_i-\bar{X})}=4.916. s2(X)=61i=16(XiXˉ)(XiXˉ)=4.916.

r ( 1 ) = 1 5 ∑ i = 1 5 ( A i − X ˉ ) ( B i − X ˉ ) = 1.75 \small r(1)=\frac{1}{5}\sum_{i=1}^{5}{(A_i-\bar{X})(B_i-\bar{X})}=1.75 r(1)=51i=15(AiXˉ)(BiXˉ)=1.75

A C F ( 1 ) = r ( 1 ) s 2 ( X ) = 1.75 4.91666667 = 0.3559322 \small ACF(1)=\frac{r(1)}{s^2(X)}=\frac{1.75}{4.91666667}=0.3559322 ACF(1)=s2(X)r(1)=4.916666671.75=0.3559322

import statsmodels.api as sm
X = [2,3,4,3,8,7]
print(sm.tsa.stattools.acf(X, nlags=1, adjusted=True))

> [1, 0.3559322]
其中第一个元素为滞后期为0时的自相关性,第二个元素为滞后期为1时的自相关性

根据ACF求出滞后k自相关系数时,实际上得到并不是X(t)与X(t-k)之间单纯的相关关系。

因为X(t)同时还会受到中间k-1个随机变量X(t-1)、X(t-2)、……、X(t-k+1)的影响,而这k-1个随机变量又都和X(t-k)具有相关关系,所以自相关系数里面实际掺杂了其他变量对X(t)与X(t-k)的影响。

在剔除了中间k-1个随机变量X(t-1)、X(t-2)、……、X(t-k+1)的干扰之后,X(t-k)对X(t)影响的相关程度,叫偏自相关系数。不同滞后期得到的偏自相关系数,叫偏自相关图。(偏自相关系数计算较复杂,后期再来具体介绍)

下面我们就来看看几个实战案例(上图中的数据再来看一下它们的自相关图和偏自相关图):

# 数据生成过程在第一个代码块中
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

fig, ax = plt.subplots(4, 2)
fig.subplots_adjust(hspace=0.5)

plot_acf(white_noise, ax=ax[0][0])
ax[0][0].set_title('ACF(white_noise)')
plot_pacf(white_noise, ax=ax[0][1])
ax[0][1].set_title('PACF(white_noise)')

plot_acf(random_walk, ax=ax[1][0])
ax[1][0].set_title('ACF(random_walk)')
plot_pacf(random_walk, ax=ax[1][1])
ax[1][1].set_title('PACF(random_walk)')

plot_acf(gdp, ax=ax[2][0])
ax[2][0].set_title('ACF(gdp)')
plot_pacf(gdp, ax=ax[2][1])
ax[2][1].set_title('PACF(gdp)')

plot_acf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值