1. Úvod a údaje

V tejto úlohe nadväzujem na predchádzajúce zadania, ale namiesto databázy o dĺžke života používam stock údaje – konkrétne dataset EuStockMarkets, ktorý je súčasťou R.

Databáza obsahuje denné uzatváracie hodnoty štyroch európskych akciových indexov:

Budeme modelovať:

data("EuStockMarkets")

stocks <- as.data.frame(EuStockMarkets)

# pridáme jednoduchý index času (1, 2, 3, ...)
stocks$Time <- seq_len(nrow(stocks))

head(stocks)
##       DAX    SMI    CAC   FTSE Time
## 1 1628.75 1678.1 1772.8 2443.6    1
## 2 1613.63 1688.5 1750.5 2460.2    2
## 3 1606.51 1678.6 1718.0 2448.2    3
## 4 1621.04 1684.1 1708.1 2470.4    4
## 5 1618.16 1686.6 1723.1 2484.7    5
## 6 1610.61 1671.6 1714.3 2466.8    6

1.1 Úvod do problému, stanovenie hypotéz

Rozhodla som sa modelovať index FTSE v závislosti od indexov DAX, SMI a CAC.

Pracovná hypotéza:

  • všetky tri vysvetľujúce premenné (DAX, SMI, CAC) majú štatisticky významný vplyv na FTSE,
  • očakávame kladné znamienko koeficientov pri DAX, SMI a CAC (rast týchto indexov by mal byť spojený s rastom indexu FTSE).

1.2 Príprava databázy, úprava údajov

Na rozdiel od príkladu s CSV súborom Life_Expectancy_Data.csv sú naše údaje už priamo v R, takže ich nemusíme načítavať z disku. Stačilo:

  • zavolať data("EuStockMarkets"),
  • prekonvertovať na data.frame,
  • pridať premennú Time ako index času.

Ďalej budeme pracovať s premennými:

  • FTSE (závislá),
  • DAX, SMI, CAC (vysvetľujúce),
  • Time (na vykresľovanie v čase).

2. Lineárna regresia v základnom tvare

Odhadujeme rovnicu:

\[ FTSE_t = \beta_0 + \beta_1 DAX_t + \beta_2 SMI_t + \beta_3 CAC_t + e_t. \]

model <- lm(FTSE ~ DAX + SMI + CAC, data = stocks)
summary(model)
## 
## Call:
## lm(formula = FTSE ~ DAX + SMI + CAC, data = stocks)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -534.61  -76.61   12.18   84.13  386.73 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 1988.54565   18.75930 106.003   <2e-16 ***
## DAX           -0.02123    0.02578  -0.823     0.41    
## SMI            0.70758    0.01347  52.541   <2e-16 ***
## CAC           -0.34029    0.01988 -17.120   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 121.5 on 1856 degrees of freedom
## Multiple R-squared:  0.9845, Adjusted R-squared:  0.9845 
## F-statistic: 3.941e+04 on 3 and 1856 DF,  p-value: < 2.2e-16

Komentár:


3. Autokorelácia rezíduí

V časových radoch je dôležitý predpoklad, že rezíduá sú nezávislé v čase. Často sa však stáva, že chyba v čase t súvisí s chybou v čase t−1 – to je autokorelácia rezíduí.

3.1 Grafická informácia

Najprv si pozrieme graf pozorovaní a vyrovnaných hodnôt v čase.

stocks$fitted <- fitted(model)

ggplot(stocks, aes(x = Time, y = FTSE)) +
  geom_point(color = "steelblue", size = 1) +
  geom_line(aes(y = fitted), color = "red", size = 0.8) +
  labs(
    title = "FTSE: empirické hodnoty (modrá) vs. vyrovnané hodnoty (červená)",
    x = "Čas (index pozorovania)",
    y = "FTSE"
  ) +
  theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Komentár:
Ak vidíme dlhšie úseky, kde sú empirické hodnoty systematicky nad alebo pod vyrovnanou čiarou, môže to naznačovať autokoreláciu rezíduí.

3.2 ACF graf (autokorelačná funkcia rezíduí)

res <- residuals(model)

acf(res, lag.max = 10, main = "Autokorelačná funkcia rezíduí (ACF)")

Na grafe sú:

  • na osi x posuny (lagy) 0, 1, 2, …,
  • na osi y odhad autokorelačného koeficientu,
  • modré prerušované čiary sú 95 % intervaly spoľahlivosti.

Ak je niektorý stĺpec výrazne mimo pásma, ide o štatisticky významnú autokoreláciu pri danom posune.


3.3 Durbin–Watsonov test

dwtest(model)
## 
##  Durbin-Watson test
## 
## data:  model
## DW = 0.054306, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
  • Nulová hypotéza H₀: neexistuje autokorelácia prvého rádu.
  • Alternatíva H₁: pozitívna autokorelácia (v našom výstupe alternative = "greater").

Hodnota štatistiky DW:

  • je medzi 0 a 4,
  • hodnoty blízko 2 – žiadna autokorelácia,
  • hodnoty < 2 – pozitívna autokorelácia,
  • hodnoty > 2 – negatívna autokorelácia.

V praxi sa často používa pravidlo, že ak je DW približne medzi 1.8 a 2.2,
problém autokorelácie nemusíme riešiť.

Z p-hodnoty v reporte rozhodneme, či zamietame H₀.


3.4 Breusch–Godfreyov test (BG test)

Breusch–Godfreyov test je všeobecnejším testom autokorelácie, ktorý:

  • umožňuje testovať viac posunov (lagov),
  • nevyžaduje striktne rovnaké podmienky ako DW test.

Budeme testovať autokoreláciu 1. rádu:

bgtest(model, order = 1)
## 
##  Breusch-Godfrey test for serial correlation of order up to 1
## 
## data:  model
## LM test = 1759.5, df = 1, p-value < 2.2e-16

Interpretácia:

  • H₀: žiadna sériová korelácia do 1. rádu,
  • H₁: existuje sériová korelácia.

Ak p-hodnota < 0.05 → zamietame H₀ → dôkaz autokorelácie rezíduí.


4. Koyckov model (dynamizácia)

Aby sme zohľadnili dynamiku v čase, môžeme použiť Koyckov typ modelu, kde vysvetľovaná premenná závisí aj na vlastnej oneskorenej hodnote:

\[ FTSE_t = \alpha_0 + \beta_1 DAX_t + \beta_2 SMI_t + \beta_3 CAC_t + \lambda FTSE_{t-1} + v_t. \]

4.1 Vytvorenie oneskorenej premennej

stocks <- stocks %>%
  arrange(Time) %>%
  mutate(
    FTSE_lag1 = dplyr::lag(FTSE)
  )

head(stocks[, c("FTSE", "FTSE_lag1")], 10)
##      FTSE FTSE_lag1
## 1  2443.6        NA
## 2  2460.2    2443.6
## 3  2448.2    2460.2
## 4  2470.4    2448.2
## 5  2484.7    2470.4
## 6  2466.8    2484.7
## 7  2487.9    2466.8
## 8  2508.4    2487.9
## 9  2510.5    2508.4
## 10 2497.4    2510.5

Prvé pozorovanie má NA – nemá minulú hodnotu, v regresii bude automaticky vynechané.

4.2 Odhad Koyckovho modelu

model_koyck <- lm(FTSE ~ DAX + SMI + CAC + FTSE_lag1, data = stocks)
summary(model_koyck)
## 
## Call:
## lm(formula = FTSE ~ DAX + SMI + CAC + FTSE_lag1, data = stocks)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -165.554  -15.334    0.154   16.131  163.054 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 64.447028  12.462175   5.171 2.57e-07 ***
## DAX         -0.004324   0.006454  -0.670   0.5030    
## SMI          0.025123   0.005302   4.738 2.32e-06 ***
## CAC         -0.010272   0.005354  -1.919   0.0552 .  
## FTSE_lag1    0.968064   0.005808 166.679  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 30.41 on 1854 degrees of freedom
##   (1 observation deleted due to missingness)
## Multiple R-squared:  0.999,  Adjusted R-squared:  0.999 
## F-statistic: 4.788e+05 on 4 and 1854 DF,  p-value: < 2.2e-16

Komentár:

  • koeficient pri FTSE_lag1 (λ) by mal byť medzi 0 a 1 → zotrvačnosť indexu,
  • ak je λ blízko 1, efekt minulosti sa presúva veľmi pomaly,
  • porovnáme Adjusted R-squared s pôvodným modelom.

4.3 Durbin–Watsonov test pre Koyckov model

dwtest(model_koyck)
## 
##  Durbin-Watson test
## 
## data:  model_koyck
## DW = 1.7082, p-value = 8.475e-11
## alternative hypothesis: true autocorrelation is greater than 0

Ak sa hodnota DW priblíži k 2 a p-hodnota už nie je malá, znamená to, že dynamizáciou (pridaním lagovanej FTSE) sa problém autokorelácie alespoň čiastočne zmiernil.


5. Newey–West robustné štandardné chyby

Aj pri prítomnosti autokorelácie (a heteroskedasticity) môžeme použiť Newey–West robustné smerodajné odchýlky, ktoré korigujú štatistiky v pôvodnom OLS modeli.

Použijeme ich pre základný model model:

coeftest(model, vcov = NeweyWest(model))
## 
## t test of coefficients:
## 
##                Estimate  Std. Error t value  Pr(>|t|)    
## (Intercept) 1988.545651  384.865968  5.1669 2.637e-07 ***
## DAX           -0.021228    0.134613 -0.1577    0.8747    
## SMI            0.707575    0.077318  9.1515 < 2.2e-16 ***
## CAC           -0.340292    0.259867 -1.3095    0.1905    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretácia:


6. Záver

V tejto úlohe som na stock údajoch (EuStockMarkets) spravila:

  1. Odhad základného modelu
    \[ FTSE_t = \beta_0 + \beta_1 DAX_t + \beta_2 SMI_t + \beta_3 CAC_t + e_t. \]
  2. Skúmala som autokoreláciu rezíduí pomocou:
    • grafu empirických a vyrovnaných hodnôt v čase,
    • ACF grafu rezíduí,
    • Durbin–Watsonovho testu,
    • Breusch–Godfreyovho testu.
  3. Rozšírila som model o oneskorenú hodnotu FTSE (Koyckov typ modelu) a porovnala som jeho vlastnosti s pôvodným modelom.
  4. Použila som Newey–West robustné štandardné chyby, ktoré korigujú štatistické testy v prítomnosti autokorelácie (a heteroskedasticity).

Konkrétne slovné závery (či bola autokorelácia prítomná, či sa po dynamizácii zmiernila, či sú koeficienty významné aj pri Newey–West SE) závisia od hodnôt p-hodnôt vo výstupe, ktoré vidíš po spustení tohto kódu.