1. Príprava údajov

Pokračujeme v predchádzajúcich úlohách, ale teraz už nie s dátami o dĺžke života,
ale s finančnými časovými radmi EuStockMarkets. Budeme skúmať, nakoľko je index FTSE ovplyvnený ostatnými európskymi indexmi.

Použijeme:

data("EuStockMarkets")

# prevedieme na data.frame
udaje <- as.data.frame(EuStockMarkets)

head(udaje)
##       DAX    SMI    CAC   FTSE
## 1 1628.75 1678.1 1772.8 2443.6
## 2 1613.63 1688.5 1750.5 2460.2
## 3 1606.51 1678.6 1718.0 2448.2
## 4 1621.04 1684.1 1708.1 2470.4
## 5 1618.16 1686.6 1723.1 2484.7
## 6 1610.61 1671.6 1714.3 2466.8
summary(udaje)
##       DAX            SMI            CAC            FTSE     
##  Min.   :1402   Min.   :1587   Min.   :1611   Min.   :2281  
##  1st Qu.:1744   1st Qu.:2166   1st Qu.:1875   1st Qu.:2843  
##  Median :2141   Median :2796   Median :1992   Median :3247  
##  Mean   :2531   Mean   :3376   Mean   :2228   Mean   :3566  
##  3rd Qu.:2722   3rd Qu.:3812   3rd Qu.:2274   3rd Qu.:3994  
##  Max.   :6186   Max.   :8412   Max.   :4388   Max.   :6179

2. Základná regresia

Základný lineárny model:

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

model <- lm(FTSE ~ +1 + DAX + SMI + CAC, data = udaje)
summary(model)
## 
## Call:
## lm(formula = FTSE ~ +1 + DAX + SMI + CAC, data = udaje)
## 
## 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. RESET test (Ramseyho test špecifikácie)

Testujeme, či je model správne špecifikovaný (funkčná forma, chýbajúce premenné):

resettest(model)
## 
##  RESET test
## 
## data:  model
## RESET = 254.83, df1 = 2, df2 = 1854, p-value < 2.2e-16

Interpretácia:

4. Grafická analýza – Residuals vs Fitted

plot(model, which = 1)

Ak rezíduá vykazujú nejaký zakrivený vzor (nie náhodný mrak), model nemusí byť lineárny v premenných.
Môže byť potrebná transformácia premenných alebo pridanie nelineárnych (kvadratických) členov.

5. C+R grafy (Component + Residual plots)

Pozrieme sa, pri ktorých premenných je najväčší odklon od linearity.

car::crPlots(model)

Interpretácia:

Predpokladajme, že nelinearita je najvýraznejšia pri indexe DAX, prípadne SMI.

6. Nelineárna špecifikácia – kvadratické členy

Rozšírime model o kvadráty niektorých vysvetľujúcich premenných:

\[ FTSE_t = \beta_0 + \beta_1 DAX_t + \beta_2 SMI_t + \beta_3 CAC_t + \gamma_1 DAX_t^2 + \gamma_2 SMI_t^2 + u_t \]

model_kvadr <- lm(FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2) + I(SMI^2), data = udaje)
summary(model_kvadr)
## 
## Call:
## lm(formula = FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2) + I(SMI^2), 
##     data = udaje)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -424.13  -68.94    7.86   78.25  342.98 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.186e+03  4.312e+01  27.500   <2e-16 ***
## DAX          8.953e-02  4.318e-02   2.073   0.0383 *  
## SMI          7.965e-01  2.454e-02  32.456   <2e-16 ***
## CAC         -5.784e-02  2.189e-02  -2.642   0.0083 ** 
## I(DAX^2)    -5.574e-06  6.050e-06  -0.921   0.3570    
## I(SMI^2)    -2.575e-05  2.786e-06  -9.241   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 107.9 on 1854 degrees of freedom
## Multiple R-squared:  0.9878, Adjusted R-squared:  0.9878 
## F-statistic: 3.009e+04 on 5 and 1854 DF,  p-value: < 2.2e-16

Porovnáme základný a kvadratický model pomocou ANOVA:

anova(model, model_kvadr)
## Analysis of Variance Table
## 
## Model 1: FTSE ~ +1 + DAX + SMI + CAC
## Model 2: FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2) + I(SMI^2)
##   Res.Df      RSS Df Sum of Sq      F    Pr(>F)    
## 1   1856 27406427                                  
## 2   1854 21585905  2   5820522 249.96 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretácia:

Ak je niektorý kvadratický člen štatisticky nevýznamny, môžeme ho vypustiť a nechať len ten dôležitý:

model_kvadr2 <- lm(FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2), data = udaje)
summary(model_kvadr2)
## 
## Call:
## lm(formula = FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2), data = udaje)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -438.04  -71.63   11.86   83.18  319.43 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  1.179e+03  4.408e+01  26.744  < 2e-16 ***
## DAX          3.758e-01  3.075e-02  12.223  < 2e-16 ***
## SMI          6.041e-01  1.329e-02  45.468  < 2e-16 ***
## CAC         -8.229e-02  2.222e-02  -3.704 0.000218 ***
## I(DAX^2)    -5.549e-05  2.787e-06 -19.912  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 110.3 on 1855 degrees of freedom
## Multiple R-squared:  0.9873, Adjusted R-squared:  0.9872 
## F-statistic: 3.596e+04 on 4 and 1855 DF,  p-value: < 2.2e-16
anova(model, model_kvadr2)
## Analysis of Variance Table
## 
## Model 1: FTSE ~ +1 + DAX + SMI + CAC
## Model 2: FTSE ~ +1 + DAX + SMI + CAC + I(DAX^2)
##   Res.Df      RSS Df Sum of Sq      F    Pr(>F)    
## 1   1856 27406427                                  
## 2   1855 22580240  1   4826186 396.48 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

7. Dummy premenná a zlom v sklone

Predpokladajme, že vzťah medzi FTSE a DAX môže byť iný pri nižších hodnotách DAX a iný pri
vyšších hodnotách DAX (napr. nad horným kvartilom).

Vytvoríme dummy premennú:

threshold <- quantile(udaje$DAX, 0.75)
udaje$DUM <- ifelse(udaje$DAX < threshold, 0, 1)
threshold
##      75% 
## 2722.367

7.1 Zlom v intercept-e (posun nadroviny)

Model:

\[ FTSE_t = \beta_0 + \beta_D DUM_t + \beta_1 DAX_t + \beta_2 SMI_t + \beta_3 CAC_t + u_t \]

modelD_auto <- lm(FTSE ~ +1 + DUM + DAX + SMI + CAC, data = udaje)
summary(modelD_auto)
## 
## Call:
## lm(formula = FTSE ~ +1 + DUM + DAX + SMI + CAC, data = udaje)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -517.20  -77.66   12.17   83.49  378.71 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2016.63247   19.95235 101.072  < 2e-16 ***
## DUM           51.78977   12.91051   4.011 6.27e-05 ***
## DAX           -0.03871    0.02604  -1.487    0.137    
## SMI            0.70604    0.01342  52.618  < 2e-16 ***
## CAC           -0.33652    0.01982 -16.980  < 2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 121 on 1855 degrees of freedom
## Multiple R-squared:  0.9847, Adjusted R-squared:  0.9846 
## F-statistic: 2.981e+04 on 4 and 1855 DF,  p-value: < 2.2e-16

Tu testujeme, či DUM spôsobuje posun regresnej nadroviny (zmena interceptu).
Ak koeficient pri DUM nie je významný, zlom v intercept-e nie je štatisticky potvrdený.

7.2 Zlom v sklone (interakcia DUM * DAX)

Teraz skúmame, či sklon vzťahu FTSE–DAX je iný pre DUM = 0 a DUM = 1:

\[ FTSE_t = \beta_0 + \beta_1 DAX_t + \beta_{D} (DUM_t \cdot DAX_t) + \beta_2 SMI_t + \beta_3 CAC_t + u_t \]

modelD_sklon <- lm(FTSE ~ +1 + DAX + I(DUM * DAX) + SMI + CAC, data = udaje)
summary(modelD_sklon)
## 
## Call:
## lm(formula = FTSE ~ +1 + DAX + I(DUM * DAX) + SMI + CAC, data = udaje)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -539.51  -75.49   11.24   84.11  390.08 
## 
## Coefficients:
##                Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   1.958e+03  2.595e+01  75.457   <2e-16 ***
## DAX          -8.510e-03  2.681e-02  -0.317   0.7510    
## I(DUM * DAX) -8.046e-03  4.696e-03  -1.713   0.0868 .  
## SMI           7.058e-01  1.350e-02  52.280   <2e-16 ***
## CAC          -3.345e-01  2.015e-02 -16.599   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 121.5 on 1855 degrees of freedom
## Multiple R-squared:  0.9846, Adjusted R-squared:  0.9845 
## F-statistic: 2.959e+04 on 4 and 1855 DF,  p-value: < 2.2e-16

Porovnáme pôvodný model a model so zlomom v sklone:

anova(model, modelD_sklon)
## Analysis of Variance Table
## 
## Model 1: FTSE ~ +1 + DAX + SMI + CAC
## Model 2: FTSE ~ +1 + DAX + I(DUM * DAX) + SMI + CAC
##   Res.Df      RSS Df Sum of Sq      F  Pr(>F)  
## 1   1856 27406427                              
## 2   1855 27363130  1     43296 2.9352 0.08684 .
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretácia:

  • ak p-hodnota ANOVA < 0.05 → model so zlomom v sklone výrazne zlepšuje pôvodný model,
  • upravený R² (Adjusted R-squared) by mal byť vyšší.

RESET test pre model so zlomom v sklone:

resettest(modelD_sklon)
## 
##  RESET test
## 
## data:  modelD_sklon
## RESET = 254.9, df1 = 2, df2 = 1853, p-value < 2.2e-16

Ak p-hodnota je stále malá, problém nesprávnej špecifikácie úplne nezmizol.

8. Box–Coxov transformačný test

Testujeme, aká transformácia vysvetľovanej premennej FTSE by bola vhodná:

\[ FTSE^{(\lambda)} = \begin{cases} \frac{FTSE^\lambda - 1}{\lambda}, & \lambda \ne 0 \\ \log(FTSE), & \lambda = 0 \end{cases} \]

boxcox(model)

Interpretácia:

Predpokladajme, že optimálne \(\lambda\) je niekde inde – vypočítame ho:

bc <- boxcox(model)

lambda_opt <- bc$x[which.max(bc$y)]
lambda_opt
## [1] 1.393939

Vytvoríme transformovanú závislú premennú:

if (abs(lambda_opt) < 1e-6) {
  udaje$FTSE_lambda <- log(udaje$FTSE)
} else {
  udaje$FTSE_lambda <- (udaje$FTSE^lambda_opt - 1) / lambda_opt
}

model_lambda <- lm(FTSE_lambda ~ +1 + DAX + SMI + CAC, data = udaje)
summary(model_lambda)
## 
## Call:
## lm(formula = FTSE_lambda ~ +1 + DAX + SMI + CAC, data = udaje)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13796.2  -1789.1    264.6   1847.4  10286.8 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 18748.3624   444.3618   42.19   <2e-16 ***
## DAX             0.7636     0.6107    1.25    0.211    
## SMI            16.4521     0.3190   51.57   <2e-16 ***
## CAC            -4.8512     0.4708  -10.30   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2878 on 1856 degrees of freedom
## Multiple R-squared:  0.9875, Adjusted R-squared:  0.9874 
## F-statistic: 4.875e+04 on 3 and 1856 DF,  p-value: < 2.2e-16

RESET test pre transformovaný model:

resettest(model_lambda)
## 
##  RESET test
## 
## data:  model_lambda
## RESET = 53.642, df1 = 2, df2 = 1854, p-value < 2.2e-16

Poznámka: ANOVA porovnanie model vs model_lambda už nemá zmysel, lebo vysvetľovaná premenná
je iná (FTSE vs FTSE_lambda).

9. Zhrnutie

V tejto úlohe sme: