Vygenerujeme dáta - ide o biely šum posunutý o konštantu, takže má nulové autokorelácie.
N <- 250 # pocet dat
set.seed(12345) # aby sme mali rovnake vysledky
x <- rnorm(N, mean = 10, sd = 1) # nezavisle N(10, 1)
Zobrazte priebeh vygenerovaných dát
Zobrazte odhadnutú autokorelačnú funkciu:
Otázky:
Akú hypotézu vieme pomocou tohto výstupu testovať pre každú autokoreláciu?
Kedy sa táto nulová hypotéza zamieta?
Čo dostávame v našom prípade?
Testujte Ljung-Boxovym testom hypotézu, že autokorelácie rádu 1, 2, 3 sú súčasne nulové.
##
## Box-Ljung test
##
## data: x
## X-squared = 0.93263, df = 3, p-value = 0.8175
Otázky:
Ako sa vypočíta testovacia štatistika?
Aké je pravdepodobnostné rozdelenie štatistiky za platnosti nulovej hypotézy?
Pre aké hodnoty štatistiky sa hypotéza zamieta?
Ako sa vypočíta p-hodnota?
Čo dostávame v našom prípade?
V cykle vypocítajte p-hodnoty zodpovedajúce testovaniu hypotézy, že prvých \(k\) autokorelácií je súcasne nulových. Výsledok znázornite graficky, zobrazte získané p hodnoty a hranicu 0.05.
Oplatí sa nastaviť y-ovú os na interval (0, 1), aby bol skript univerzálny pre všetky dáta, aby sa vždy (aj pri vysokých p hodnotách) dala vidieť vyznačená hodnota 0.05, s ktorou p hodnoty porovnávame.
Pomocou knižnice quantmod
načítame priamo do R-ka ceny akcií a zistíme, či sú korelované alebo nie.
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("EBAY", from = "2019-01-01", to = "2019-12-31", auto.assign = TRUE)
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
##
## This message is shown once per session and may be disabled by setting
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## [1] "EBAY"
Pozrime sa, ako vyzerajú naše dáta, ktoré sú uložené v premennej EBAY
, zobrazíme ich začiatok:
head(EBAY)
## EBAY.Open EBAY.High EBAY.Low EBAY.Close EBAY.Volume
## 2019-01-02 27.65 28.96 27.56 28.85 11190300
## 2019-01-03 28.63 28.82 28.28 28.32 10803900
## 2019-01-04 28.60 29.08 28.33 28.97 14593700
## 2019-01-07 28.96 29.65 28.93 29.47 13419400
## 2019-01-08 29.74 30.08 29.40 30.00 8179700
## 2019-01-09 29.99 30.40 29.74 30.29 10607500
## EBAY.Adjusted
## 2019-01-02 28.10551
## 2019-01-03 27.58919
## 2019-01-04 28.22241
## 2019-01-07 28.70951
## 2019-01-08 29.22583
## 2019-01-09 29.50835
Napríklad:
chartSeries(EBAY)
Skúste aj:
chartSeries(EBAY, subset="2019-01::2019-03") # od januara do marca
EBAY.mesacne <- to.monthly(EBAY) # mesacne data
EBAY.mesacne # vypiseme
chartSeries(EBAY.mesacne) # graf
## EBAY.Open EBAY.High EBAY.Low EBAY.Close EBAY.Volume EBAY.Adjusted
## jan 2019 27.65 34.75 27.56 33.65 343616600 32.78165
## feb 2019 33.75 38.02 33.63 37.15 210230900 36.32666
## mar 2019 38.36 39.14 35.51 37.14 252316300 36.31688
## apr 2019 37.41 38.80 35.44 38.75 211328500 37.89120
## máj 2019 38.78 38.94 35.59 35.93 176656800 35.27049
## jún 2019 35.85 40.55 35.45 39.50 194738300 38.77495
## júl 2019 39.97 42.00 38.93 41.19 176600700 40.43393
## aug 2019 41.36 41.99 38.54 40.29 147930100 39.68753
## sep 2019 40.05 41.41 38.10 38.98 138279000 38.39713
## okt 2019 38.99 39.47 35.13 35.25 161549500 34.72290
## nov 2019 35.50 36.53 34.52 35.52 148552500 35.12603
## dec 2019 35.45 36.52 34.46 35.80 156143800 35.40293
Z týchto dát EBAY
budeme potrebovať posledný stĺpec (EBAY.Adjusted
), z ktorého vypočítame výnosy. Budeme pracovať zo spojitými výnosmi, teda denné výnosy sa budú počítať ako logaritmus podielu cien v dvoch po sebe idúcich dňoch. Ekvivalentne:
ceny <- EBAY$EBAY.Adjusted
vynosy <- diff(log(ceny))
Priebeh výnosov:
chartSeries(vynosy, theme="white")
Zistite, či sú výnosy firmy EBAY nekorelované. Použite výberovú autokorelačnú funkciu a Ljung-Boxov test.
Knižnica quantmod
má veľa rôznych funkcií, môžete sa o nich dočítať na https://www.quantmod.com/
Napríklad ak poznáte Moving Average Convergence/Divergence Oscillator (MACD) (http://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_average_convergence_divergence_macd), dá sa získať aj v R-ku. Použijeme už načítané dáta, ktoré sú uložené v premennej EBAY
:
chartSeries(EBAY)
addMACD()
R markdown bol použitý aj na vytvorenie tejto stránky priamo v R-ku, takisto na vytvorenie slajdov k prednáške.
R markdown: http://rmarkdown.rstudio.com/
Konkrétne HTML dokumenty: https://bookdown.org/yihui/rmarkdown/html-document.html
Užitočný môže byť aj interaktívny notebook: https://bookdown.org/yihui/rmarkdown/notebook.html