Thursday 5 January 2017

Volatility Spillover between VIX and Brent Oil Price (Multivariate GARCH in R)


Volatility transmission is a very important feature of the financial markets. Harris and Pisedtasalasai (“Return and Volatility Spillovers Between Large and Small Stocks in the UK”, 2005) outline the following points:” (1) transmission mechanisms tell us something about market efficiency. In an efficient market, and in the absence of time-varying risk premia, it should not be possible to forecast the returns of one stock using the lagged returns of another stock. The finding that there are spillover effects in returns implies the existence of an exploitable trading strategy and, if trading strategy profits exceed transaction costs, potentially represents evidence against market efficiency. (2) transmission mechanisms may be useful for portfolio management, where knowledge of return spillover effects may be useful for asset allocation or stock selection. (3) information about volatility spillover effects may be useful for applications in finance that rely on estimates of conditional volatility, such as option pricing, portfolio optimization, value at risk and hedging.”


Stepping on this research basis we can try to answer the following questions:

Does volatility spillover effects exist between the CBOE VIX index and Brent oil price?

Which one (VIX or oil price) is the main volatility transmitter?


The model applied to answer these questions is Multivariate GARCH model – and in particular BEKK-GARCH.  BEKK-GARCH Model (named after Baba, Engle, Kraft and Kroner) is an extension of the bivariate GARCH model and is able to capture volatility transmission among different financial assets, as well as the persistence of volatility within each of the assets analysed.

A little bit of methodology to explain the idea:
 

The vector autoregressive stochastic process of the returns can be presented in the following form (Karunanayake et al., 2009):

 Then the conditional variance-covariance matrix H has n dimensions (where n is the number of assets analysed) with diagonal elements representing the variance and non-diagonal elements – the covariance:
 
 
where vech (H) is an operator that stacks the columns of the lower triangular part of its argument square matrix, H is the covariance matrix of the residuals.
C is the upper triangular matrix of constants.
A and B in the  equation are both symmetric matrices. The non-diagonal elements of matrix A (i.e. ARCH effects) measure the effect of innovation (shocks) in market i on  market j, while the diagonal elements measure own innovation effect (shocks) of market i. The non-diagonal elements of matrix B (i.e. GARCH effects) measure the persistence of conditional volatility spillover between markers (cross-volatility spillover), while diagonal elements measure own volatility persistence.
And the implementation in R:
 
library(Quandl)
library(PerformanceAnalytics)
library(MTS)
vix<-Quandl("YAHOO/INDEX_VIX", collapse="daily", start_date="2006-01-01", type="zoo")
vix<-vix[, "Adjusted Close"] #take only the adjusted close values
vix.ret<-CalculateReturns(vix, method="log")
vix.ret<-vix.ret[-1,] #removes the first raw since it is NA
 
brent<-Quandl("EIA/PET_RBRTE_D", start_date="2006-01-01", type="zoo")
brent.ret<-CalculateReturns(brent, method="log")
brent.ret<-brent.ret[-1,] #removes the first raw since it is NA
 
#merge VIX and BRENT returns and exclude NA cases:
data<-cbind(vix.ret, brent.ret)
data<-na.omit(data)
 
# Charting the 20-day rolling correlation and covariance:
 
chart.RollingCorrelation(vix.ret, brent.ret, width=20)
cor.fun = function(x){
  cor(x)[1,2]
}
cov.fun = function(x){
  cov(x)[1,2]
}
roll.cov = rollapply(as.zoo(data), FUN=cov.fun, width=20,
                     by.column=FALSE, align="right")
roll.cor = rollapply(as.zoo(data), FUN=cor.fun, width=20,
                     by.column=FALSE, align="right")

par(mfrow=c(2,1))
plot(roll.cov, main="20-day rolling covariances",
     ylab="covariance", lwd=2, col="blue")
grid()
abline(h=cov(data)[1,2], lwd=2, col="red")
plot(roll.cor, main="20-day rolling correlations",
     ylab="correlation", lwd=2, col="blue")
grid()
abline(h=cor(data)[1,2], lwd=2, col="red")
par(mfrow=c(1,1))
 
#Now make BEKK11 from MTS-package:
m1=BEKK11(data) #takes some time to calculate it
 

And we get the following result:
Coefficient(s):
                  Estimate   Std. Error   t value   Pr(>|t|)   
mu1.vix.ret   -6.65408e-05  3.06049e-03  -0.02174 0.98265383   
mu2.brent.ret -2.13211e-05  1.61574e-03  -0.01320 0.98947151   
A011           7.33477e-02  1.29265e-03  56.74214 < 2.22e-16 ***
A021          -3.92517e-03  1.06010e-03  -3.70265 0.00021336 ***
A022           2.16678e-02  4.40651e-04  49.17241 < 2.22e-16 ***
A11            1.00000e-01  3.31692e-02   3.01485 0.00257110 **
A21            2.00000e-02  1.54254e-02   1.29656 0.19478119   
A12            2.00000e-02  7.67921e-02   0.26044 0.79452162   
A22            1.00000e-01  4.28668e-02   2.33281 0.01965831 * 
B11            8.00000e-01  1.05377e-02  75.91781 < 2.22e-16 ***
B21            1.00000e-01  4.06332e-03  24.61044 < 2.22e-16 ***
B12            1.00000e-01  1.53339e-02   6.52152 6.9601e-11 ***
B22            8.00000e-01  6.95043e-03 115.10074 < 2.22e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

And it is important here to distinguish the diagonal and non-diagonal elements of the matrices A and B. Diagonal elements are A11, A22 and B11 and B22  and represent respectively the influence of own volatility shocks and the influence from past squared volatilities. The off-diagonal elements (A12, A21 and B12, B21) represent the cross-market effects of shocks and volatility spillover among the markets. While all B-coefficients are statistically significant, indicating that there is both own volatility and volatility spillover effects between VIX and Brent oil price, the off-diagonal A elements are not statistically significant, indicating that no significant cross-market effect of shocks exist. The diagonal elements of A are statistically significant.
Both off-diagonal elements of B are 0.1 indicating that 1% increase in VIX index transmit 10% volatility to Brent oil price and 1% increase in Bren oil price transmit 10% volatility to VIX. Nevertheless, B21 has lower p-value than B12, indicating that the transmission from VIX to Brent is stronger.