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
Rozhodla som sa modelovať index FTSE v závislosti od indexov DAX, SMI a CAC.
Pracovná hypotéza:
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:
data("EuStockMarkets"),data.frame,Time ako index času.Ďalej budeme pracovať s premennými:
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:
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í.
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í.
res <- residuals(model)
acf(res, lag.max = 10, main = "Autokorelačná funkcia rezíduí (ACF)")
Na grafe sú:
Ak je niektorý stĺpec výrazne mimo pásma, ide o štatisticky významnú autokoreláciu pri danom posune.
dwtest(model)
##
## Durbin-Watson test
##
## data: model
## DW = 0.054306, p-value < 2.2e-16
## alternative hypothesis: true autocorrelation is greater than 0
alternative = "greater").Hodnota štatistiky DW:
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₀.
Breusch–Godfreyov test je všeobecnejším testom autokorelácie, ktorý:
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:
Ak p-hodnota < 0.05 → zamietame H₀ → dôkaz autokorelácie rezíduí.
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. \]
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é.
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:
FTSE_lag1 (λ) by mal byť medzi 0 a 1 →
zotrvačnosť indexu,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.
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:
summary(model),V tejto úlohe som na stock údajoch (EuStockMarkets) spravila:
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.