[R-SIG-Finance] rugarch - question w.r.t. (robust) SE and bias in estimates of a particular MA(1)-eGARCH(1, 1)-STD model

alexios ghalanos alexios at 4dscape.com
Thu Jul 10 13:22:04 CEST 2014


Hi Johannes,

It is most probably related to the bounds I have defaulted on the eGARCH
model for the gamma. Should probably by (0,1) NOT (-1,1).

Try:

################################
spec1 = ugarchspec(variance.model=list( model="eGARCH",
garchOrder=c(1,1)), mean.model=list( armaOrder = c(0,1) ),
distribution.model="std")

setbounds(spec1)<-list(gamma1=c(0,1))

fit1 = ugarchfit( spec=spec1, data=mydata , solver="solnp",
fit.control=list(scale=1 )

sim = ugarchsim(fit1, n.sim=1000)

fit2 = ugarchfit(spec1, fitted(sim))
cbind(coef(fit1),coef(fit2))
################################

I'll need to investigate why I had the bounds set as I did in the first
place.

Regards,

Alexios

On 10/07/2014 11:29, Johannes Moser wrote:
> Dear all,
> 
> I am currently experiencing troubles with a particular 
> ARMA(0,1)-eGARCH(1,1)-STD (i.e. Student's t distribution) model that 
> should be fitted to a series of business-daily log-returns of the DACX 
> Performance index (data downloaded from bloomberg).
> Since I have done similar analyses in the past without any problems I 
> think that there might be a problem with the particular model and the 
> particular data.
> 
> The sample comprises 390 observations and spans the period (1992-01-02 , 
> 1996-10-01) with the convention yyyy-mm-dd.
> Estimation is done by means of the rugarch-package.
> I have uploaded the data and a plot at 
> http://www.file-upload.net/download-9194647/eGARCH.zip.html
> 
> Thanks a lot for any ideas or suggestions in advance!
> 
> 
> ---------------------------
> Problems:
> 
> First of all I can't obtain robust standard errors, even when setting 
> the option "fit.control=list(scale=1)" as recommended in related threads.
> No parameter is at its limit, but persistence of the estimated model is 
> very high (0.9892).
> 
> Secondly the t values and p-values according to the non-robust estimates 
> seem to be too good to be true for such a small sample.
> 
> Conditional Variance Dynamics 	
> -----------------------------------
> GARCH Model	: eGARCH(1,1)
> Mean Model	: ARFIMA(0,0,1)
> Distribution	: std
> 
> Optimal Parameters
> ------------------------------------
>          Estimate  Std. Error  t value Pr(>|t|)
> mu      0.000481    0.000000  2915.43        0
> ma1     0.084402    0.000724   116.58        0
> omega  -0.107101    0.000064 -1670.67        0
> alpha1 -0.090824    0.000059 -1549.21        0
> beta1   0.989236    0.000231  4290.18        0
> gamma1 -0.073881    0.000131  -565.25        0
> shape   6.738614    0.010256   657.02        0
> 
> 
> Robust Standard Errors:
>          Estimate  Std. Error  t value Pr(>|t|)
> mu      0.000481         NaN      NaN      NaN
> ma1     0.084402         NaN      NaN      NaN
> omega  -0.107101         NaN      NaN      NaN
> alpha1 -0.090824         NaN      NaN      NaN
> beta1   0.989236         NaN      NaN      NaN
> gamma1 -0.073881         NaN      NaN      NaN
> shape   6.738614         NaN      NaN      NaN
> 
> 
> Thirdly  when investigating the small sample properties via the 
> ugarchdistribution function and according to the plots as suggested on 
> this website 
> http://unstarched.net/2012/12/26/garch-parameter-uncertainty-and-data-size/
> there are weird results for the parameter "gamma1". There seems to ba a 
> bias that emerges as the sample size increases from 190 to 2990.
> (Results schown here are based on m.sim=100. I have repeated the 
> exercise a couple of times, also with m.sim=1000 but results did not 
> change substantially.)
> 
> *------------------------------------*
> *    GARCH Parameter Distribution    *
> *------------------------------------*
> Model : eGARCH
> No. Paths (m.sim) : 100
> Length of Paths (n.sim) : 190
> Recursive : TRUE
> Recursive Length : 2990
> Recursive Window : 200
> 
> Coefficients: True vs Simulation Mean (Window-n)
>                      mu      ma1    omega    alpha1   beta1     gamma1  shape
> true-coef   0.00048106 0.084402 -0.10710 -0.090824 0.98924 -0.0738815 6.7386
> window-190  0.00028241 0.075118 -0.81085 -0.126335 0.91744 -0.0953088 8.1002
> window-390  0.00021380 0.083615 -0.21620 -0.112777 0.97757 -0.0385150 6.0713
> window-590  0.00030893 0.083906 -0.23531 -0.103314 0.97612 -0.0117405 6.3599
> window-790  0.00033639 0.081546 -0.12463 -0.094743 0.98720 -0.0093634 6.1996
> window-990  0.00035573 0.082678 -0.12063 -0.093973 0.98767  0.0021929 6.1567
> window-1190 0.00037253 0.081575 -0.11090 -0.091895 0.98865  0.0010467 5.9618
> window-1390 0.00040460 0.080915 -0.11374 -0.093049 0.98840  0.0044305 5.8192
> window-1590 0.00039122 0.080130 -0.11148 -0.090192 0.98862  0.0039467 5.8280
> window-1790 0.00041750 0.083254 -0.10783 -0.090696 0.98902  0.0049624 5.6801
> window-1990 0.00042600 0.084380 -0.10752 -0.090184 0.98906  0.0077372 5.7210
> window-2190 0.00042967 0.082424 -0.10863 -0.090388 0.98894  0.0113595 5.6812
> window-2390 0.00043955 0.082570 -0.10982 -0.091506 0.98884  0.0093621 5.7262
> window-2590 0.00043285 0.083678 -0.10853 -0.091099 0.98896  0.0097338 5.7423
> window-2790 0.00044481 0.082849 -0.10450 -0.089724 0.98938  0.0114610 5.6936
> window-2990 0.00045002 0.081756 -0.10647 -0.090193 0.98919  0.0119148 5.7327
> 
> window-390 no. of non-converged fits: 3
> 
> window-990 no. of non-converged fits: 1
> 
> 
> One can see that the mean of the gamma1 parameter estimates is actually 
> moving away from the true value as the sample size increases - which is 
> very counter-intuitive.
> The pattern is even more clear in the uploaded plot.
> Results can be replicated in R so it is not due to a particular Monte 
> Carlo run.
> Maybe estimation is very biased and inconsistent here.
> But it would be the first time that I encounter such big problems.
> 
> I have tried to reproduce the results using STATA (version 11.2) but the 
> model did not converge (message: flat log likelihood encountered, cannot 
> find uphill direction).
> 
> R and rugarch are up to date. The R syntax is given as:
> 
> 
> ############################################################
> #
> #
> require('rugarch')
> require('parallel')
> 
> setwd("D:/MA")
> mydata = read.table("mydata.txt" , header=T)
> 
> spec1 = ugarchspec(
>       variance.model=list( model="eGARCH", garchOrder=c(1,1), 
> submodel=NA ),
>       mean.model=list( armaOrder = c(0,1) ), distribution.model="std" )
> 
> fit1 = ugarchfit( spec=spec1, data=mydata , solver="solnp" , 
> fit.control=list(scale=1) )
> fit1
> persistence(fit1)
> 
> cl = makePSOCKcluster(4)       # please adjust the number of cores to be 
> used for parallel processing
> mod = ugarchdistribution( fitORspec=fit1 , n.sim=190, n.start=250, 
> m.sim=100, recursive=TRUE,
>       recursive.length=2990, recursive.window=200, rseed=654911, 
> solver="solnp", cluster=cl )
> stopCluster(cl)
> mod
> 
> parvals = 
> t(as.data.frame(mod at model$pars)$Level[as.data.frame(mod at model$pars)$Include==1])
> colnames(parvals) = 
> rownames(mod at model$pars)[as.data.frame(mod at model$pars)$Include==1]
> rownames(parvals) = ""
> parvals                                  # names and values for the 
> parameter estimates
> 
> mu = sapply(mod at dist, FUN = function(x) x$simcoef[, 1])
> mu$details = NULL
> ma1 = sapply(mod at dist, FUN = function(x) x$simcoef[, 2])
> ma1$details = NULL
> omega = sapply(mod at dist, FUN = function(x) x$simcoef[, 3])
> omega$details = NULL
> alpha1 = sapply(mod at dist, FUN = function(x) x$simcoef[, 4])
> alpha1$details = NULL
> beta1 = sapply(mod at dist, FUN = function(x) x$simcoef[, 5])
> beta1$details = NULL
> gamma1 = sapply(mod at dist, FUN = function(x) x$simcoef[, 6])
> gamma1$details = NULL
> shape = sapply(mod at dist, FUN = function(x) x$simcoef[, 7])
> shape$details = NULL
> 
> n = length(mod at dist) - 1
> clr <- rainbow(n, alpha = 1, start = 0.55, end = 0.8)
> 
> par(mfrow = c(2, 4))
> boxplot(na.omit(mu), names =  (c(1:n)*200-10) , col = clr)
> abline(h = parvals[1], col = 2)
> title('Mu')
> boxplot(na.omit(ma1), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[2], col = 2)
> title('MA 1')
> boxplot(na.omit(omega), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[3], col = 2)
> title('Omega')
> boxplot(na.omit(alpha1), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[4], col = 2)
> title('Alpha 1')
> boxplot(na.omit(beta1), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[5], col = 2)
> title('Beta 1')
> boxplot(na.omit(gamma1), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[6], col = 2)
> title('Gamma 1')
> boxplot(na.omit(shape), names = (c(1:n)*200-10), col = clr)
> abline(h = parvals[7], col = 2)
> title('Shape')
> #
> #
> ################################################################
> 
> 
> 
> 
> 	[[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