时间序列(二)
实践中选择模型
通过p、d、q决定需要的模型
ARIMA模型的公式可以表示为:
Y t = c + φ 1 Y t − 1 + φ 2 Y t − 2 + … + φ p Y t − p + θ 1 ϵ t − 1 + θ 2 ϵ t − 2 + … + θ q ϵ t − q + ϵ t Y_t=c+\varphi_1Y_{t-1}+\varphi_2Y_{t-2}+\ldots+\varphi_pY_{t-p}+\theta_1\epsilon_{t-1}+\theta_2\epsilon_{t-2}+\ldots+\theta_q\epsilon_{t-q}+\epsilon_t Yt=c+φ1Yt−1+φ2Yt−2+…+φpYt−p+θ1ϵt−1+θ2ϵt−2+…+θqϵt−q+ϵt
在 时间序列(一)中我们已经提到过,ARIMA模型中的三个参数p、q、d分别代表的含义是:p和q分别控制ARIMA模型中自回归和移动平均的部分,而d则控制输入ARIMA模型的数据被执行的差分的阶数。可以简单理解为:
ARIMA(p,d,q) | 模型类型 | 模型解释 |
---|---|---|
ARIMA(0,d,0) | 随机游走模型或白噪声模型 | 当d=1时,是随机游走模型;当d=0时,是白噪声模型 |
ARIMA(0,d,q) | MA模型或IMA模型 | 当d=0时,是MA(q)模型;当d≠0时,是IMA(d,q)模型 |
ARIMA(p,d,0) | AR模型或ARIMA模型 | 当d=0时,是AR模型;当d≠0时,是ARIMA(p,d,0)模型 |
ARIMA(p,d,q) | ARMA模型或ARIMA模型 | 当d=0时,是ARMA(p, q)模型;当d≠0时,是ARIMA(p,d,q)模型 |
模型解释:
1、AR模型(Autoregressive Model):自回归模型,它将当前值与过去p个值的线性组合进行比较。
2、MA模型(Moving Average Model):移动平均模型,它将当前值与过去q个误差项的线性组合进行比较。
3、ARMA模型(Autoregressive Moving Average Model):自回归移动平均模型,它是AR模型和MA(q)模型的组合。
4、ARIMA模型(Autoregressive Integrated Moving Average Model):自回归积分移动平均模型,它是ARMA(p, q)模型的扩展,增加了差分的步骤,使得非平稳序列变得平稳。
5、IMA模型(Integrated Moving Average Model):积分移动平均模型,它是MA(q)模型的扩展,增加了差分的步骤,使得非平稳序列变得平稳。
超参数p的确定
对于AR模型,ACF会展现出拖尾的形式,而PACF则在p阶后突然截尾。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 参数
ar = np.array([1, -0.5, -0.4])
ma = np.array([1])
# 生成AR(2)过程
ar2_process = ArmaProcess(ar, ma)
ar2_sample = ar2_process.generate_sample(nsample=1000)
# 绘制ACF和PACF
plt.figure(figsize=(12,8))
plt.subplot(211)
plot_acf(ar2_sample, ax=plt.gca())
plt.subplot(212)
plot_pacf(ar2_sample, ax=plt.gca())
plt.show()
对任意时间序列,当ACF图像呈现拖尾、且PACF图像呈现截尾状态时,当前时间序列适用AR模型,且PACF截尾的滞后阶数就是超参数p的理想值,如图(此图适用模型:AR,超参数q和p分别为0,2):
超参数q的确定
对于MA模型,ACF在q阶后突然截尾,而PACF则呈现拖尾的形式
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima_process import ArmaProcess
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 定义MA模型的参数
ar = np.array([1])
ma = np.array([1, 0.5, 0.7])
np.random.seed(1)
# 创建ARMA模型
arma_process = ArmaProcess(ar, ma)
sample = arma_process.generate_sample(nsample=1000)
# 绘制ACF和PACF图
plt.figure(figsize=(12,8))
plt.subplot(211)
plot_acf(sample, ax=plt.gca(), lags=30)
plt.subplot(212)
plot_pacf(sample, ax=plt.gca(), lags=30)
plt.show()
对任意时间序列,当PACF图像呈现拖尾、且ACF图像呈现截尾状态时,当前时间序列适用MA模型,且ACF截尾的滞后阶数就是超参数q的理想值
对于MA模型,PACF的拖尾可能不会很明显,这主要是因为在实际的样本数据中,PACF可能会受到噪声的影响。不过,在理论上,MA(q)模型的PACF应该在q阶后展现出拖尾的特性。
一般情况下如何确定p和q
如果我们有一个纯随机(也称为白噪声)序列,那么它的自相关和部分自相关应该都是接近零的。这就是所谓的“不截尾,几乎没有显著的值”的情况。我们可以用numpy来生成这样一个序列。
import numpy as np
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
import matplotlib.pyplot as plt
np.random.seed(0)
random_series = np.random.normal(size=1000)
plt.figure(figsize=(12,8))
plt.subplot(211)
plot_acf(random_series, ax=plt.gca())
plt.subplot(212)
plot_pacf(random_series, ax=plt.gca())
plt.show()
对任意时间序列,当ACF图像和PACF图像都呈现不呈现拖尾状态时,无论图像是否截尾,时间序列都适用于ARIMA模型,且此时ACF和PACF图像无法帮助我们确定p和q的具体值,但能确认p和q一定都不为0。
总的来说,ACF和PACF图像可以给我们一些关于应该使用什么类型的模型(AR、MA还是ARIMA)以及可能的p和q值的初步想法。然而,它们不能给我们绝对的答案,因为在实际数据中可能存在一些噪声和复杂性,这就需要我们使用一些模型选择准则(如AIC和BIC)来帮助我们选择最好的模型。
标签:plot,plt,模型,实践,ARIMA,PACF,应用,序列,import From: https://blog.csdn.net/ss20211121/article/details/136787750