[R-SIG-Finance] Hessian in GARCH-Models (rugarch-package)
Lin23
linusholtermann at gmx.de
Wed Feb 8 23:30:00 CET 2012
Hello,
i wrote a code for a GJR-GARCH-Model. With my current data and model there
is something wrong with the robust standard errors and the p-value. I use
maxLik-package with BHHH-algorithm. The coefficients in my model are equal
to those in the rugarch-package or EViews. But the p-value for the intercept
in the variance-equation is way too high in my model. When i estimate my
model with non-robust standard errors (-crossprod(fit$gradientObs))
everything is all right. So I think there is something wrong with the
hessian that is computed by the maxLik-package. I want to compute my own
hessian. I used the code for the hessian from the rugarch-package
(rugarch-numderiv.R). But I failed. Maybe someone can help me with my
problem. I would appreciate it very much.
My GARCH-code:
garch<-function(y,Di,Mi,Do,Fr,x1,x2,x3,x4,Dum,backcast){
n<-length(y)
reg <- lm(y ~ Di + Mi + Do + Fr + x1 + x2 + x3 + x4+(Dum:x3)+(Dum:x4))
#Start Values
exp.smooth <- function(lambda){
smooth <- as.vector(1:n-1)
init.hh <- lambda^n*mean(reg$res^2)+(1-lambda)*sum(lambda^smooth*reg$res^2)
# Backcast initial variance
return(init.hh)
}
init.hh <- exp.smooth(lambda=backcast)
LLH <- function(par){ # Log.Likelihood
a <-par[1]
di <- par[2]
mi <- par[3]
do <- par[4]
fr <- par[5]
b1 <- par[6]
b2 <- par[7]
b3 <- par[8]
b4 <- par[9]
b5 <- par[10]
b6 <- par[11]
omega <- par[12]
alpha <- par[13]
beta <- par[14]
gjr <- par[15]
dummy <- par[16]
res<-array(n)
hh<-array(n)
ll<-numeric(n)
for (i in 1:n){
res[i]<-y[i]-a-di*Di[i]-mi*Mi[i]-do*Do[i]-fr*Fr[i]-b1*x1[i]-b2*x2[i]-b3*x3[i]-b4*x4[i]-b5*Dum[i]*x3[i]-b6*Dum[i]*x4[i]
#Mean-Equation
}
hh[1] <- init.hh
for(i in 2:n){
hh[i] <-
(omega+alpha*res[i-1]^2+beta*(hh[i-1]-omega)+ifelse(res[i-1]<0,
gjr*res[i-1]^2, 0))*(1+dummy*Dum[i]) #Variance-Equation
}
for (i in 1:n){
ll[i] <- -1/2*log(2*pi*hh[i]) - 1/2*res[i]^2/hh[i] #
Log.Likelihood
}
ll
}
param <- c(reg$coef, omega = 0.1*mean(reg$res^2),alpha = 0.15, beta =
0.6,gjr=0.05,dummy=0)
fit<-maxLik(start=param,
logLik=LLH,method="BHHH",finalHessian=TRUE,iterlim=2500) # fit with
maxLik-package
grad <- fit$gradientObs
robust.vcov <-
solve(fit$hessian)%*%t(grad)%*%grad%*%solve(fit$hessian)
se.coef <- sqrt(diag(robust.vcov)) # robust standard errors
tval <- fit$estimate/se.coef
matcoef <- cbind(fit$estimate, se.coef, tval, 2*(1-pnorm(abs(tval))))
dimnames(matcoef) <- list(names(tval), c("Estimate", "Std. Error","t
value", "Pr(>|t|)"))
cat("\n---------------------------------------------------------------------\n")
#Output
cat("\nKoeffizienten\n")
cat("\n---------------------------------------------------------------------\n")
printCoefmat(matcoef, digits = 6, signif.stars=TRUE)
}
EST1 <-
garch(y=dat2$r_csi,Di=dat2$Di,Mi=dat2$Mi,Do=dat2$Do,Fr=dat2$Fr,x1=dat2$r_t,x2=dat2$r_sp_l,x3=dat2$r_csi_l,x4=dat2$r_csi_l_3,Dum=dat2$f,backcast=0.7)
See below for the hessian-code from the rugarch-package. I dont know what I
to enter for x and for ... in my case. I hope someone can help.
hessian-code from rugarch-package:
.hessian2sided = function(f, x, ...)
{
n = length(x)
fx = f(x, ...)
eps = .Machine$double.eps
# Compute the stepsize (h)
h = eps^(1/3)*apply(as.data.frame(x), 1,FUN = function(z) max(abs(z),
1e-2))
xh = x+h
h = xh-x
if(length(h) == 1) ee = matrix(h, ncol = 1, nrow = 1) else ee =
as.matrix(diag(h))
# Compute forward and backward steps
gp = vector(mode = "numeric", length = n)
gp = apply(ee, 2, FUN = function(z) f(x+z, ...))
gm = vector(mode="numeric",length=n)
gm = apply(ee, 2, FUN = function(z) f(x-z, ...))
H = h%*%t(h)
Hm = H
Hp = H
# Compute "double" forward and backward steps
for(i in 1:n){
for(j in i:n){
Hp[i,j] = f(x+ee[,i]+ee[,j], ...)
Hp[j,i] = Hp[i,j]
Hm[i,j] = f(x-ee[,i]-ee[,j], ...)
Hm[j,i] = Hm[i,j]
}
}
#Compute the hessian
for(i in 1:n){
for(j in i:n){
H[i,j] = ( (Hp[i,j]-gp[i]-gp[j]+fx+fx-gm[i]-gm[j]+Hm[i,j]) /H[i,j] )/2
H[j,i] = H[i,j]
}
}
return(H)
}
Thank you all!!!
--
View this message in context: http://r.789695.n4.nabble.com/Hessian-in-GARCH-Models-rugarch-package-tp4371133p4371133.html
Sent from the Rmetrics mailing list archive at Nabble.com.
More information about the R-SIG-Finance
mailing list