一、学习内容
1. 自相关函数 (ACF) 与偏自相关函数 (PACF)
自相关函数 (ACF):
- 自相关函数用于衡量时间序列在不同时间滞后下的相关性。它描述了序列与自身滞后版本之间的相关性,滞后时间越长,相关性通常会减弱。自相关函数的计算公式为:
其中:
- 是时间序列在时间 ttt 的值。
- 是序列的均值。
- 是滞后阶数。
- 是序列的长度。
偏自相关函数 (PACF):
- 偏自相关函数是排除了中间滞后阶数影响的自相关函数,主要用于识别自回归模型 (AR) 的阶数。简单来说,PACF 测量的是在考虑所有介于两点之间的影响后,两个不同滞后时间点之间的净相关性。对于 PACF 的定义,可以表示为:
其中,表示在排除了中间滞后项的影响后,时间 和时间 的值之间的相关性。
2. 时间序列的平稳性检验(ADF 检验)
平稳性:
- 平稳时间序列的统计性质(均值、方差、自相关等)随着时间保持恒定。
- 非平稳时间序列通常包含趋势、季节性或其他随时间变化的模式,可能导致模型的预测效果不佳。
ADF 检验:
- 增强型 Dickey-Fuller (ADF) 检验是一种用于检验时间序列是否平稳的统计测试。,其检验统计量的计算公式为:
其中:
- 是时间序列的回归系数估计值。
- 是 的标准误。
- ADF 检验的原假设是序列存在单位根(即非平稳),检验的结果给出是否拒绝该假设。
3. 白噪声与随机游走模型
白噪声:
- 白噪声是一个均值为零、方差为常数的时间序列,序列的自相关函数为零(除了滞后为零时的点)。白噪声模型的特性可以用来检测时间序列模型的残差是否为白噪声,以判断模型是否充分捕捉了数据的模式。白噪声的公式表示为:
其中:
- 表示均值为 0、方差为 的白噪声过程。
随机游走模型:
- 随机游走是一种特殊的非平稳时间序列模型,序列值等于前一时刻的值加上一个随机误差项。随机游走模型可以用来模拟一些金融时间序列,如股票价格。随机游走模型的一般形式为:
其中:
- 是时间 ttt 的序列值。
- 是时间 的序列值。
- 是独立且同分布的随机误差项,通常假设为均值为 0 的白噪声。
二、实战案例
我们将使用 statsmodels
库对时间序列数据进行 ACF 和 PACF 的计算及可视化,并进行平稳性检验。
1. 数据加载与可视化
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.stattools import acf, pacf, adfuller
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf# 加载时间序列数据集
url = "https://raw.githubusercontent.com/jbrownlee/Datasets/master/airline-passengers.csv"
data = pd.read_csv(url, parse_dates=['Month'], index_col='Month')# 绘制时间序列图
plt.figure(figsize=(12, 6))
plt.plot(data['Passengers'], label='Passengers')
plt.title('Monthly Number of Airline Passengers')
plt.xlabel('Date')
plt.ylabel('Number of Passengers')
plt.legend()
plt.grid(True)
plt.show()
运行结果:
程序解释:
- 载入航空乘客数据集,并绘制时间序列图,观察数据的趋势、季节性等特征。
2. ACF 和 PACF 计算与可视化
# 计算并绘制 ACF 和 PACF
plt.figure(figsize=(12, 6))
plt.subplot(121)
plot_acf(data['Passengers'], lags=40, ax=plt.gca())
plt.title('Autocorrelation Function (ACF)')plt.subplot(122)
plot_pacf(data['Passengers'], lags=40, ax=plt.gca(), method='ywm')
plt.title('Partial Autocorrelation Function (PACF)')plt.tight_layout()
plt.show()
运行结果:
程序解释:
- 使用
plot_acf
和plot_pacf
函数计算并绘制自相关函数 (ACF) 和偏自相关函数 (PACF),帮助识别数据中的相关性结构。
3. 平稳性检验(ADF 检验)
# 进行 ADF 平稳性检验
result = adfuller(data['Passengers'])
print('ADF Statistic:', result[0])
print('p-value:', result[1])
for key, value in result[4].items():print(f'Critical Value ({key}): {value}')
运行结果:
ADF Statistic: 0.8153688792060597
p-value: 0.9918802434376411
Critical Value (1%): -3.4816817173418295
Critical Value (5%): -2.8840418343195267
Critical Value (10%): -2.578770059171598
程序解释:
- 使用
adfuller
函数进行 ADF 检验,判断时间序列是否平稳。 - 检验结果包括 ADF 统计量、p 值、临界值(分别对应 1%、5%、10% 的显著性水平)。
4. 白噪声测试
# 白噪声测试
white_noise = np.random.normal(size=len(data))
plt.figure(figsize=(12, 6))
plot_acf(white_noise, lags=40)
plt.title('ACF of White Noise')
plt.show()
运行结果:
程序解释:
- 生成一个白噪声序列,并绘制其自相关函数,展示白噪声的特性(即除了滞后为零时外,其他滞后期的自相关系数应接近于零)。
三、结果分析
1. 时间序列的趋势与季节性
- 从时间序列图中可以观察到航空乘客数量随时间逐步增加,并且存在周期性波动,这种趋势和季节性特征提示了序列的非平稳性。
2. ACF 和 PACF 的分析
- ACF 图通常在滞后为 0 时有较高的相关性,随着滞后时间的增加,自相关性逐渐减弱。如果序列是非平稳的,ACF 图通常会显示出较长的拖尾(长滞后期依然有较高的自相关性)。
- PACF 图用于识别自回归模型 (AR) 的阶数,通过观察第一个显著的滞后点可以帮助选择合适的 AR 阶数。
3. ADF 检验结果分析
- 在本例中,ADF 检验的 p 值非常高,说明我们不能拒绝原假设,即序列是非平稳的。这与我们从图表观察到的趋势和季节性相一致。
- 对于非平稳时间序列,可以考虑通过差分、去趋势等方法进行平稳化处理。
4. 白噪声测试
- 白噪声序列的 ACF 图应该在所有滞后期都接近于零,说明这些值之间没有相关性。白噪声模型通常用于检测时间序列模型是否充分捕捉了数据中的模式。如果模型的残差是白噪声,则模型通常被认为是合理的。
通过这些分析和可视化,我们对时间序列的基本统计量有了深入的理解,这为后续的时间序列建模和预测打下了基础。在未来的学习中,我们将利用这些统计工具来构建和评估更复杂的时间序列模型。