机器学习——时间序列ARIMA模型(四):自相关函数ACF和偏自相关函数PACF用于判断ARIMA模型中p、q参数取值

1、自相关函数ACF

自相关函数反映了同一序列在不同时序的取值之间的相关性。

公式:
A C F ( k ) = ρ k = C o v ( y t , y t − k ) V a r ( y t ) ACF(k)=\rho_{k}=\frac{Cov(y_{t},y_{t-k})}{Var(y_{t})} ACF(k)=ρk=Var(yt)Cov(yt,ytk)
其中分子用于求协方差矩阵,分母用于计算样本方差。求出的ACF值为[-1,1]。

但对于一个平稳的AR模型,求出其滞后值的自相关系数后,得到的并不是x(t)与x(t-k)之间单纯的相关关系,其中掺杂了其他随机变量的影响

2、偏自相关函数PACF

偏自相关系数PACF是严格这两个变量(现值和滞后值)之间的相关性,剔除了中间随机变量的干扰。

3、ARIMA(p,d,q)的阶数判断

image-20220511114114878

q看ACF,p看PACF,d看差分阶数

4、代码实现

1、引入所需依赖

%matplotlib inline
import pandas as pd
import datetime
import matplotlib.pylab as plt
import warnings
import seaborn as sns
import statsmodels
from matplotlib.pylab import style
from statsmodels.tsa.arima_model import ARIMA
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf

style.use('ggplot')   
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False 

2、数据读取与处理

还是读取道琼斯数据集,这里就不再说啦,这次以周为单位。

详情请看机器学习——时间序列ARIMA模型(三):AR、MA、ARMA、ARIMA模型定义及公式介绍及股价预测案例代码_天海一直在的博客-CSDN博客

stockFile = 'data2000_2021.csv'
stock = pd.read_csv(stockFile, index_col=0, parse_dates=[0])#将索引index设置为时间,parse_dates对日期格式处理为标准格式。
stock.head(10)
stock_week = stock['close'].resample('W').mean()
stock_train = stock_week['2000':'2019']

3、一阶差分与绘图

stock_train.plot(figsize=(9,5))
plt.legend(bbox_to_anchor=(1.25, 0.5))
plt.title("Stock Close")
sns.despine()
#一阶差分
stock_diff = stock_train.diff()
stock_diff = stock_diff.dropna()
plt.figure()
plt.plot(stock_diff)
plt.title('一阶差分')
plt.show()

4、ACF

acf = plot_acf(stock_diff, lags=20)
plt.title("ACF")
acf.show()

image-20220511115846637

置信区间内q取1,后面突出的两点判断为离群奇异值不管

5、PACF

pacf = plot_pacf(stock_diff, lags=20)
plt.title("PACF")
pacf.show()

image-20220511115616494

在p取9时后面衰减趋于0且在置信区间内,所以p取9
后续可以根据BIC贝叶斯信息准则来验证,结果和此判断一致。

  • 12
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
确定ARIMA模型的对应参数可以使用自相关函数ACF)和自相关函数PACF)分析时序数据的相关性和部分相关性。 在Python,可以使用statsmodels库来计算ACFPACF。下面是一个示例代码,展示如何使用ACFPACF确定ARIMA模型参数: ```python import pandas as pd import numpy as np import statsmodels.api as sm import matplotlib.pyplot as plt # 读取数据 data = pd.read_csv('data.csv', parse_dates=['date'], index_col='date') # 绘制时序数据图 plt.figure(figsize=(10, 6)) plt.plot(data) plt.xlabel('Date') plt.ylabel('Value') plt.title('Time series data') plt.show() # 计算ACFPACF acf = sm.tsa.stattools.acf(data, nlags=20) pacf = sm.tsa.stattools.pacf(data, nlags=20) # 绘制ACFPACF图 plt.figure(figsize=(10, 6)) plt.subplot(211) plt.plot(acf) plt.axhline(y=0, linestyle='--', color='gray') plt.axhline(y=-1.96/np.sqrt(len(data)), linestyle='--', color='gray') plt.axhline(y=1.96/np.sqrt(len(data)), linestyle='--', color='gray') plt.title('Autocorrelation Function') plt.xlabel('Lags') plt.ylabel('ACF') plt.subplot(212) plt.plot(pacf) plt.axhline(y=0, linestyle='--', color='gray') plt.axhline(y=-1.96/np.sqrt(len(data)), linestyle='--', color='gray') plt.axhline(y=1.96/np.sqrt(len(data)), linestyle='--', color='gray') plt.title('Partial Autocorrelation Function') plt.xlabel('Lags') plt.ylabel('PACF') plt.tight_layout() plt.show() ``` 在上面的代码,我们首先读取了时序数据,并绘制了其图形。然后,使用`sm.tsa.stattools.acf()`和`sm.tsa.stattools.pacf()`函数计算了ACFPACF。最后,使用`plt.plot()`函数绘制了ACFPACF图形。 ACF图显示了时序数据在不同滞后值下的自相关性。在ACF,如果滞后值为k,则y轴上的值表示数据在k个时间单位之后与当前数据的相关性。PACF图显示了时序数据在不同滞后值下的部分相关性。 通过观察ACFPACF图,我们可以根据以下规则选择ARIMA模型参数: - AR模型:如果ACF图在滞后值为k时截尾,并且PACF图在滞后值为k时存在峰值,则选择AR(k)模型。 - MA模型:如果PACF图在滞后值为k时截尾,并且ACF图在滞后值为k时存在峰值,则选择MA(k)模型。 - ARMA模型:如果ACF图和PACF图都在滞后值为k时截尾,则选择ARMA(k)模型。 在选择模型参数后,可以使用`sm.tsa.ARIMA()`函数来拟合ARIMA模型,并使用`predict()`函数进行预测。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天海一直在AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值