原文链接:http://tecdat.cn/?p=5919
在本文中,我将介绍ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型如何用于预测工夫序列数据。
应用滞后算子计算滞后差分
咱们能够应用backshift滞后算子来执行计算。例如,滞后算子可用于计算的工夫序列值的滞后差分,
其中k示意的差分滞后期。对于k=1,咱们取得一般的差分,而对于k=2咱们取得绝对于一阶的差分。让咱们思考R中的一个例子。
应用R,咱们能够应用diff
函数计算滞后差分。函数的第二个参数示意所需的滞后k,默认设置为k=1。例如:
By <- diff(y) # y\_i - B y\_iB3y <- diff(y, 3) # y\_i - B^3 y\_imessage(paste0("y is: ", paste(y, collapse =
## y is: 1,3,5,10,20## By is: 2,2,5,10## B^3y is: 9,17
自相干函数
滞后k的自相干定义为:
要计算自相干,咱们能够应用以下R函数:
get_autocor <- function(x, lag) { x.left <- x\[1:(length(x) - lag)\] x.right <- x\[(1+lag):(length(x))\] autocor <- cor(x.left, x.right) return(autocor)}
get_autocor(y, 1) ## \[1\] 0.9944627# 相隔2个工夫点(滞后期2)测量值的相关性get_autocor(y, 2)## \[1\] 0.9819805
数据的高度自相干表明数据具备明确的工夫趋势。
偏自相干
因为察看到较大滞后的自相干能够是较低滞后的相干后果,因而通常值得思考偏自相干函数(pACF)。pACF的想法是计算偏相关性,这种相关性决定了对变量的最近察看样本的相关性。pACF定义为:
应用pACF能够辨认是否存在理论滞后的自相干或这些自相干是否是由其余样本引起的。
计算和绘制ACF和pACF的最简略办法是别离应用acf
和pacf
函数:
par(mfrow = c(1,2))acf(y) # ACFpacf(y) # pACF
在ACF可视化中,ACF或pACF被绘制为滞后的函数。批示的程度蓝色虚线示意自相干显著的程度。
合成工夫序列数据
- St
- Tt
- t
执行合成的形式取决于工夫序列数据是加法还是乘法。
加法和乘法工夫序列数据
加法模型假如数据能够合成为
另一方面,乘法模型假如数据能够被合成为
- 加法:每个期间的节令效应类似。
- 乘法:季节性趋势随工夫序列的变动而变动。
AirPassengers
数据集提供了乘法工夫序列的示例。
data(AirPassengers)plot(AirPassengers)
AirPassengers
数据集:
plot(log(AirPassengers))
正如咱们所看到的,采纳对数曾经使季节性成分的变动平衡。请留神,总体增长趋势没有扭转。
在R中合成工夫序列数据
要合成R中的工夫序列数据,咱们能够应用该decompose
函数。请留神,咱们应该通过type
参数提供工夫序列是加法的还是乘法的。
示例1:AirPassengers数据集
对于AirPassengers
数据集,咱们指定数据是乘法的并取得以下合成:
plot(decompose(AirPassengers, type = "multiplicative"))
合成表明,多年来航空公司乘客总数在减少。此外,咱们曾经察看到的季节性影响已被分明地捕捉到。
示例2:EuStockMarkets数据集
让咱们思考能够EuStockMarkets
数据集的合成:
daxData <- EuStockMarkets\[, 1\] #数据仿佛不是可乘的,请应用加法合成decomposed <- decompose(daxData, type = "additive")plot(decomposed)
该图显示了1992年至1998年的DAX数据中的以下内容:
- 整体价格稳步回升。
- 季节性趋势强烈:每年年初,股价绝对较低,并在冬季完结时达到绝对最大值。
- 除1997年和1998年之间的最终测量外,随机噪声的影响能够忽略不计。
安稳与非安稳过程
生成工夫序列数据的过程能够是安稳的也能够是非安稳的。 例如,数据EuStockMarkets
和AirPassengers
数据都是非安稳的,因为数据有减少的趋势。为了更好地区分安稳和非安稳过程,请思考以下示例:
par(mfrow = c(1,2))#data(nino)x <- nino3.4plot(x, main = "Stationary process")# 飞机旅客数据plot(AirPassengers, main = "Non-stationary process")
左图显示了一个安稳过程,其中数据在所有测量中体现类似。右图显示了一个非安稳过程,其中平均值随着工夫的推移而减少。
介绍了与工夫序列数据分析相干的最重要概念后,咱们当初能够开始钻研预测模型。
ARMA模型
ARMA代表自回归挪动均匀模型。ARMA模型仅实用于安稳过程,并具备两个参数:
- p:自回归(AR)模型的阶数
- q:挪动均匀(MA)模型的阶数
应用backshift运算符制订ARMA模型
应用backshift运算符,咱们能够通过以下形式制订ARMA模型:
通过定义和,ARMA模型简化为。
ARIMA模型
总之,ARIMA模型具备以下三个参数:
- p:自回归(AR)模型的阶数
- d:差分阶数
- q:挪动均匀(MA)模型的阶数
在ARIMA模型中,通过将替换差分,将后果转换为差分yt
而后通过指定模型
在下文中,让咱们思考ARIMA模型的三个参数的解释。
自回归的影响
咱们能够应用该arima.sim
函数模仿自回归过程。通过该函数,能够通过提供要应用的MA和AR项的系数来指定模型。在下文中,咱们将绘制自相干图,因为它最适宜于发现自回归的影响。
第一个例子表明,对于ARIMA(1,0,0)过程,阶数1的pACF十分高,而对于ARIMA(2,0,0)过程,阶数1和阶数2自相干都很重要。因而,能够依据pACF显着的最大滞后来抉择AR项的阶数。
差分的影响
ARIMA(0,1,0)模型简化为随机游走模型
以下示例演示了差分对AirPassengers
数据集的影响:
尽管第一个图表显示数据显然是非安稳的,但第二个图表明差分工夫序列是相当安稳的。
其中以后估计值取决于先前测量值的残差。
挪动均匀MA的影响
能够通过绘制自回归函数来钻研挪动均匀的影响:
请留神,对于自回归图,咱们须要留神第一个x轴地位示意滞后为0(即标识向量)。在第一个图中,只有第一个滞后的自相干是显着的,而第二个图表明前两个滞后的自相干是显着的。为了找到MA的阶数,实用与AR相似的规定:MA的阶数对应于自相干显着的最大滞后期。
在AR和MA之间进行抉择
为了确定哪个更适合,AR或MA,咱们须要思考ACF(自相干函数)和PACF(偏ACF)。
AR和MA的影响
AR和MA的组合失去以下工夫序列数据:
SARIMA模型
- P:季节性自回归(SAR)项的阶数
- D:节令差分阶数
- q:季节性挪动平均线(SMA)的阶数
ARIMAX模型
R中的预测
auto.arima
`forecast`
SARIMA模型用于安稳过程
咱们将应用数据展现ARMA的应用,该数据tseries
给出了Nino Region 3.4指数的海面温度。让咱们验证数据是否安稳:
d=0
为了验证是否存在任何季节性趋势,咱们将合成数据:
没有整体趋势,这是安稳过程的典型趋势。然而,数据存在强烈的季节性因素。因而,咱们必定心愿蕴含对季节性影响进行建模的参数。
季节性模型
对于季节性模型,咱们须要指定额定的参数参数(P,D,Q)S。因为季节性趋势在工夫序列数据中不占主导地位,咱们将设置D=0。此外,因为尼诺数据中的季节性趋势是一种年度趋势,咱们能够设置S=12个月。为了确定季节性模型的其余参数,咱们思考季节性成分的图。
咱们设置P=2 Q=0
非季节性模型
对于非季节性模型,咱们须要找到p和q。为此,咱们将绘制ACF和pACF来确定AR和MA参数的值。
咱们能够应用包中的Arima
函数来拟合模型forecast
。
咱们当初能够应用该模型来预测将来Nino 3.4地区的气温如何变动。有两种办法能够从预测模型中取得预测。第一种办法依赖于predict
函数,而第二种办法应用包中的forecast
函数。应用该predict
性能,咱们能够通过以下形式预测和可视化后果:
## ## Attaching package: 'ggplot2'## The following object is masked from 'package:forecast':## ## autolayer
如果咱们不须要自定义绘图,咱们能够应用以下forecast
函数轻松地获取预测和相应的可视化:
# 应用内置绘图性能:forecast <- forecast(A, h = 60) # 预测将来5年plot(forecast)
用于非安稳数据的ARIMA模型
为了演示ARIMA模型对非安稳数据的应用,咱们将应用数据集astsa
。该数据集提供寰球均匀海洋 - 陆地温度偏差的年度测量值。
d=1
p=0q=1
咱们当初能够预测将来几年均匀海洋 - 陆地温度偏差将如何变动:
该模型表明,将来几年均匀海洋 - 陆地温度偏差将进一步减少。
对于空气质量数据集的ARIMAX
为了展现ARIMAX模型的应用,咱们将应用臭氧数据集 。
让咱们加载臭氧数据集并将其划分为测试和训练集。请留神,咱们已确保训练和测试数据蕴含间断的工夫测量。
为此,咱们将在臭氧数据集中创立一个新列,该列反映了绝对工夫点:
当初咱们有了工夫维度,咱们能够绘制臭氧程度:
工夫序列数据仿佛是安稳的。让咱们思考ACF和pACF图,看看咱们应该思考哪些AR和MA
自相干图十分不分明,这表明数据中实际上没有工夫趋势。因而,咱们会抉择ARIMA(0,0,0)模型。因为具备参数(0,0,0)的ARIMAX模型没有传统线性回归模型的劣势,咱们能够得出结论,臭氧数据的工夫趋势不足以改善臭氧程度的预测。让咱们验证一下:
print(Rsquared.linear)## \[1\] 0.7676977
``````print(Rsquared.temporal)
``````## \[1\] 0.7569718
咱们能够看到具备负二项式概率线性模型优于ARIMAX模型。
对于空气质量数据集的ARIMAX
要在更适合的数据集上演示ARIMAX模型,让咱们加载数据集:
该Icecream
数据集蕴含以下变量:
- 生产:冰淇淋消费量。
- 支出:均匀每周家庭收入。
- 价格:每个冰淇淋的价格。
- temp:华氏温度的平均温度。
测量后果是从1951-03-18到1953-07-11的周围观测。
咱们将模仿生产,冰淇淋生产作为工夫序列,并应用_支出_,_价格_和_平均值_作为外生变量。在开始建模之前,咱们将从数据框中创立一个工夫序列对象。
咱们当初考察数据:
因而,数据有两种趋势:
- 总体而言,1951年至1953年间,冰淇淋的消费量大幅减少。
- 冰淇淋销售在冬季达到高峰。
因为季节性趋势,咱们可能拟合ARIMA(1,0,0)(1,0,0)模型。然而,因为咱们晓得温度和外生变量的支出,因而它们能够解释数据的趋势:
income
解释了整体趋势。此外,temp
解释了季节性趋势,咱们不须要季节性模型。因而,咱们应该应用ARIMAX(1,0,0)模型进行预测。为了钻研这些假如是否成立,咱们将应用以下代码将ARIMAX(1,0,0)模型与ARIMA(1,0,0)(1,0,0)模型进行比拟
ARIMAX(1,0,0)模型的预测显示为蓝色,而ARIMA(1,0,0)(1,0,0)模型的预测显示为虚线。理论察看值显示为黑线。结果表明,ARIMAX(1,0,0)显著比ARIMA(1,0,0)(1,0,0)模型更精确。
但请留神,ARIMAX模型在某种程度上不像纯ARIMA模型那样有用于预测。这是因为,ARIMAX模型须要对应该预测的任何新数据点进行内部预测。例如,对于冰淇淋数据集,咱们没有超出1953-07-11的外生数据。因而,咱们无奈应用ARIMAX模型预测超出此工夫点,而ARIMA模型能够实现:
如果您有任何疑难,请在上面发表评论。
最受欢迎的见解
1.在python中应用lstm和pytorch进行工夫序列预测
2.python中利用长短期记忆模型lstm进行工夫序列预测剖析
3.应用r语言进行工夫序列(arima,指数平滑)剖析
4.r语言多元copula-garch-模型工夫序列预测
5.r语言copulas和金融工夫序列案例
6.应用r语言随机稳定模型sv解决工夫序列中的随机稳定
7.r语言工夫序列tar阈值自回归模型
8.r语言k-shape工夫序列聚类办法对股票价格工夫序列聚类
9.python3用arima模型进行工夫序列预测