在本文中,我將介紹ARMA,ARIMA(Box-Jenkins),SARIMA和ARIMAX模型如何用于預(yù)測給定的時間序列數(shù)據(jù)。
我們可以使用backshift運(yùn)算符來執(zhí)行計(jì)算。例如,后軸運(yùn)算符可用于計(jì)算的時間序列值的滯后差異?y經(jīng)由yi?Bk(yi),?i∈k+1,…,tyi?Bk(yi),?i∈k+1,…,t其中kk表示的差異滯后。對于k=1k=1,我們獲得普通的成對差異,而對于k=2k=2我們獲得相對于前任先前的成對差異。讓我們考慮R中的一個例子。
使用R,我們可以使用diff
函數(shù)計(jì)算滯后差異。函數(shù)的第二個參數(shù)表示所需的滯后kk,默認(rèn)設(shè)置為k=1k=1。例如:
By <- diff(y) # y_i - B y_i
B3y <- diff(y, 3) # y_i - B^3 y_i
message(paste0("y is: ", paste(y, collapse =
## y is: 1,3,5,10,20
## By is: 2,2,5,10
## B^3y is: 9,17
要計(jì)算自相關(guān),我們可以使用以下R函數(shù):
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
# correlation of measurements 2 time points apart (lag 2)
get_autocor(y, 2)
## [1] 0.9819805
數(shù)據(jù)的高度自相關(guān)表明數(shù)據(jù)具有明確的時間趨勢。
由于觀察到較大滯后的自相關(guān)可以是較低滯后的相關(guān)結(jié)果,因此通常值得考慮部分自相關(guān)函數(shù)(pACF)。pACF的想法是計(jì)算部分相關(guān)性,這種相關(guān)性決定了對變量的最近觀察的相關(guān)性。pACF定義為:
φkk:=Corr(yt,yt?k|yt?1,?,yt?k+1)k=0,1,2,?φkk:=Corr?(yt,yt?k|yt?1,?,yt?k+1)k=0,1,2,?
使用pACF可以識別是否存在實(shí)際滯后的自相關(guān)或這些自相關(guān)是否是由其他測量引起的。
計(jì)算和繪制ACF和pACF的最簡單方法是分別使用acf
和pacf
函數(shù):
par(mfrow = c(1,2))
acf(y) # conventional ACF
pacf(y) # pACF
在ACF可視化中,ACF或pACF被繪制為滯后的函數(shù)。指示的水平藍(lán)色虛線表示自相關(guān)顯著的水平。
StSt
TtTt
?t?t
執(zhí)行分解的方式取決于時間序列數(shù)據(jù)是加法還是乘法。
加法模型假設(shè)數(shù)據(jù)可以分解為
yt?=?St?+?Tt?+??t.yt?=?St?+?Tt?+??t.
另一方面,乘法模型假設(shè)數(shù)據(jù)可以被分解為
添加劑:每個時期的季節(jié)效應(yīng)放大器相似。
乘法:季節(jié)性趨勢隨時間序列的變化而變化。
AirPassengers
數(shù)據(jù)集提供了乘法時間序列的示例。
data(AirPassengers)
plot(AirPassengers)
log(StTt?t)=log(St)+log(Tt)+log(?t)log?(StTt?t)=log?(St)+log?(Tt)+log?(?t)
AirPassengers
數(shù)據(jù)集:
plot(log(AirPassengers))
正如我們所看到的,采用對數(shù)已經(jīng)使季節(jié)性成分的幅度沿時間均衡。請注意,總體增長趨勢沒有改變。
要分解R中的時間序列數(shù)據(jù),我們可以使用該decompose
函數(shù)。請注意,我們應(yīng)該通過type
參數(shù)提供時間序列是加法的還是乘法的。
對于AirPassengers
數(shù)據(jù)集,我們指定數(shù)據(jù)是乘法的并獲得以下分解:
plot(decompose(AirPassengers, type = "multiplicative"))
分解表明,多年來航空公司乘客總數(shù)在增加。此外,我們已經(jīng)觀察到的季節(jié)性影響已被清楚地捕捉到。
讓我們考慮可以為EuStockMarkets
數(shù)據(jù)集找到的分解:
daxData <- EuStockMarkets[, 1] # DAX data# data do not seem to be multiplicative, use additive decomposition
decomposed <- decompose(daxData, type = "additive")
plot(decomposed)
該圖顯示了1992年至1998年的DAX數(shù)據(jù)中的以下內(nèi)容:
整體價(jià)值穩(wěn)步上升。
季節(jié)性趨勢強(qiáng)烈:每年年初,股價(jià)相對較低,并在夏季結(jié)束時達(dá)到相對最大值。
除1997年和1998年之間的最終測量外,隨機(jī)噪聲的貢獻(xiàn)可以忽略不計(jì)。
生成時間序列數(shù)據(jù)的過程可以是平穩(wěn)的也可以是非平穩(wěn)的。例如,數(shù)據(jù)EuStockMarkets
和AirPassengers
數(shù)據(jù)都是非平穩(wěn)的,因?yàn)閿?shù)據(jù)有增加的趨勢。為了更好地區(qū)分平穩(wěn)和非平穩(wěn)過程,請考慮以下示例:
par(mfrow = c(1,2))
data(nino)
x <- nino3.4
plot(x, main = "Stationary process")
plot(AirPassengers, main = "Non-stationary process")
左圖顯示了一個平穩(wěn)過程,其中數(shù)據(jù)在所有測量中表現(xiàn)相似。右圖顯示了一個非平穩(wěn)過程,其中平均值隨著時間的推移而增加。
介紹了與時間序列數(shù)據(jù)分析相關(guān)的最重要概念后,我們現(xiàn)在可以開始研究預(yù)測模型。
ARMA代表自回歸移動平均線。ARMA模型僅適用于平穩(wěn)過程,并具有兩個參數(shù):
p:自回歸(AR)模型的順序
q:移動平均(MA)模型的順序
ARMA模型可以指定為
使用以下變量:
cc
?t?ttt?t~N(0,σ2)?t~N(0,σ2)
?∈Rp?∈Rp
ytyttt
θ∈Rqθ∈Rq
?t?ttt
使用backshift運(yùn)算符,我們可以通過以下方式制定ARMA模型:
?p(B)=1?∑pi=1?iBi?p(B)=1?∑i=1p?iBiθq(B)=1?∑qj=1θjBjθq(B)=1?∑j=1qθjBj
?p(B)yt=θq(B)?t.?p(B)yt=θq(B)?t.
總之,ARIMA模型具有以下三個參數(shù):
p:自回歸(AR)模型的順序
d:差異程度
q:移動平均(MA)模型的順序
在ARIMA模型中,通過將替換差異,將結(jié)果轉(zhuǎn)換為差異ytyt
(1?B)dyt.(1?B)dyt.
然后通過指定模型
?p(B)(1?B)dyt=θq(B)?t.?p(B)(1?B)dyt=θq(B)?t.
d=0d=0(1?B)0yt=yt(1?B)0yt=ytdd
(1?B)1yt(1?B)2yt=yt?yt?1=(1?2B+B2)yt=yt?2yt?1+yt?2(1?B)1yt=yt?yt?1(1?B)2yt=(1?2B+B2)yt=yt?2yt?1+yt?2
在下文中,讓我們考慮ARIMA模型的三個參數(shù)的解釋。
p∈N0p∈N0d=0d=0Byt=yt?1Byt=yt?1?1?1yt?1yt?1yt?2yt?2?1?1?2?2
p=1p=1d=0d=0q=0q=0
y^t=μ?t+?1yt?1y^t=μ?t+?1yt?1
我們可以使用該arima.sim
函數(shù)模擬自回歸過程。通過該功能,可以通過提供要使用的MA和AR項(xiàng)的系數(shù)來指定模型。在下文中,我們將繪制自相關(guān)圖,因?yàn)樗钸m合于發(fā)現(xiàn)自回歸的影響。
第一個例子表明,對于ARIMA(1,0,0)過程,訂單1的pACF非常高,而對于ARIMA(2,0,0)過程,訂單1和訂單2自相關(guān)都很重要。因此,可以根據(jù)pACF顯著的最大滯后來選擇AR項(xiàng)的順序。
ARIMA(0,1,0)模型簡化為隨機(jī)游走模型
y^t=μ+?t+yt?1.y^t=μ+?t+yt?1.
以下示例演示了差異對AirPassengers
數(shù)據(jù)集的影響:
雖然第一個圖表顯示數(shù)據(jù)顯然是非靜止的,但第二個圖表明差異時間序列是相當(dāng)靜止的。
其中當(dāng)前估計(jì)值取決于先前測量值的殘差。
可以通過繪制自回歸函數(shù)來研究移動平均線的影響:
請注意,對于自回歸圖,我們需要注意第一個x軸位置表示滯后為0(即標(biāo)識向量)。在第一個圖中,只有第一個滯后的自相關(guān)是顯著的,而第二個圖表明前兩個滯后的自相關(guān)是顯著的。為了找到MA術(shù)語的數(shù)量,適用與AR術(shù)語類似的規(guī)則:MA術(shù)語的順序?qū)?yīng)于自相關(guān)顯著的最大滯后。
為了確定哪個更合適,AR或MA術(shù)語,我們需要考慮ACF(自相關(guān)函數(shù))和PACF(部分ACF)。使用這些圖我們可以區(qū)分兩個簽名:
pp
rr
AR和MA術(shù)語的組合導(dǎo)致以下時間序列數(shù)據(jù):
P:季節(jié)性自回歸(SAR)項(xiàng)的數(shù)量
D:季節(jié)差異程度
問:季節(jié)性移動平均線(SMA)的數(shù)量
auto.arima
forecast
ppddqqPPDDQQstepwise
approximation
FALSE
我們將使用數(shù)據(jù)展示ARMA的使用,該數(shù)據(jù)tseries
給出了Nino Region 3.4指數(shù)的海面溫度。讓我們驗(yàn)證數(shù)據(jù)是否靜止:
d=0d=0
為了驗(yàn)證是否存在任何季節(jié)性趨勢,我們將分解數(shù)據(jù):
沒有整體趨勢,這是平穩(wěn)過程的典型趨勢。但是,數(shù)據(jù)存在強(qiáng)烈的季節(jié)性因素。因此,我們肯定希望包含對季節(jié)性影響進(jìn)行建模的參數(shù)。
(P,D,Q)S(P,D,Q)SD=0D=0
nino
S=12S=12
P=2P=2Q=0Q=0
我們可以使用包中的Arima
函數(shù)來擬合模型forecast
。
我們現(xiàn)在可以使用該模型來預(yù)測未來Nino 3.4地區(qū)的氣溫如何變化。有兩種方法可以從預(yù)測模型中獲得預(yù)測。第一種方法依賴于predict
函數(shù),而第二種方法使用包中的forecast
函數(shù)forecast
。使用該predict
功能,我們可以通過以下方式預(yù)測和可視化結(jié)果:
#
# Attaching package: 'ggplot2'## The following object is masked from 'package:forecast':
#
# autolayer
如果我們不需要自定義繪圖,我們可以使用以下forecast
函數(shù)更輕松地獲取預(yù)測和相應(yīng)的可視化:
forecast <- forecast(A, h = 60) # 預(yù)測未來5年
plot(forecast)
為了演示ARIMA模型對非平穩(wěn)數(shù)據(jù)的使用,我們將使用數(shù)據(jù)集astsa
。該數(shù)據(jù)集提供全球平均陸地 - 海洋溫度偏差的年度測量值。
d=1d=1
p=0p=0q=1q=1
我們現(xiàn)在可以預(yù)測未來幾年平均陸地 - 海洋溫度偏差將如何變化:
該模型表明,未來幾年平均陸地 - 海洋溫度偏差將進(jìn)一步增加。
為了展示ARIMAX模型的使用,我們將使用臭氧數(shù)據(jù)集 。
讓我們加載臭氧數(shù)據(jù)集并將其劃分為測試和訓(xùn)練集。請注意,我們已確保訓(xùn)練和測試數(shù)據(jù)包含連續(xù)的時間測量。
由于數(shù)據(jù)集未指示相對時間點(diǎn),我們將手動創(chuàng)建此類注釋:
為此,我們將在臭氧數(shù)據(jù)集中創(chuàng)建一個新列,該列反映了相對時間點(diǎn):
現(xiàn)在我們有了時間維度,我們可以繪制臭氧水平的縱向行為:
時間序列數(shù)據(jù)似乎是平穩(wěn)的。讓我們考慮ACF和pACF圖,看看我們應(yīng)該考慮哪些AR和MA術(shù)語
自相關(guān)圖非常不清楚,這表明數(shù)據(jù)中實(shí)際上沒有時間趨勢。因此,我們會選擇ARIMA(0,0,0)模型。由于具有參數(shù)(0,0,0)的ARIMAX模型沒有傳統(tǒng)線性回歸模型的優(yōu)勢,我們可以得出結(jié)論,臭氧數(shù)據(jù)的時間趨勢不足以改善臭氧水平的預(yù)測。讓我們驗(yàn)證一下:
print(Rsquared.linear)
## [1] 0.7676977print(Rsquared.temporal)
## [1] 0.7569718
我們可以看到具有負(fù)二項(xiàng)式可能性的線性模型優(yōu)于ARIMAX模型。
要在更合適的數(shù)據(jù)集上演示ARIMAX模型,讓我們加載數(shù)據(jù)集:
該Icecream
數(shù)據(jù)集包含以下變量:
缺點(diǎn):人均品脫的冰淇淋消費(fèi)量。
收入::美元平均每周家庭收入。
價(jià)格:每品脫冰淇淋的價(jià)格。
temp:華氏溫度的平均溫度。
測量結(jié)果是從1951-03-18到1953-07-11的四周觀測。
我們將模擬缺點(diǎn),冰淇淋消費(fèi)作為時間序列,并使用收入,價(jià)格和平均值作為外生變量。在開始建模之前,我們將從數(shù)據(jù)框中創(chuàng)建一個時間序列對象。
我們現(xiàn)在調(diào)查數(shù)據(jù):
因此,數(shù)據(jù)有兩種趨勢:
總體而言,1951年至1953年間,冰淇淋的消費(fèi)量大幅增加。
冰淇淋銷售在夏季達(dá)到頂峰。
由于季節(jié)性趨勢,我們可能適合ARIMA(1,0,0)(1,0,0)模型。但是,由于我們知道溫度和外生變量的收入,因此它們可以解釋數(shù)據(jù)的趨勢:
由于income
解釋了整體趨勢,我們不需要漂移術(shù)語。此外,由于temp
解釋了季節(jié)性趨勢,我們不需要季節(jié)性模型。因此,我們應(yīng)該使用ARIMAX(1,0,0)模型進(jìn)行預(yù)測。為了研究這些假設(shè)是否成立,我們將使用以下代碼將ARIMAX(1,0,0)模型與ARIMA(1,0,0)(1,0,0)模型進(jìn)行比較
ARIMAX(1,0,0)模型的預(yù)測顯示為藍(lán)色,而ARIMA(1,0,0)(1,0,0)模型的預(yù)測顯示為虛線。實(shí)際觀察值顯示為黑線。結(jié)果表明,ARIMAX(1,0,0)明顯比ARIMA(1,0,0)(1,0,0)模型更準(zhǔn)確。
但請注意,ARIMAX模型在某種程度上不像純ARIMA模型那樣有用于預(yù)測。這是因?yàn)?,ARIMAX模型需要對應(yīng)該預(yù)測的任何新數(shù)據(jù)點(diǎn)進(jìn)行外部測量。例如,對于冰淇淋數(shù)據(jù)集,我們沒有超出1953-07-11的外生數(shù)據(jù)。因此,我們無法使用ARIMAX模型預(yù)測超出此時間點(diǎn),而ARIMA模型可以實(shí)現(xiàn):
如果您有任何疑問,請?jiān)谙旅姘l(fā)表評論。
聯(lián)系客服