1. 自相关
1.1 自相关定义
自相关(也叫自相关函数,ACF)是用来度量时间序列中某个时刻的值与它前一时刻值之间的相关性的统计量。它揭示了序列内在的时间依赖关系。简单来说,自相关告诉我们当前的数据点与之前的数据点之间是否有相似性或关联性。
1.2 自相关的计算方法
自相关的计算一般使用自相关函数(AFC),对于时间序列 的自相关计算公式为:
2. 偏自相关
2.1 偏自相关的定义
偏自相关(PACF)是一个衡量时间序列中滞后项之间关系的统计量,但它不同于自相关,因为它排除了时间序列中其他滞后项的影响。偏自相关度量的是在已知前面某些滞后值(例如,滞后 1、滞后 2 等)后,当前时刻与某个特定滞后时刻之间的相关性。换句话说,它告诉我们两个时间点之间的“直接”关系,而不是通过其他滞后期的间接影响。
为什么需要偏自相关?
当分析时间序列时,序列的当前值不仅可能与前一个时刻的值相关,还可能与多个前面的时刻有关系。例如,当前的股票价格不仅可能与昨天的价格相关,也可能与前两天、前三天的价格相关。然而,在许多情况下,后面的滞后期对当前值的影响已经被前面的滞后期所解释。因此,偏自相关的作用就是在剔除掉这些间接影响后,给出每个滞后期的“净”影响。
2.2 偏自相关计算方法
偏自相关的计算比自相关要复杂一些。自相关函数(ACF)衡量的是两个时间点之间的线性相关性,而偏自相关函数(PACF)则是在控制了其他滞后项影响的情况下,计算两个时间点之间的相关性。
3、基于此,笔者原创并整理了基于ACF和PACF的python代码两个版本,质量优异,适合学习,配备数据集哦。
版本1:
版本2:
详细代码:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
from statsmodels.tsa.stattools import adfuller, acf, pacf
# 正常显示画图时出现的中文和负号
from pylab import mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
import statsmodels.tsa.api as smt
#计算自相关和偏自相关系数
data=pd.read_csv("西安市-RF降维后.csv")
df=data['PM10']
# tsa是Time Series analysis缩写
# tsa的stattools(统计工具)提供了计算acf和pacf以及后面要用到的adfuller单位根检验函数
# 使用help(smt.stattools.acf)可以查看相关参数设置
# 计算自相关系数,这里设置滞后项为5期,默认是40期滞后
#acf = smt.stattools.acf(df, nlags=5)
# 计算偏自相关系数
#pacf = smt.stattools.pacf(df, nlags=5)
#print(f'自相关系数为:{acf};\n偏自相关系数为:{pacf}')
# 绘制时间序列图
plt.figure(figsize=(10, 4))
plt.plot(df)
plt.title('Time Series')
plt.show()
# 计算并绘制自相关函数 (ACF)
acf_values = acf(df, nlags=20)
plt.figure(figsize=(10, 4))
plt.stem(range(len(acf_values)), acf_values)
plt.title('Autocorrelation Function (ACF)')
plt.xlabel('Lag')
plt.ylabel('ACF')
plt.show()
# 计算并绘制偏自相关函数 (PACF)
pacf_values = pacf(df, nlags=20)
plt.figure(figsize=(10, 4))
plt.stem(range(len(pacf_values)), pacf_values)
plt.title('Partial Autocorrelation Function (PACF)')
plt.xlabel('Lag')
plt.ylabel('PACF')
plt.show()
#对于数据集、版本2有兴趣的朋友,欢迎关注笔者V公众号:年轻的战场ssd