3

I have been working with the two packages fGarch and rugarch to fit a GARCH(1,1) model to my exchange rate time series consisting of 3980 daily log-returns.

fx_rates <- data.frame(read.csv("WMCOFixingsTimeSeries.csv", header=T, sep=";", stringsAsFactors=FALSE))
#data series
EURUSD <- ts(diff(log(fx_rates$EURUSD), lag=1), frequency=1)

#GARCH(1,1)
library(timeSeries)
library(fGarch)
x <- EURUSD
fit <- garchFit(~garch(1,1), data=x, cond.dist="std", trace=F, include.mean=F)
fit@fit$matcoef

library(rugarch)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
               mean.model=list(armaOrder=c(0,0), include.mean=F), distribution.model="std")
gfit <- ugarchfit(spec, x, solver="hybrid", fit.control=list(stationarity=0))
gfit@fit$matcoef

The two models show the following results:

fGarch:

fit@fit$matcoef 
         Estimate   Std. Error    t value     Pr(>|t|) 
omega  1.372270e-07 6.206406e-08   2.211054 2.703207e-02 
alpha1 2.695012e-02 3.681467e-03   7.320484 2.471356e-13 
beta1  9.697648e-01 3.961845e-03 244.776060 0.000000e+00 
shape  8.969562e+00 1.264957e+00   7.090804 1.333378e-12

rugarch:

gfit@fit$matcoef
           Estimate   Std. Error     t value     Pr(>|t|)
omega  1.346631e-07 3.664294e-07   0.3675008 7.132455e-01
alpha1 2.638156e-02 2.364896e-03  11.1554837 0.000000e+00
beta1  9.703710e-01 1.999087e-03 485.4070764 0.000000e+00
shape  8.951322e+00 1.671404e+00   5.3555696 8.528729e-08

I have found a thread http://r.789695.n4.nabble.com/Comparison-between-rugarch-and-fGarch-td4683770.html on why the estimates are not identical, however I can't figure out the big difference in the standard errors and therethrough the different significancs for omega. The difference is not caused by the stationarity constraint as omega remains insignificant. Does anybody know how the standard errors of the estimated parameters (omega, alpha, beta and nu (shape)) are calculated?

philippe
  • 47
  • 7

1 Answers1

1

If H is your Hessian and G is your gradient, let C = H^-1 (G^T * G) H^-1, that is, the inverse of H multiplied by the result of matrix multiplying G transpose with G, followed by multiplying the result with H inverse again. The standard error coefficients are then the sqrt(diag(C)), the square roots of its diagonal entries. You can see this by perusing through the code of fGarch:::.garchFit:

# Standard Errors and t-Values:
if (DEBUG) print("Standard Errors and t-Values ...")
fit$cvar <-
    if (robust.cvar)
        (solve(fit$hessian) %*% (t(fit$gradient) %*% fit$gradient) %*%
         solve(fit$hessian))
    else
        - solve(fit$hessian)
fit$se.coef = sqrt(diag(fit$cvar))
fit$tval = fit$coef/fit$se.coef
fit$matcoef = cbind(fit$coef, fit$se.coef,
Robert Krzyzanowski
  • 9,294
  • 28
  • 24