1 Výstup z funkcie Box.test

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
  • Aká hypotéza sa testovala?
  • Aký je záver - zamietame túto hypotézu alebo nie?
  • Čo z toho vyplýva pre dáta? Zamietneme už na základe tohto testu hypotézu, že ide o biely šum? Ak nie, aké ďalšie testy by sme mali spraviť, aby sme sa k tejto otázke mohli lepšie vyjadriť?

2 Ljung-Boxova štatistika a p-hodnota

  • Z hodnoty testovacej štatistiky v predchádzajúcom výstupe vypočítajte p-hodnotu.
  • Dáta, ktoré boli použité v predchádzajúcom výstupe majú nasledovné hodnoty odhadnutej autokorelačnej funkcie. Vypočítajte pomocou nich hodnotu testovacej štatistiky, ak navyše vieme, že počet pozorovaní bol 100.

## [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.

3 Ljung-Boxov test pre viac lagov a grafické znázornenie I. (simulované dáta)

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:

  • Pomocou for cyklu
  • funkciu sapply z triedy funkcií apply, keďže cykly sú vo všeobecnosti v R pomalé a odporúča sa používať namiesto nich tento prístup (s v názve označuje zjednodušenie výstupu, v našom prípade na vektor)

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ť:

  • pevne zvolené (analógia prvého vzorového príkladu z predchádzajúceho slajdu)
  • alebo môžu byť parametrom funkcie 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.

4 Ljung-Boxov test pre viac lagov a grafické znázornenie II. (reálne dáta)

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")

5 Analýza výnosov akcií pomocou balíka quantmod

Načítajte (ak treba, aj nainštalujte) balík quantmod.

library(quantmod)

5.1 Získanie cien akcií

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

5.2 Jednoduché ukážky funkcií z balíka:

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

5.3 Práca s výnosmi

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).

6 Ďalšie príklady na precvičenie

6.1 Testovacia štatistika Ljung-Boxovho testu

Vygenerujme dáta, ktoré 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:

    • pre iný počet dát,
    • pre iné rozdelenie generovaných náhodných veličín, ktoré sú bielym šumom,
    • pre iný počet lagov.
  • Zobrazte:

    • histogram a jeho porovnanie s hustotou,
    • kvantil a jeho porovnanie s kritickou hodnotou LB testu.

6.2 Teoretický príklad

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.

7 Poznámka: R markdown

R markdown bol použitý aj na vytvorenie tejto stránky priamo v R-ku, takisto na vytvorenie slajdov k prednáške.