R
and Value at RiskWe consider the log-return of an asset. That is, \[ r_t=\log(P_t)-\log(P_{t-1}), \] where \(P_t\) is the price of the asset at time \(t\).
The mean return \[ \bar{r}=\frac{1}{m}\sum_{t=1}^m r_{n-t}, \] where \(m\) is the number of observations leading upto present period.
If we assume that the mean return is zero, we obtain the maximum likelihood estimator of variance: \[ \sigma_n^2=\frac{1}{m}\sum_{t=1}^m r_{n-t}^2. \]
This formula to estimate volatility assign weght equally to each observations.
So more remote older return have the same influence on the estimated volatility, as returns that are more current.
As our aim is to estimate the present level of volatility, we would like to assign weight on current return more heavily than the older one.
The generic scheme can be presented as \[ \sigma_n^2=\sum_{t=1}^m \alpha_t r_{n-t}^2, ~~ \sum_{t=1}^m \alpha_t =1, \] \(\alpha_t\) is the weight of the return \(t\) days ago.
As our aim is to have a greater influence on current returns, then weight should decline in value for older returns, i.e., \(\alpha_t \geq \alpha_{t+1}\)
An addition to this representation is to assume a long-run variance.
The most commonly used model is the autoregressive conditional heteroskedasticity model, ARCH(m), which can be represented by: \[ \sigma_n^2=\gamma \sigma_L+ \sum_{t=1}^m \alpha_t r_{n-t}^2,~~ ~~ \gamma+ \sum_{t=1}^m \alpha_t = 1, \] where \(\sigma_L\) is the long-run variance weighted by parameter \(\gamma\).
We consider ARCH(1) model, which can be presented as \[ \sigma_n^2=\gamma \sigma_L+ \alpha_1 r_{n-1}^2,~~ ~~ \gamma+ \alpha_1 = 1, \]
We replace \(\alpha_1\) by \((1-\gamma)\) we have the model as \[ \sigma_n^2=\gamma \sigma_L+ (1-\gamma) r_{n-1}^2, \] where \(\gamma\) is weight on long-run variance.
Though ARCH model consider long-run variance, however it does not consider the previous volatility estimate.
This disadvantage of ARCH model can be overcome by the generalized autoregressive conditional heteroskedasticity, more popularly known as the GARCH model.
The GARCH(1,1) model can be presented as as \[ \sigma_n^2=\gamma \sigma_L+ \alpha_1 r_{n-1}^2 + \beta_1 \sigma_{n-1}^2,~~ ~~ \gamma+ \alpha_1 +\beta_1 = 1, \] where \(\alpha_1\) is the weight on previous period’s return, \(\beta_1\) is the weight on previous volatility estimate, \(\gamma\) is the weight on long-run variance.
We can write \(\omega=\gamma \sigma_L^2\), such that \[ \sigma_n^2=\omega+ \alpha_1 r_{n-1}^2 + \beta_1 \sigma_{n-1}^2, \] where \(\sigma_L^2=\frac{\omega}{1-\alpha_1-\beta_1}\) is the long-run variances.
If \(\omega=0\), \(\alpha=(1-\lambda)\) and \(\beta_1=\lambda\) then we have Exponentially Weighted Moving Average (EWMA) model, i.e., \[ \sigma_n^2=(1-\lambda)r_{n-1}^2 + \lambda \sigma_{n-1}^2 \] where \(\lambda\) is exponential decay rate. So EWMA is the special case of GARCH model.
library(tseries)
VIX<-get.hist.quote(instrument = "^VIX"
,start="2015-01-01"
,end=Sys.Date()
,quote="AdjClose"
,provider = "yahoo")
## time series starts 2015-01-02
## time series ends 2016-12-16
par(mfrow=c(1,2))
plot(ts(VIX$AdjClose),ylab="VIX")
## Why are we using SPY and not ^GSPC?
SnP.500<-get.hist.quote(instrument = "SPY"
,start="2015-01-01"
,end=Sys.Date()
,quote="AdjClose"
,provider = "yahoo")
## time series starts 2015-01-02
## time series ends 2016-12-16
plot(ts(SnP.500$AdjClose),ylab="S&P 500")
## log-return
ln_rt<-as.numeric(diff(log(SnP.500)))
## Fit GARCH(1,1)
fit.garch<-garch(ln_rt,order=c(1,1))
##
## ***** ESTIMATION WITH ANALYTICAL GRADIENT *****
##
##
## I INITIAL X(I) D(I)
##
## 1 7.431534e-05 1.000e+00
## 2 5.000000e-02 1.000e+00
## 3 5.000000e-02 1.000e+00
##
## IT NF F RELDF PRELDF RELDX STPPAR D*STEP NPRELDF
## 0 1 -2.084e+03
## 1 7 -2.084e+03 2.45e-04 1.19e-03 1.0e-04 2.5e+10 1.0e-05 1.47e+07
## 2 8 -2.085e+03 1.52e-04 1.91e-04 9.0e-05 2.0e+00 1.0e-05 6.85e+00
## 3 9 -2.085e+03 5.39e-06 4.95e-06 9.9e-05 2.0e+00 1.0e-05 6.93e+00
## 4 17 -2.095e+03 5.02e-03 8.82e-03 5.2e-01 2.0e+00 1.1e-01 6.91e+00
## 5 20 -2.107e+03 5.79e-03 6.06e-03 7.3e-01 1.8e+00 3.2e-01 3.33e-01
## 6 33 -2.108e+03 8.45e-05 1.96e-03 1.1e-05 2.3e+00 8.5e-06 6.51e-01
## 7 34 -2.109e+03 5.90e-04 4.50e-04 4.6e-06 2.0e+00 4.2e-06 3.72e-01
## 8 35 -2.109e+03 3.25e-05 4.29e-05 5.3e-06 2.0e+00 4.2e-06 5.21e-01
## 9 36 -2.109e+03 2.49e-06 2.71e-06 5.6e-06 2.0e+00 4.2e-06 4.88e-01
## 10 45 -2.116e+03 3.49e-03 5.66e-03 2.7e-01 2.0e+00 2.8e-01 4.88e-01
## 11 57 -2.118e+03 7.06e-04 2.72e-03 2.8e-06 2.8e+00 3.7e-06 3.55e-03
## 12 58 -2.118e+03 2.80e-04 2.07e-04 2.6e-06 2.0e+00 3.7e-06 3.25e-04
## 13 59 -2.118e+03 2.60e-05 3.19e-05 2.4e-06 2.0e+00 3.7e-06 9.00e-05
## 14 60 -2.118e+03 1.13e-06 1.21e-06 2.1e-06 2.0e+00 3.7e-06 4.99e-05
## 15 68 -2.119e+03 8.69e-05 4.90e-05 9.3e-03 0.0e+00 1.7e-02 4.90e-05
## 16 69 -2.119e+03 9.26e-05 1.26e-04 3.3e-02 0.0e+00 6.0e-02 1.26e-04
## 17 70 -2.119e+03 1.32e-06 1.90e-05 1.4e-02 0.0e+00 2.2e-02 1.90e-05
## 18 71 -2.119e+03 1.50e-06 1.58e-05 5.5e-03 0.0e+00 9.2e-03 1.58e-05
## 19 72 -2.119e+03 7.74e-06 7.79e-06 2.9e-03 7.1e-01 4.6e-03 9.95e-06
## 20 73 -2.119e+03 1.89e-06 2.03e-06 2.3e-03 0.0e+00 3.3e-03 2.03e-06
## 21 74 -2.119e+03 1.36e-08 1.14e-08 1.7e-04 0.0e+00 2.4e-04 1.14e-08
## 22 75 -2.119e+03 -3.25e-10 8.83e-11 5.8e-06 0.0e+00 8.2e-06 8.83e-11
##
## ***** RELATIVE FUNCTION CONVERGENCE *****
##
## FUNCTION -2.118826e+03 RELDX 5.809e-06
## FUNC. EVALS 75 GRAD. EVALS 22
## PRELDF 8.825e-11 NPRELDF 8.825e-11
##
## I FINAL X(I) D(I) G(I)
##
## 1 8.782813e-06 1.000e+00 -4.645e+02
## 2 1.913741e-01 1.000e+00 -4.872e-03
## 3 6.973940e-01 1.000e+00 -1.982e-02
## Fitted Values
sigma_hat<-fit.garch$fitted.values[,"sigt"]
vol_hat<-sigma_hat*sqrt(252)*100
## plot GARCH fitted volatility vs. VIX
par(mfrow=c(1,1))
plot(ts(VIX$AdjClose),col="red",lwd=2,ylim=c(0,40))
lines(vol_hat,col="blue",lwd=2)
text<-c("VIX","GARCH(1,1)")
legend(350,40,text,col=c("red","blue"),lwd=c(2,2))
If Volatility is a measure of average risk or (average loss) of investment.
The Value at Risk (VaR) is a measure of the etreme risk of investments.
VaR is defined as: for a given portfolio, time horizon, and probability \(p\), the \(p\) VaR is defined as a threshold loss value, such that the probability that the loss on the portfolio over the given time horizon exceeds this value is \(p\).
For example, if a portfolio of stocks has a one-day 5% VaR of $100,000, that means that there is a 0.05 probability that the portfolio will fall in value by more than $100,000 over a one-day period.
If \(X\) is the underlying price of the portfolio, then \(VaR_{\alpha}(X)\) is the negative if the \(\alpha\)-quantile, i.e., \[ VaR_{\alpha}(X)=\inf\{x \in \mathbb{R}: \mathbb{P}(X+x<0)\leq 1-\alpha\}=\inf\{x\in \mathbb{R}: 1-F_X(-x)\geq \alpha\} \]
Value at Risk if log return follow Gaussian distribution \[ VaR_{\alpha}(X)= |V*Z_{1-\alpha}*\sigma*\sqrt{t}|, \] where \(V\) is portfolio value, \(Z_{1-\alpha}\) is the (\(1-\alpha\)) quantile, \(\sigma\) is the portfolio volatility and \(t\) is the holding period
# Daily volatility
vol <- sd(ln_rt)
# Daily average return
rbar <- mean(ln_rt)
###
n<-length(SnP.500)
unit <- 1000 # Number of units of S&P 500
Value<-SnP.500[n] # Current Value of S&P 500
Value
## 2016-12-16
## 225.04
value_p <- Value*unit # Value of portfolio
hp <- 1 # Holding period
a <- .95 # Confidence level (5%)
# Parametric VaR with Gaussian
parvar_Gauss <- abs(value_p*qnorm(1-a,0,1)*vol*sqrt(hp))
# Parametric VaR with t(15)
parvar_t <- abs(value_p*qt(1-a,df=15)*vol*sqrt(hp))
# Historical VaR
hvar <- abs(quantile(ln_rt,1-a)*value_p)
# Vector comparing the two VarS
varv <- cbind(value_p,parvar_Gauss,parvar_t,hvar)
names(varv)<- c("Portfolio Value","VaR Gaussian","VaR t(15)","Historical VaR")
print(varv)
## Portfolio Value VaR Gaussian VaR t(15) Historical VaR
## 2016-12-16 225040 3363.605 3584.859 3212.388