Johannes Lips
2011-Feb-15 15:07 UTC
[R] Estimation of an GARCH model with conditional skewness and kurtosis
Hello, I'm quite new to R but tried to learn as much as possible in the last few months. My problem is that I would like to estimate the model of Leon et al. (2005). I have shortly summarised the most important equations in the following pdf file: http://hannes.fedorapeople.org/leon2005.pdf My main question is now how could I introduce these two additional terms into the Likelihood function of a(n) (existing) GARCH method. I looked into some GARCH packages but wasn't really sure where to start. I know that this is not really an easy task but I would be very grateful if you could help me out by giving me some hints on how to solve this problem. Thanks in advance! Johannes Lips
Yohan Chalabi
2011-Feb-16 07:46 UTC
[R] Estimation of an GARCH model with conditional skewness and kurtosis
>>>> "JL" == Johannes Lips <johannes.lips at googlemail.com> >>>> on Tue, 15 Feb 2011 16:07:50 +0100JL> Hello, JL> JL> I'm quite new to R but tried to learn as much as possible in JL> the last JL> few months. JL> My problem is that I would like to estimate the model of Leon JL> et al. (2005). JL> I have shortly summarised the most important equations in JL> the following JL> pdf file: JL> http://hannes.fedorapeople.org/leon2005.pdf JL> JL> My main question is now how could I introduce these two JL> additional terms JL> into the Likelihood function of a(n) (existing) GARCH method. JL> JL> I looked into some GARCH packages but wasn't really sure where JL> to start. JL> I know that this is not really an easy task but I would be JL> very grateful JL> if you could help me out by giving me some hints on how to JL> solve this JL> problem. JL> JL> Thanks in advance! JL> JL> Johannes Lips Hi Johannes, You can start by implementing the simple GARCH(1,1) and then modify the objective function to your needs. You might want to add further constraints on the parameters. # ------------------------------------------------------------------------------ # load fGarch and a data set # ------------------------------------------------------------------------------ library(fGarch) data(dem2gbp) x <- dem2gbp[,1] # ------------------------------------------------------------------------------ # negative log likelihood function of garch11 with normal innovations # ------------------------------------------------------------------------------ llhGarch11N <- function(par, x) { mu <- par[1]; omega <- par[2]; alpha <- par[3]; beta <- par[4] e <- x - mu e2 <- e^2 ## slow loop # s2 = omega + alpha*mean(e2) + beta*mean(e2) # for ( t in 2:length(x)) # s2[t] = omega + alpha*e2[t-1] + beta*s2[t-1] # fast filter e2t <- omega + alpha*c(mean(e2),e2[-length(x)]) s2 <- filter(e2t, beta, "recursive", init = mean(e2)) -sum(log(dnorm(e, mean = 0, sd = sqrt(abs(s2))))) } # test llhGarch11N mu <- mean(x); omega <- 0.1*var(x); alpha <- 0.1; beta <- 0.8 parN <- c(mu, omega, alpha, beta) llhGarch11N(parN, x) # ------------------------------------------------------------------------------ # Fit parameters # ------------------------------------------------------------------------------ small <- 1e-6 lowN <- c(-10*abs(mu), small, small, small) upN <- c(10*abs(mu), 100*abs(mu), 1-small, 1-small) fitN <- nlminb(star=parN, objective=llhGarch11N, x = x, lower=lowN, upper=upN, control=list(x.tol = 1e-8,trace=1)) fitN$par <- round(fitN$par,6) names(fitN$par) <- c("mu", "omega", "alpha", "beta") fitN # ------------------------------------------------------------------------------ # compare with garchFit # ------------------------------------------------------------------------------ garchFit(~garch(1,1), x) # ------------------------------------------------------------------------------ HTH, Yohan -- PhD candidate Swiss Federal Institute of Technology Zurich www.ethz.ch