Pre určité dáta bol Ljung-Boxovým testom získaný nasledovný výstup:
##
## Box-Ljung test
##
## data: x
## X-squared = 4.638, df = 5, p-value = 0.4616
## [1] 1.0000 0.0442 -0.0935 -0.1079 0.1401 0.0450 -0.1186 0.0539 -0.0361
Malý rozdiel vo výsledku môže vzniknúť kvôli tomu, že výpočty robíme so zaokrúhlenými hodnotami.
Cieľom je zrekonštruovať grafický výstup na strane 44 (dáta sú generované na strane 43) slajdov z prednášky: (http://www.iam.fmph.uniba.sk/institute/stehlikova/cr23/prednasky/cr01_uvod.pdf)
Použijeme pritom dva postupy:
Príklad použitia funkcie sapply:
# sucet 1^2 + 2^2 + ... + k^2
k <- 1:10
sapply(k, FUN = function(n) sum((1:n)^2))
## [1] 1 5 14 30 55 91 140 204 285 385
# sucet 1^p + 2^p + ... + k^p
k <- 1:10
sapply(k, FUN = function(n, p) sum((1:n)^p), p = 2)
## [1] 1 5 14 30 55 91 140 204 285 385
V našom prípade:
Použité dáta môžu byť:
FUN
(analógia druhého vzorového príkladu)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.
Zopakujte predchádzajúci výpočet pre dáta o prietokoch Nílu z prednášky (str. 46) a interpretujte výsledky.
x <- window(Nile, start = 1905)
plot(x, ylab = "Nile")
quantmod
Načítajte (ak treba, aj nainštalujte) balík quantmod
.
library(quantmod)
Na získanie cien akcií sa použije funkcia getSymbols
, napríklad:
getSymbols("EBAY", from = "2022-01-01", to = "2022-12-31")
## [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 EBAY.Adjusted
## 2022-01-03 66.45 67.12 65.66 66.80 6685500 64.45943
## 2022-01-04 67.17 67.42 64.44 65.14 7527300 62.85760
## 2022-01-05 64.87 66.27 64.46 64.49 7440700 62.23037
## 2022-01-06 64.14 67.49 64.08 66.81 8218400 64.46908
## 2022-01-07 66.73 67.33 66.28 66.32 5000900 63.99626
## 2022-01-10 65.72 66.33 63.72 64.57 6684000 62.30756
chartSeries(EBAY)
chartSeries(EBAY, theme="white")
chartSeries(EBAY, subset="2022-01::2022-03") # od januara do marca
EBAY.mesacne <- to.monthly(EBAY) # mesacne data
chartSeries(EBAY.mesacne) # graf
Budeme pracovať s výnosmi akcií. Z našich 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 - ako rozdiel logaritmov (takto sa dá použiť funkcia diff
na výpočet diferencií).
ceny <- EBAY$EBAY.Adjusted
vynosy <- diff(log(ceny))
chartSeries(vynosy, theme="white")
Zadanie: Zobrazte odhad ACF. Sú autokorelácie signifikantné? Pomocou Ljung-Boxovho testu testujte hypotézu, že výnosy sú nekorelované (teda že sú súčtom konštanty - priemerný výnos - a bieleho šumu).
Vygenerujme dáta, ktoré sú nekorelované. Napríklad:
x <- rnorm(100, mean = 10, sd = 3) # iid N(10, 3^2)
Budeme testovať hypotézu, že prvých 5 autokorelácií je nulových a zaznamenáme hodnotu testovacej štatistiky:
# DOPLNTE
simulacia <- function(){
x <- rnorm(100, mean = 10, sd = 3)
LB <- Box.test(x, ...)
return(...)
}
Zopakujeme 1000 krát - pri opakovaní simulácií je užitočná funkcia replicate
- a zobrazíme histogram:
statistiky <- replicate(1000, simulacia())
hist(statistiky)
Aká je teoretická hustota rozdelenia štatistiky v Ljung-Boxovom teste? Porovnajte so získaným histogramom.
Ukážka výstupu (kvôli náhodnosti môžete dostať iný):
Zadanie:
Zopakujte simulácie:
Zobrazte:
Jeden teoretický príklad tohto typu je v hodnote 10 bodov súčasťou skúšky.
Nech \(u\) je biely šum, ktorého hodnoty sú nezávislé náhodné premenné s normálnym rozdelením. Definujme proces \(x_t = u_t u_{t-1}\). Vypočítajte jeho strednú hodnotu, disperziu a autokovariancie. Rozhodnite, či je tento proces stacionárny.
Vygenerujte realizáciu tohto procesu a zobrazte odhadnutú autokorelačnú funkciu.
R markdown bol použitý aj na vytvorenie tejto stránky priamo v R-ku, takisto na vytvorenie slajdov k prednáške.