Úlohu vypracováva každý samostatne alebo v dvojici. Komunikácia ohľadom riešenia, zdieľanie kódu a pod. je zakázané. Pri odpísaní úlohy alebo jej časti je DÚ hodnotená 0 bodmi, a to aj pre tých, ktorí úlohu odpísali aj pre tých, ktorí ju dali odpísať.
Úlohu posielajte elektronicky na adresu beata.ulohy@gmail.com s predmetom CR 2019 - DU1 - priezvisko/priezviská Podľa neho sa maily automaticky triedia, preto tento formát treba dodržať.
Body za DÚ dostanete mailom. V prípade, že úlohu riešite v skupine, pri odovzdávaní pošlite kópiu mailu aj ostatným členom skupiny, aby aj oni dostali informáciu o hodnotení, keď ju budem posielať pomocou reply all. Ak to nespravíte, je vašou - nie mojou - úlohou informovať kolegov o bodoch.
Posielajte vypracovanú úlohu v pdf formáte (súvislý, dobre čitateľný text doplnený grafmi, nie iba výstupy z R so stručnými poznámkami) a použitý kód ako samostatný súbor.
V druhom príklade pracuje s inými dátami, rezervácia dát na stránke (píšte svoje meno/mená a názov akcie, neuvádzajte svoj e-mail) http://www.websitegoodies.com/guestbook.php?a=view&id=1735405
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)
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:
Ú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?
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
).
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.
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
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: