

Hello,

My name is Alexandra and I have a very tight deadline for my MSc dissertation. My intention is to do a CVaR/ES using a NIG_GARCH model for estimating the volatility.

With the Alexios's help I did a part of the following code (Thank you very much for your help, Alexios Ghalanos!):

library(timeSeries)
library(timeDate)
library(Rcpp)
library(RcppArmadillo)
library(parallel)
library(chron)
library(Rsolnp)
library(truncnorm)
library(rugarch)
library(fGarch)
library(timeDate)
library(PerformanceAnalytics)
library(AER)
library(fGarch)

eur_all=timeSeries(eur_2001)
r_eur1=getReturns(eur_all)
rand_eur1=r_eur1*100

#-NIG_GARCH

#I. Specification Model and Fitting

spec1 = ugarchspec(variance.model = list(model = 'sGARCH',
                                         garchOrder = c(1,1)), mean.model = 
                     list(armaOrder = c(1,1), include.mean = TRUE),
                   distribution.model = "nig")



#Fit the model


tmp = ugarchroll(spec1, rand_eur1, forecast.length = 1500, refit.every = 50,
                 refit.window = 'moving', windows.size = 1500, solver ='hybrid', 
                 calculate.VaR = TRUE,VaR.alpha = c(0.01, 0.025, 0.05), keep.coef = TRUE)

if (!is.null(tmp@model$noncidx)) {
    
  tmp = resume(tmp, solver = "solnp", fit.control = list(scale = 1), solver.control = list(tol = 1e-07,
                                                                                           delta = 1e-06))
  
  if (!is.null(tmp@model$noncidx))
    
    fitlist1 = NA                 
} else {
  
  fitlist1 = as.data.frame(tmp, which = 'density')
  
  
}


# Defining NIG distribution

mu=fitlist1[, 'Mu']
sigma=fitlist1[, 'Sigma']
shape=fitlist1[, 'Shape']
skew=fitlist1[, 'Skew']
lambda =fitlist1[, 'Shape.GIG']

dist=ddist(distribution = "nig", y, mu = mu, sigma = sigma, lambda = lambda, skew = skew, 
           shape = shape)
pd=pdist(distribution = "nig", q, mu = mu, sigma = sigma, lambda = lambda, skew = skew, 
         shape = shape)
qst=qdist(distribution = "nig", p, mu = mu, sigma = sigma, lambda = lambda, skew = skew, 
          shape = shape)
r=rdist(distribution = "nig", n, mu = mu, sigma = sigma, lambda = lambda, skew = skew, 
        shape = shape)
fitdist(distribution = "nig", fitlist1, control=list())

distplot(distribution = "snig", skewbounds = NULL, shapebounds = NULL, 
         n.points = NULL)

#CVaR/ES

EURLOSS <- timeSeries(-1.0*rand_eur1,
                      char.vec = time(eur_all))

ESgarch <- function(rand_eur1, p = 0.99){
  sigma <-fitlist1[, 'Sigma']  
  df <- fitlist1[,"Shape"]
  ES <- sigma * (dist(qst(p, df), df)/(1 - p)) *
    ((df + (qst(p, df))^2)/(df - 1))
  return(ES)
}


from <- time(EURLOSS)[-c((nrow(EURLOSS) - 999) : nrow(EURLOSS))]
to <- time(EURLOSS)[-c(1:1000)]
EURSEES <- fapply(EURLOSS, from = from, to = to, FUN = ESgarch)
EURSEESL1 <- lag(EURSEES, k = 1)
res <- na.omit(cbind(EURSELOSS, EURSEESL1))
colnames(res) <- c("EURSELOSS", "ES99")
plot(res[, 2], col = "red", ylim = range(res),
     main = "EUR: NIG-GARCH(1,1) ES 99%",
     ylab = "percentages", xlab = "")
points(res[, 1], type = "p", cex = 0.2, pch = 19, col = "blue")
legend("topleft", legend = c("Loss", "ES"),
       col = c("blue", "pink"), lty = c(NA, 1), pch = c(19, NA))



My problem is how to define the NIG distribution for such a model?
How I set the parameters/ vectors: y,p,q and n?

In this situation, it is possible to use the function CVaR or ETL provided by the package {PerformanceAnalytics}? How?

I can applied the same principle used in computing CVaR for CDD/CDaR?

Thank you in advance,

Alexandra Rautoiu
	[[alternative HTML version deleted]]

