[R-SIG-Finance] Comparison between rugarch and fGarch
alexios ghalanos
alexios at 4dscape.com
Sat Jan 18 02:42:31 CET 2014
Hi Danielle,
cbind( round(coef(garch1),5), round(coef(garch2),5) )
fGarch rugarch
mu 0.00040 0.00045
ar1 0.09860 0.09814
omega 0.00001 0.00001
alpha1 0.10210 0.09940
beta1 0.85944 0.86367
cbind( round(garch1 at fit$se.coef,5), round(garch2 at fit$se.coef,5) )
fGarch rugarch
mu 0.00017 0.00017
ar1 0.01544 0.01426
omega 0.00000 0.00000
alpha1 0.03255 0.00559
beta1 0.04558 0.00628
The small differences (and they are small) in the 2 results are down to
one, and only one issue: How the AR(MA) models are implemented in the 2
packages.
In the fGarch package, the AR model is:
\y_t = \mu + ar_1 y_{t-1} + \varepsilon_t
In the rugarch package, the AR model is:
\y_t = \mu + ar_1 (y_{t-1} - \mu) + \varepsilon_t
or alternatively:
\y_t - \mu = ar_1 (y_{t-1} - \mu) + \varepsilon_t
(and more generally: \y_t = \mu_t + ar_1 (y_{t-1} - \mu_t)...in the
presence of external regressors in the conditional mean equation).
Following up from your code, the following illustrates this:
#---------------------------------------------------------------------
library(xts)
Sys.setenv(TZ = "GMT")
data(bmw,package="evir")
bmw = xts(bmw, attr(bmw,"times"))
# we use xts in order to make use of the 'lag' functionality
# First thing is to compare the log-likelihoods:
c(-garch1 at fit$llh, likelihood(garch2))
# fGarch 'appears' to be a little higher...
17757 17752
# Add the estimated parameters from fGarch and
# use them in the ugarchfilter routine:
spec2 = spec
setfixed(spec2)<-as.list(coef(garch1))
filt = ugarchfilter(spec2, bmw)
likelihood(filt)
17752
# so the likelihood does not change.
# Investigate the conditional mean equation:
pars1 = coef(garch1)
pars2 = coef(garch2)
# both fGarch and rugarch use the mean to initialize the recursions
fitted1 = cbind(garch1 at fitted, pars1[1]+pars1[2]*lag(bmw),
pars1[1]+pars1[2]*(lag(bmw)-pars1[1]))
fitted1[1,2:3] = pars1[1]
fitted2 = cbind(as.numeric(fitted(garch2)),
pars2[1]+pars2[2]*lag(bmw-pars2[1]))
fitted2[1,2] = pars2[1]
# the garch likelihood:
# fGarch 1
sum(log(dnorm((bmw[,1]-fitted1[,1])/garch1 at h.t^0.5)/garch1 at h.t^0.5))
17757
# use the alternate representation (y_{t-1} - \mu)
sum(log(dnorm((bmw[,1]-fitted1[,3])/garch1 at h.t^0.5)/garch1 at h.t^0.5))
17752
#---------------------------------------------------------------------
I leave it to you to decide...you might want to take a look at this:
http://www.stat.pitt.edu/stoffer/tsa2/Rissues.htm
Regards,
Alexios
On 17/01/2014 20:40, Danielle Davidian wrote:
> Hi,
>
> I am trying to fit an arma(0,1) + garch(1,1) model using the functions
> available in two different packages (fGarch and rugarch). I am getting
> slightly different answers for the toy problem I was trying to solve and
> thought I'd see if I could get some help before I complicated things by
> adding exogenous variables.
>
> Code below:
>
> # Based on code from Ruppert 2011, Example 18.3 and 18.4 and Figure 18.4
> rm(list=ls(all=TRUE))
>
> library(fGarch)
> library(rugarch)
> data(bmw,package="evir")
>
> garch1 = garchFit(~arma(1,0)+garch(1,1),data=bmw,cond.dist="norm")
> options(digits=3)
> summary(garch1)
> options(digits=10)
>
>
> spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder =
> c(1, 1)),
> mean.model = list(armaOrder = c(1, 0),
> external.regressors = NULL),
> distribution.model = "norm")
> garch2 <- ugarchfit(spec=spec, data = bmw)
>
> options(digits=3)
> garch2 at fit$coef
> garch2 at fit$se.coef
>
> garch1 at fit$coef
> garch1 at fit$se.coef
>
> Any help or insight appreciated!
>
> Thanks,
>
> Danielle
>
> [[alternative HTML version deleted]]
>
> _______________________________________________
> R-SIG-Finance at 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.
>
>
More information about the R-SIG-Finance
mailing list