Initialization of the GARCH recursion is mentioned in the vignette in the first paragraph of P.21. The default option is to use the mean of the squared residuals from the conditional mean filtration process. This is the standard approach. However, if you read the 'ugarchfit' documentation (or vignette),
there is also mention of the 'rec.init' option:

"the rec.init option determines the type of initialization for the variance recursion. Valid options are ‘all’ which uses all the values for the unconditional variance calculation, an integer greater than or equal to 1 denoting the number of data points to use for the calculation, or a positive numeric value less than one which determines the weighting for use in an exponential
smoothing backcast."

Regards,

Alexios

On 06/08/2013 10:56 AM, Alexandra Bridges wrote:
Thanks a lot for your answer!

One question for me remains:
I use a simple model fit like this (so no rolling estimation):

spgarchmodel<-ugarchfit(spec=
spmodel,data=sp500ret)


now I can get the sigma values with

sigma(spgarchmodel)

I know how to calculate them recursively, but what about
sigma(spgarchmodel)[1] ?
How is this value calculated?

I tried the following:
The initial sigma_0 is set to the unconditional variance. So in case
of a GARCH(1,1) this would be:
omega/(1-alpha1-beta1)

This is inserted into the GARCH(1,1) formula, the "residual value"
epsilon_0 is set to the return of the first date, so:
sqrt(omega+alpha1*return_ofthefirstdate^2 + beta1*unconditional_variance)

But this gives a sligthly different value?

Thanks a lot for your answer!


2013/6/5 alexios ghalanos <[email protected]>:
Hi,

1. You can easily check whether you are getting the forecast at the date you
want by inspecting the returned forecast density data.frame:
as.data.frame(roll, which = "density")
OR VaR:
as.data.frame(roll, which = "VaR")
If you provided an xts object, then the dates in the data.frame rownames
will provide you with the answer.

Have you tried help('uGARCHroll-class') ?

2. "show(roll,which=4)". There is no documented method 'show' which
takes on additional arguments 'which'.

3. 'report(roll,type="VaR",VaR.alpha=0.01,conf.level=0.99)'
This is a formal test of the conditional coverage. You ask WHY your model
does not pass the test. ONLY YOU can answer that question given you
knowledge of YOUR data.
However, it is usually unlikely that the normal distribution provides for a
good fit to the observed security return dynamics in financial markets (try
distribution.model='jsu').
Also, if you search previous postings you may see that a data length of 255
may not be adequate for modelling the volatility process persistence. There
is a blog post on this question you may find useful
(http://www.unstarched.net/2012/12/26/garch-parameter-uncertainty-and-data-size/).


Regards,

Alexios




On 04/06/2013 14:25, Alexandra Bridges wrote:
Hi,
I am using the rugarch package and especially the command ugarchroll
to do a rolling forecasting to calculate the VaR.

I am using the sp500ret of the rugarch package:

library(rugarch)
data(sp500ret)


This is daily data. I now want to fit a GARCH model every 100th day.
The window size should be 255 observations. So my GARCH model should
take the last recent 255 observations. Therefore the first VaR
forecast belongs to the 256th day (this is in this dataset the
11.03.1988).

My code is:

# model specification
spmodel<-ugarchspec(variance.model = list(model = "sGARCH", garchOrder
= c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = FALSE),
distribution.model = "norm")

# model fit
spgarchmodel<-ugarchfit(spec=spmodel,data=sp500ret)


# now rolling forecasts with ugarchroll

# observations available in total:
length(sp500ret[,1])

roll = ugarchroll(spmodel, sp500ret, n.start=255,
   refit.every = 100, refit.window = 'moving', window.size = 255,
    calculate.VaR = TRUE, keep.coef = TRUE)

show(roll)
# or the following alternatively also works:

roll = ugarchroll(spmodel, sp500ret,
forecast.length=(length(sp500ret[,1]))-255,
   refit.every = 100, refit.window = 'moving', window.size = 255,
    calculate.VaR = TRUE, keep.coef = TRUE)

show(roll,which=4)


First: Is this right what I am doing? Since both methods lead to the
same result I think I am correct, right?

Second:
The backtest shows the following:

report(roll,type="VaR",VaR.alpha=0.01,conf.level=0.99)

That means, I have far more exceedances than expected. So my model is
not good, why? What am I doing wrong? Is this due to a bad model
specification or due to an error in my code?

--
Alexa Bridges

_______________________________________________
[email protected] 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.




_______________________________________________
[email protected] 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.

Reply via email to