Pokyny

Hodnotenie

Príklad 1: modelovanie prietoku rieky Níl

Budeme pracovať s dátami Nile z knižnice datasets. Podľa popisu v dokumentácii: Measurements of the annual flow of the river Nile at Aswan (formerly Assuan), 1871–1970, in 10^8 m^3. Z nich zoberieme dáta z rokov 1901-1950.

library(datasets)
y <- window(Nile, start=1901, end=1950)
plot(y)

Autokorelácie procesu

acf(y, plot = FALSE, lag.max = 10)
## 
## Autocorrelations of series 'y', by lag
## 
##      0      1      2      3      4      5      6      7      8      9 
##  1.000  0.149 -0.031 -0.223 -0.379 -0.195  0.054  0.009  0.174 -0.068 
##     10 
## -0.106

Úloha A. Pomocou týchto zaokrúhlených hodnôt testujte Ljung-Boxovým testom hypotézu, že prvé tri autokorelácie tohto časového radu sú nulové. Odpovedzte na nasledujúce otázky:

  • Napíšte hodnotu testovacej štatistiky.
  • Napíšte kritickú hodnotu tohto testu na 5-percentnej hladine významnosti.
  • Zamietame nulovú hypotézu alebo nie?

Úloha B. Pomocou funkcie Box.test (teda už pomocou dát, nie horeuvedených zaokrúhlených hodnôt ACF) testujte Ljung-Boxovým testom hypotézu, že prvých K autokorelácií, je nulových, postupne pre K rovné 1, 2, …, 10. Pre kontrolu uveďte minimálnu a maximálnu p-hodnotu, ktorá sa v týchto testoch dosiahla.

Úloha C. Môžeme tieto dáta považovať za biely šum posunutý o konštantu? Prečo?

ARMA model

Pre dáta v premennej y odhadneme AR(2) model a vypíšeme odhadnuté koeficienty.

library(astsa)
m <- sarima(y, 2, 0, 0, details = FALSE)
m$fit$coef
##          ar1          ar2        xmean 
##   0.15578244  -0.05504351 841.21450599

Úloha D. Zapíšte model v tvare \[y_t = \delta + \alpha_1 y_{t-1} + \alpha_2 y_{t-2} + u_t\] a ukážte, že je stacionárny - napíšte polynóm, ktorého korene budete počítať, číslené hodnoty koreňov, ich absolútne hodnoty a čo z nich vyplýva

Úloha E.
Nájdite vhodný model pre tieto dáta a vysvetlite, prečo ste spokojní s rezíduami. Vypočítajte predikcie pre nasledujúci rok a vypočítajte percentuálnu chybu (teda čomu sa rovná 100*(predikcia – skutočnosť)/skutočnosť), skutočná hodnota je v časovom rade Nile).

Príklad 2: Výnosy akcií a testovanie bieleho šumu

Pomocou knižnice quantmod načítame priamo do R-ka ceny akcií a zistíme, či sa ich výnosy dajú modelovať ako biely šum.

Ako pracovať s knižnicou quantmod

Načítajte (ak treba, aj nainštalujte) knižnicu quantmod.

library(quantmod)

Na získanie cien akcií sa použije funkcia getSymbols, napríklad:

getSymbols(Symbols = "AMZN", 
           from = "2017-01-01", to = "2018-12-31",
           auto.assign = TRUE)
## [1] "AMZN"

Takto získame údaje o akciách firmy AMAZON (AMZN) v rokoch 2017 a 2018. Parameter auto.assign = TRUE spôsobí, že sa nám vytvorí objekt AMZN, ktorý obsahuje tieto dáta. Pozrime sa, ako vyzerajú naše dáta, zobrazíme ich začiatok:

head(AMZN)
##            AMZN.Open AMZN.High AMZN.Low AMZN.Close AMZN.Volume
## 2017-01-03    757.92    758.76   747.70     753.67     3521100
## 2017-01-04    758.39    759.68   754.20     757.18     2510500
## 2017-01-05    761.55    782.40   760.26     780.45     5830100
## 2017-01-06    782.36    799.44   778.48     795.99     5986200
## 2017-01-09    798.00    801.77   791.77     796.92     3446100
## 2017-01-10    796.60    798.00   789.54     795.90     2558400
##            AMZN.Adjusted
## 2017-01-03        753.67
## 2017-01-04        757.18
## 2017-01-05        780.45
## 2017-01-06        795.99
## 2017-01-09        796.92
## 2017-01-10        795.90

Môžeme kresliť grafy, napríklad:

chartSeries(AMZN)

Naše dáta sú denné, ak chceme pracovať s inou frekvenciou, dajú sa upraviť napríklad na mesačné:

AMZN.mesacne <- to.monthly(AMZN)
head(AMZN.mesacne)
##          AMZN.Open AMZN.High AMZN.Low AMZN.Close AMZN.Volume AMZN.Adjusted
## jan 2017    757.92    843.84   747.70     823.48    70614000        823.48
## feb 2017    829.21    860.86   803.00     845.04    71748300        845.04
## mar 2017    853.05    890.35   833.50     886.54    60710700        886.54
## apr 2017    888.00    949.59   884.49     924.99    73539700        924.99
## máj 2017    927.80   1001.20   927.80     994.62    76202000        994.62
## jún 2017    998.59   1017.00   927.00     968.00    96135400        968.00
chartSeries(AMZN.mesacne) 

V domácej úlohe budeme pracovať s výnosmi. Z dát AMZN budeme potrebovať posledný stĺpec (AMZN.Adjusted), z ktorého vypočítame logritmické výnosy.

ceny <- AMZN$AMZN.Adjusted
vynosy <- diff(log(ceny))

Priebeh výnosov:

chartSeries(vynosy, theme = "white")  # tentokrát zvolime typ grafu `white`

Treba si uvedomiť, že prvá hodnota premennej vynosy je NA, takže pred ďalšími výpočtami je potrebné ju odstrániť.

head(vynosy)
##            AMZN.Adjusted
## 2017-01-03            NA
## 2017-01-04   0.004646413
## 2017-01-05   0.030269695
## 2017-01-06   0.019715919
## 2017-01-09   0.001167666
## 2017-01-10  -0.001280696

Zadanie domácej úlohy

Zvoľte si firmu (každý, resp. každá skupina inú) a stiahnite si ceny akcií tejto firmy za zvolené obdobie, minimálne za jeden rok. Trasformujte dáta na týždenné a vypočítajte logaritmické výnosy. Testujte pomocou ACF a Ljung-Boxovho testu, že tieto výnosy sa dajú modelovať ako konštanta (stredná hodnota výnosov - tá na autokorelácie nemá vplyv) plus biely šum.

V texte domácej úlohe uveďte:

  • Názov zvolenej firmy a krátku informáciu o tejto firme
  • Graf priebehu cien akcie a výnosov
  • Výberovú autokorelačnú funkciu výnosov a jej interpretáciu.
  • Výsledky Ljung-Boxovho testu pre hodnoty lagu od 1 až po zvolenú hornú hranicu. P hodnoty znázornite graficky ako na cvičení, spolu s porovnaním s hodnotou 0.05. Interpretujte výsledky.
  • Zhodnotenie modelu: Považujete model “výnosy sú konštanta (t. j. priemerný výnos) plus biely šum” za dobrý model pre vaše dáta? Prečo?