Pre nego sto teorijski i prakticno objasnimo i prikazemo ARMA modele prisetimo se nekih stvari sa prethodnih casova. Pogledajmo neke primere vremenskih serija(sve vremenske serije sa nalaze u paketu astsa):
Ova vremenska serija predstavlja zaradu po akciji kvartalno gledano. Vremenska serija ima 84 kvartala, odnosno podaci su sakupljeni kroz 21 godinu. Serija pocinje od prvog kvartala 1960. godine do poslednjeg kvartala 1980. godine.
plot(jj, main = "Johnson & Johnson", type = "c")
text(jj, labels = 1:4, col = 1:4)
Vremenska serija ima neke karakteristicne i vrlo ceste osobine za ovakvu vrstu podataka. Serija ima trend (rastuci), sezonsku komponentu i drugi i treci kvartal su obicno visoki dok je 4 kvartal nizak. Ova serija ima i osobinu heteroskedasticnosti sto znaci da kako raste vrednost akcija tako procentualno male razlike postaju velike razlike po apsolutnoj vrednosti.
Ova serija predstavlja odstupanja od godisnjih temperatura (iz perioda 1951-1980) u periodu 1880-2015 godine.
plot(globtemp, main = "Global temperature deviations", type = "o")
Primeticemo da serija ima relativno pozitivan trend, ali vidimo da trend nije uvek pozitivan. Za raziku od Johnson & Johnson serije ova serija nema sezonsku komponentu.
plot(sp500w, main = "S&P 500", type = "c")
Za razliku od prethodne dve serije ova serija nema ni trend ni sezonsku komponentu. Zapravo, uocavamo da ova serija nema nikakav obrazac “ponasanja”, osim da je s vremena na vreme disperzija velika. Ova je primer posebne vrste procesa koji se naziva sum ( noise ).
Regresija: \(Y_{i}=\beta X_{i} + \epsilon_{i}\), pri cemu je \(\epsilon_{i}\) beli sum
AutoRegresija (AR): \(X_{t}=\phi X_{t-1}+\epsilon_{t}\) (\(\epsilon_{t}\) je beli sum)
Obicno su podaci iz vremenskih serija korelisani i pretpostvljati da greske nisu korelisane moglo bi da dovede do gresaka u predvidjanju. Jedan od nacina da se ovaj problem resi je da se koristi metoda pokretnih proseka za greske modela.
Moving average (MA): \(\epsilon_{t}=W_{t}+\theta W_{t-1}\), (\(W_{t}\) je beli sum).
Sklapanje i razumevanje svega pomenutog nas dovodi da ARMA modela. Drugim recima, model ARMA je autoregresija sa autokorelisanim greskama.
ARMA: \(X_{t}=\phi X_{t-1}+W_{t}+\theta W_{t-1}\)
U kontekstu vremenskih serija stacionarnost predstavlja konstantnost srednje vrednosti. Kazemo da je vremenska serija stabilna ako je srednja vrednost konstanta (odnosno da nema trenda) i da je korelaciona struktura podataka iz serije konstantna tokom vremena.
Vremenska serija globtemp nije stacionarna kao sto smo videli. Ali diferenciranje ove serije dovodi do stacionarnosti.
par(mfrow=c(2,1))
plot(globtemp, main = "globtemp")
plot(diff(globtemp), main = "diff(globtemp)")
U slucaju da postoji i trend i heteroskedasticnost, kao kod Johnson&Johnson serije, logaritmovanje pa diferenciranje dace nam stacionarnu vremensku seriju. Prvo logaritmovanje stabilizuje disperziju, a zatim ce diferenciranje ukloniti trend.
par(mfrow=c(3,1))
plot(jj, main="J&J")
plot(log(jj), main="log(J&J)")
plot(diff(log(jj)), main="diff(log(J&J))")
ARMA(p, q) procesi su stacionarni procesi koji se mogu zapisati u obliku
\(x_{t}-\mu = \phi_{1}(x_{t-1}-\mu)+ ... +\phi_{p}(x_{t-p}-\mu)+ \omega_{t}+ \theta_{1} \omega_{t-1}+ ... + \theta_{q} \omega_{t-q}\)
gde su \(\phi_{p}\neq 0, \theta_{q}\neq0\), a \(\omega_{t}\) je beli sum. Vrednost \(\mu\) predstavlja srednju vrednost procesa i ako se uvede oznaka \(\alpha=\mu(1-\phi_{1}-...-\phi_{p})\) prethodna jednakost se svodi na
\(x_{t}= \alpha+ \phi_{1}x_{t-1}+ ... +\phi_{p}x_{t-p}+ \omega_{t}+ \theta_{1} \omega_{t-1}+ ... + \theta_{q} \omega_{t-q}\)
AR i MA modeli su specijalan slucaj ARMA modela. S obzirom da smo na prethodnim casovima definisali AR i MA polinome, ARMA model se moze zapisati kao
\(\Phi(B)x_{t}=\Theta(B)\omega_{t}\)
ARMA model je kauzalan ako se moze zapisati kao bekonacni MA model, dok je ARMA model invertibilan ako se moze zapisati kao beskonacni AR model. Pre nego sto se zapocne ispitivanje invertibilnosti i kauzalnosti ARMA modela bitno je proveriti redudantnost parametara. Moze da se desi da AR i MA polinomi imaju iste faktore. Kada se dobije jednacina nekog ARMA modela i treba da se ispita koji je model u pitanju, najpre treba proveriti AR i MA polinome i ako oni imaju zajednican faktor-skratiti ga! Ukoliko to ne uradimo desava se da pogresno prepoznamo model tj. da neki jednostavni model prepoznamo kao neki znatno komplikovaniji.
Kazemo da je ARMA(p,q) model kauzalan ako se moze zapisati kao linearan proces
\(x_{t}=\Psi(B)\omega_{t}\), gde je \(\Psi(B)=\sum_{j=0}^{\infty}\psi_{j}B^{j}\) i \(\sum_{j=o}^{\infty}\mid\psi_{j}\mid<\infty\), \(\psi_{0}=1\). Ovo vazi kada su svi koreni AR polinoma \(\Psi(B)\) veci od 1 po normi.
Kazemo da je ARMA(p,q) model invertibilan ako se moze zapisati kao
\(\omega_{t}=\pi(B)x_{t}\), gde je \(\pi(B)=\sum_{j=0}^{\infty}\pi_{j}B^{j}\) i \(\sum_{j=o}^{\infty}\mid\pi_{j}\mid<\infty\), \(\pi_{0}=1\). Ovo vazi kada su svi koreni AR polinoma \(\Phi(B)\) veci od 1 po normi.
Odgovor na to zasto je validno koristiti ARMA model za stacionarne vremenske serije dao je Herman Wold koji je pokazao da se svaki stacionarni model moze prestaviti kao linearna kombinacija belih sumova. Takodje se moze pokazati da je ARMA model takodje linearna kombinacija belih sumova. R kao sto vec znamo da pruza vrlo lak nacin da simuliramo ARMA modele arima.sim().
arima.sim(model, n,..)
arima.sim(list(order=c(p ,d, q)))
Generisemo MA(1) model \(X_{t}=W_{t}-0.9W_{t-1}\)
x=arima.sim(list(order=c(0, 0, 1), ma=0.9), n=100)
plot(x)
Generisemo AR(2) model \(X_{t}=-0.9X_{t-2}+W_{t}\)
x=arima.sim(list(order=c(2, 0, 0), ar=c(0, -0.9)), n=100)
plot(x)
Generisemo ARMA(2,1) model
x=arima.sim(list(order=c(2, 0, 1), ar=c(0, -0.9), ma=0.9), n=100)
plot(x)
Kako da prepoznamo u koji ARMA model da uklopimo seriju?
Kao sto vidimo AR(2) i MA(1) na grafiku izgledaju vrlo slicno. Jasno je da se samo na grafika vremenske serije ne moze prepoznati koji je model u pitanju. Moraju se posmatrati ACF i PACF funkcije. Pogledajmo sta se desava u slucaju AR(2) modela
## ACF PACF
## [1,] 0.01 0.01
## [2,] -0.89 -0.89
## [3,] -0.01 0.03
## [4,] 0.78 -0.02
## [5,] 0.01 -0.02
## [6,] -0.69 -0.03
## [7,] -0.01 0.00
## [8,] 0.63 0.04
## [9,] 0.01 0.04
## [10,] -0.57 -0.02
## [11,] -0.02 0.02
## [12,] 0.51 0.00
## [13,] 0.02 0.00
## [14,] -0.46 0.03
## [15,] 0.00 0.06
## [16,] 0.41 0.01
## [17,] 0.00 0.02
## [18,] -0.38 -0.04
## [19,] 0.01 0.03
## [20,] 0.34 -0.04
## [21,] -0.03 -0.07
## [22,] -0.30 -0.01
## [23,] 0.04 -0.04
## [24,] 0.27 -0.03
## [25,] -0.04 0.03
## [26,] -0.23 0.05
## [27,] 0.05 0.05
## [28,] 0.19 0.01
## [29,] -0.05 0.03
## [30,] -0.16 0.02
## [31,] 0.05 0.03
## [32,] 0.14 0.00
## [33,] -0.06 -0.01
MA(1) model
## ACF PACF
## [1,] 0.46 0.46
## [2,] -0.06 -0.36
## [3,] -0.05 0.23
## [4,] -0.05 -0.23
## [5,] -0.06 0.13
## [6,] -0.05 -0.15
## [7,] -0.07 0.03
## [8,] -0.08 -0.10
## [9,] -0.02 0.07
## [10,] 0.05 0.00
## [11,] 0.13 0.15
## [12,] 0.10 -0.10
## [13,] -0.01 0.06
## [14,] 0.04 0.06
## [15,] 0.08 0.01
## [16,] 0.01 -0.01
## [17,] -0.05 -0.03
## [18,] -0.08 -0.05
## [19,] -0.09 -0.01
## [20,] -0.04 -0.01
## [21,] -0.04 -0.07
## [22,] -0.07 -0.04
## [23,] 0.00 0.07
## [24,] 0.04 -0.06
## [25,] 0.02 0.04
## [26,] 0.00 -0.10
## [27,] -0.04 0.02
## [28,] -0.03 -0.03
## [29,] -0.07 -0.09
## [30,] -0.10 -0.01
## [31,] -0.05 -0.01
## [32,] 0.01 0.04
## [33,] 0.01 -0.02
U dole prikazanom kodu uporedicemo MA(1), AR(1) i ARMA(1,1) modele. Ovi modeli su poredjeni na osnovi AIC. Ispostavlja se se da je najbolji model ARMA(1,1), pa zatim model AR(1) i najlosiji model je MA(1).
MA(1), AR(1) I ARMA(1,1) modeli
x.ma <- arima(x.ts, order = c(0, 0, 1))
x.ar <- arima(x.ts, order = c(1, 0, 0))
x.arma <- arima(x.ts, order = c(1, 0, 1))
AIC(x.ma)
## [1] -3.526895
AIC(x.ar)
## [1] -37.40417
AIC(x.arma)
## [1] -42.27357
x.arma
##
## Call:
## arima(x = x.ts, order = c(1, 0, 1))
##
## Coefficients:
## ar1 ma1 intercept
## 0.8925 0.5319 2.9597
## s.e. 0.0759 0.2021 0.2435
##
## sigma^2 estimated as 0.01505: log likelihood = 25.14, aic = -42.27
acf(resid(x.arma))#reziduali imaju male autokorelacije
Kao sto vidimo na korelogramu reziduali ARMA(1,1) modela imaju male autokorelacije, sto se poklapa sa sa realizacijom belog suma i time se opravdava koriscenje ovog modela.
Razmotrimo sad seriju korisecnu na drugom casu vezbi, seriju o proizvodnji elektricne energije u Australiji. Vidimo da serija ima pozitivan trend i sezonsku komponentu. Dodatno i disprezija vremenom raste, sto nam sugerise da je potrebno izvrsiti log-transformaciju.
www <- "http://www.math.rs/p/files/1550577090-70-cbe.txt"
CBE <- read.table(www, header = T)
Elec.ts <- ts(CBE[, 3], start = 1958, freq = 12)
plot(Elec.ts)
Time <- 1:length(Elec.ts)
Imth <- cycle(Elec.ts)
Elec.lm <- lm(log(Elec.ts) ~ Time + I(Time^2) + factor(Imth))
acf(resid(Elec.lm))
Cini se da korelogram reziduala ima ciklus sa periodom od 12 meseci. Ovakve situacije mogu da se dogode kada se koristi nestacionarni model kada je pristuna sezonska komponenta. O ovome ce se diskutovati na nekim sledecim vezbama.
Da bismo pronasli najbolji ARMA model mozemo da isprobavamo razlicite vrednosti za p i q pa zatim da poredimo modele na osnovu AIC(uzimamo model koji ima najmanji AIC). Ili mozemo da koristimo for petlju gde cemo tako da isprobavamo vrednosti. Postavicemo da p i q idu najdalje do vrednosti 2, poredimo modele na osnovu AIC i cuvamo onaj koji ima najmanji AIC.
best.order <- c(0, 0, 0)
best.aic <- Inf
for (i in 0:2) for (j in 0:2) {
fit.aic <- AIC(arima(resid(Elec.lm), order = c(i, 0, j)))
if (fit.aic < best.aic) {
best.order <- c(i, 0, j)
best.arma <- arima(resid(Elec.lm), order = best.order)
best.aic <- fit.aic }
}
Date su razlike u vrednosti nivoa vode u sredini bunara koje su posledica simulatora talasa. Merenja su vrsena na svakih 0.1s i poslednji trenutak je 39.7s. Nas cilj je da podatke uklopimo u najbolji ARMA model. Pogedajmo seriju, acf i pacf.
www <- "http://www.math.rs/p/files/1551218509-70-wave.txt"
wave.dat <- read.table(www, header = T)
attach (wave.dat)
layout(1:3)
plot (as.ts(waveht), ylab = 'Wave height')
acf (waveht)
pacf (waveht)
Grafik pacf nam sugerise da p treba da bude najmanje 2. Isprobavanjem razlicitih vrednosti za p i q ispostavlja se da najbolji model ARMA(p,q) se dobija kada se za p i q uzme vrednost 4. ACF i PACF reziduala modela se poklapaju sa time da su reziduali realizacija belog suma.
wave.arma <- arima(waveht, order = c(4,0,4))
acf (wave.arma$res[-(1:4)])
pacf (wave.arma$res[-(1:4)])
hist(wave.arma$res[-(1:4)], xlab='mm')