Leverage Effect

The models we have been looking at do not differentiate between positive and negative residuals: both errors are treated the same. However, this does not align with reality, where the volatility resulting from a large negative return is higher than that for the corresponding positive return.

The reason for this is that a large negative return produces a significant reduction in market value. This, in turn, results in higher leverage. Why? Leverage is the ratio of debt to equity. Presumably a large negative return will not have an immediate impact on debt. But equity (assessed as the market value of all outstanding shares) will drop. Lower equity translates into higher leverage, making the company appear to be more reliant on debt.

Leverage Effect

To deal with the leverage asymmetry we need to have separate expressions for variance following positive and negative returns.

In a previous post we defined the model variance as

$$ \sigma_t^2 = \omega + \alpha e_{t-1}^2 + \beta \sigma_{t-1}^2. $$ This will still apply when the residual for the previous time step, \(e_{t-1}\), is positive. But for negative \(e_{t-1}\) the coefficient for the squared residual has a correction factor, \(\gamma\):

$$ \sigma_t^2 = \omega + (\alpha + \gamma) e_{t-1}^2 + \beta \sigma_{t-1}^2. $$ The coefficient of the squared residual is

  • \(\alpha\) when \(e_{t-1} \geq 0\) and
  • \(\alpha + \gamma\) when \(e_{t-1} < 0\).

This is the GJR (Glosten-Jagannathan-Runkle) GARCH model (original publication can be found here). The GJR GARCH model is based on the Standard GARCH model but also includes the leverage effect. When \(\gamma = 0\) it reduces to the Standard GARCH model.

Standard GARCH Model

Start by modelling the ACC returns using a Standard GARCH ("sGARCH") model with a Normal Distribution.

specification <- ugarchspec(
  distribution.model = "norm",
  mean.model = list(armaOrder = c(0, 0)),
  variance.model = list(model = "sGARCH")
)

fit <- ugarchfit(data = ACC, spec = specification)

coef(fit)
          mu        omega       alpha1        beta1 
7.196519e-04 1.741614e-05 6.181566e-02 8.862315e-01 

The resulting model has fit the parameters \(\mu\), \(\omega\), \(\alpha\) and \(\beta\). The coefficient of the squared residuals in the volatility is 0.0618 for both positive and negative returns.

A news impact curve can be used to illustrate the symmetric response to negative and positive returns.

GJR GARCH Model

Now, using the same distribution but changing to a GJR GARCH ("gjrGARCH") model.

specification <- ugarchspec(
  distribution.model = "norm",
  mean.model = list(armaOrder = c(0, 0)),
  variance.model = list(model = "gjrGARCH")
)

fit <- ugarchfit(data = ACC, spec = specification)

coef(fit)
          mu        omega       alpha1        beta1       gamma1 
2.928676e-04 1.148262e-05 1.960187e-06 9.219836e-01 9.466244e-02 

This model also has a value for \(\gamma\). The coefficient of the squared residuals is now 0.00000196 for positive residuals and 0.0947 for negative residuals. Negative returns clearly have a much larger impact on volatility!

The news impact curve shows the asymmetry. Somewhat unrealistically this implies that positive returns have essentially no impact. That doesn’t seem quite right.

Given the asymmetry of the returns it would make more sense to use a skewed distribution, changing from "norm" to "sstd".

specification <- ugarchspec(
  distribution.model = "sstd",
  mean.model = list(armaOrder = c(0, 0)),
  variance.model = list(model = "gjrGARCH")
)

fit <- ugarchfit(data = ACC, spec = specification)

coef(fit)
          mu        omega       alpha1        beta1       gamma1         skew        shape 
2.940343e-04 9.299285e-06 7.509895e-03 9.290928e-01 7.535807e-02 1.069806e+00 6.093516e+00 

Now positive returns do have an impact but it’s much smaller than that from negative returns.

Compare the volatility derived from the GJR GARCH model with a skewed distribution (blue) to that of the Standard GARCH model (red) with a Normal Distribution.

Midway through 2018 there’s a large positive return. This has an impact on the Standard GARCH model (red) but very little effect on the GJR GARCH model (blue). Looking at the return time series it’s apparent that there also really isn’t an appreciable increase in volatility at that time. However, in the first quarter of 2020 there’s a large negative return, which is accompanied by a significant escalation in volatility, which is reflected in both the Standard GARCH and GJR GARCH models.

Alternative Implementation

Let’s try with the {tsgarch} package.

library(tsgarch)

Create a GJR GARCH model specification with a Skewed Student-t Distribution.

specification <- garch_modelspec(
  ACC,
  model = "gjrgarch",
  distribution = "sstd",
  constant = TRUE
)
fit <- estimate(specification)

Now we have access to the statistical details of the estimated parameters. 💡 Not all of them are significant so we should probably think a bit harder about this model!

summary(fit)
GJRGARCH Model Summary

Coefficients:
             Estimate Std. Error t value Pr(>|t|)    
mu          2.935e-04  4.346e-04   0.675 0.499525    
omega       9.386e-06  3.610e-06   2.600 0.009325 ** 
alpha1      7.558e-03  9.958e-03   0.759 0.447846    
gamma1      7.554e-02  2.151e-02   3.512 0.000445 ***
beta1       9.287e-01  1.980e-02  46.900  < 2e-16 ***
skew        1.070e+00  3.929e-02  27.228  < 2e-16 ***
shape       6.096e+00  9.057e-01   6.731 1.69e-11 ***
persistence 9.750e-01  1.156e-02  84.332  < 2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

N: 1484
V(initial): 0.000339,  V(unconditional): 0.0003758
Persistence: 0.975
LogLik: 3951.95,  AIC:  -7887.91,  BIC: -7845.49
plot(fit)