Hi again,



I run the code wrote by Alexios and I have this error messege:
'Error in integrate(f, 0, 0.05, mu = mu[i], sigma = sigma[i], shape = shape[i],  : 
  evaluation of function gave a result of wrong length"

I tried to figure out but I didn't find any solution. May you help me with this?

Also, I tried the ESTest for 2 different series. One series proposed in the vignette of the test and my series and I got 2 antagonist results.

For dji30ret i have the following output:
$expected.exceed
[1] 75

$actual.exceed
[1] 74

$H1
[1] "Mean of Excess Violations of VaR is greater than zero"

$boot.p.value
[1] 0.9663557

$p.value
[1] 0.9655261

$Decision
[1] "Fail to Reject H0"


For my series I have:
$expected.exceed
[1] 80

$actual.exceed
[1] 87

$H1
[1] "Mean of Excess Violations of VaR is greater than zero"

$boot.p.value
[1] 0.06042038

$p.value
[1] 0.05122453

$Decision
[1] "Fail to Reject H0"

What seems to me bizarre is the fact that for my series the $p.value and $boot.p.value are under 10% and for dji30ret I have this propabilites are approx. 95% and for the both cases I got the same Decision.

In the vignette is mentioned that ESTet is  sided t-test, since I remember (I'm not sure) for this types of tests, Ho is accepted for a p value lower or equal to the  threshold of 1%/5%/10%. Why I have this extrange results?

Thank you!

Alexandra






From: "r-sig-finance-request@r-project.org" <r-sig-finance-request@r-project.org>
To: r-sig-finance@r-project.org 
Sent: Monday, May 13, 2013 1:00 PM
Subject: R-SIG-Finance Digest, Vol 108, Issue 12
 

Send R-SIG-Finance mailing list submissions to
    r-sig-finance@r-project.org

To subscribe or unsubscribe via the World Wide Web, visit
    https://stat.ethz.ch/mailman/listinfo/r-sig-finance
or, via email, send a message with subject or body 'help' to
    r-sig-finance-request@r-project.org

You can reach the person managing the list at
    r-sig-finance-owner@r-project.org

When replying, please edit your Subject line so it is more specific
than "Re: Contents of R-SIG-Finance digest..."


Today's Topics:

   1. CVaR with NIG- GARCH(1,1) (Alexandra Allexa)
   2. Re: CVaR with NIG- GARCH(1,1) (Brian G. Peterson)
   3. Re: CVaR with NIG- GARCH(1,1) (alexios ghalanos)
   4. Re: CVaR with NIG- GARCH(1,1) (alexios ghalanos)


----------------------------------------------------------------------

Message: 1
Date: Sun, 12 May 2013 15:20:34 -0700 (PDT)

To: "r-sig-finance@r-project.org" <r-sig-finance@r-project.org>
Subject: [R-SIG-Finance] CVaR with NIG- GARCH(1,1)
Message-ID:
    <1368397234.30486.YahooMailNeo@web122406.mail.ne1.yahoo.com>
Content-Type: text/plain



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]]



------------------------------

Message: 2
Date: Sun, 12 May 2013 17:43:23 -0500
From: "Brian G. Peterson" <brian@braverock.com>
To: r-sig-finance@r-project.org
Subject: Re: [R-SIG-Finance] CVaR with NIG- GARCH(1,1)
Message-ID: <51901B0B.5010200@braverock.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

On 05/12/2013 05:20 PM, Alexandra Allexa wrote:
> 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

CVaR/ETL in PerformanceAnalytics don't have NIG distribution options.

I'm not sure if the NIG distribution has p,d,q,r functions as is common 
in R for discrete distributions.

If you have the q(uantile) function, you should be able to adapt the 
code from PerformanceAnalytics with relative ease, since it is only 
required to know the quantile, and then integrate over the tail, to 
compute the CVaR for a continuous distribution.

Regards,

Brian


-- 
Brian G. Peterson
http://braverock.com/brian/
Ph: 773-459-4973
IM: bgpbraverock



------------------------------

Message: 3
Date: Sun, 12 May 2013 23:46:01 +0100
From: alexios ghalanos <alexios@4dscape.com>

Cc: "r-sig-finance@r-project.org" <r-sig-finance@r-project.org>
Subject: Re: [R-SIG-Finance] CVaR with NIG- GARCH(1,1)
Message-ID: <51901BA9.2000005@4dscape.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Hi Alexandra,

The conditional Expected Shortfall for the NIG (or any other 
standardized rugarch distribution) using the rolling estimation/forecast 
method is given below.

# using your example:
mu=fitlist1[, 'Mu']
sigma=fitlist1[, 'Sigma']
shape=fitlist1[, 'Shape']
skew=fitlist1[, 'Skew']

# for the 5% quantile (adjust 0.05 as appropriate)
f = function(x, mu, sigma, skew, shape) mu + qdist("nig", p=x, mu=0,
sigma=1, skew=skew, shape=shape)*sigma
for(i in 1:N)
{
ES[i] = integrate(f, 0, 0.05, mu = mu[i], sigma=sigma[i], shape = 
shape[i], skew=skew[i])$value/0.05
}
# Also see the ESTest.

You do not need to load ALL those packages (you only need rugarch for 
this example).

Regards,

Alexios

PS
# its "nig" NOT "snig" (you are confusing the name with that used in
# the fGarch package)...and yes, it is the same standardized
# distribution.
distplot(distribution = "nig", skewbounds = NULL, shapebounds = NULL,
          n.points = NULL)


On 12/05/2013 23:20, Alexandra Allexa wrote:
>
>
> 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]]
>
>
>
> _______________________________________________
> R-SIG-Finance@r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.
>



------------------------------

Message: 4
Date: Sun, 12 May 2013 23:49:44 +0100
From: alexios ghalanos <alexios@4dscape.com>
To: "Brian G. Peterson" <brian@braverock.com>
Cc: r-sig-finance@r-project.org
Subject: Re: [R-SIG-Finance] CVaR with NIG- GARCH(1,1)
Message-ID: <51901C88.8050600@4dscape.com>
Content-Type: text/plain; charset=ISO-8859-1; format=flowed

Hi Brian,

All distributions in rugarch have p*,d*,q*,r* functions, but I have 
unified the functions into the following functions:

pdist, ddist, qdist, rdist

They simply take as first argument the distribution (e.g. "nig", 
"std","sstd", "norm", "snorm", "ghyp", "ged","sged","ghst"), and then 
the standard inputs where mu is the mean, and sigma the standard 
deviation (since the distributions in rugarch are standardized this way).

Best,

Alexios

On 12/05/2013 23:43, Brian G. Peterson wrote:
> On 05/12/2013 05:20 PM, Alexandra Allexa wrote:
>> 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
>
> CVaR/ETL in PerformanceAnalytics don't have NIG distribution options.
>
> I'm not sure if the NIG distribution has p,d,q,r functions as is common
> in R for discrete distributions.
>
> If you have the q(uantile) function, you should be able to adapt the
> code from PerformanceAnalytics with relative ease, since it is only
> required to know the quantile, and then integrate over the tail, to
> compute the CVaR for a continuous distribution.
>
> Regards,
>
> Brian
>
>



------------------------------

_______________________________________________
R-SIG-Finance mailing list
R-SIG-Finance@r-project.org
https://stat.ethz.ch/mailman/listinfo/r-sig-finance


End of R-SIG-Finance Digest, Vol 108, Issue 12
**********************************************
	[[alternative HTML version deleted]]

