The reason you are getting a discrepancy is because you have not been diligent 
in either reading the documentation or the c-code which show the GARCH 
recursion:

1. The specification you use is the default one ARMA(1,1)-GARCH(1,1) but you 
filter the returns ONLY for a constant.
2. Your code does not include start-up recursion conditions.

Here is the correct way to do it:

#################################
library(rugarch)
data(sp500ret)
calcResiduals<-function(returns, mu){
# pass the correct mu which is estimated jointly in the ML procedure
 returns-mu
}

standardGarch<-function(returns, alpha, beta, omega, mu){
residuals<-calcResiduals(returns, mu)
sigmaVect<-rep(0, length(returns))
# recursion initialisation value h0
h0 = mean(residuals^2)
 for(i in 1:length(returns)){
   if(i==1){
     sigmaVect[i]<-h0  
   } else{
     sigmaVect[i]<-omega+alpha*residuals[i-1]^2+beta*sigmaVect[i-1]
   }
 }
 return(sigmaVect)
}

returns<-sp500ret[,1]                    #leave off the dates for now
# armaOrder=c(0,0) since default is (1,1)
spec<-ugarchspec(mean.model=list(armaOrder=c(0,0)),variance.model=list(model="sGARCH"))
fit<-ugarchfit(spec, sp500ret)
alpha<-coef(fit)["alpha1"]
beta<-coef(fit)["beta1"]
omega<-coef(fit)["omega"]
mu<-coef(fit)["mu"]
vals<-standardGarch(returns,alpha, beta, omega, mu)
# all.equal is the way to compare, NOT visually if you want exact results:
all.equal(as.numeric(sigma(fit)), sqrt(as.numeric(vals)))
################################


-Alexios 




On 14 Jul 2014, at 20:02, Tevlin, Dylan <dylan.tev...@kochind.com> wrote:

> Running R 2.1.14 on Windows 7.
> 
> My problem is the following:
> 
> I'm using the sp500ret data, approximating the parameters using ugarchfit, 
> and then calculating the conditional variances "by hand" and plotting on top 
> of the 3rd graph from plot.ugarchfit.  This task may seem silly but bear with 
> me.  All the following code is ready to run copy and paste.
> 
> The discrepancy I'm finding is consistent over different models, so let's 
> just look at a Garch(1,1)
> 
> #start code         ****************
> library(rugarch)
> data(sp500ret)
> 
> #by hand functions
> calcResiduals<-function(returns){
>      #returns a list of the returns residuals
> 
>      #returns             :a vector or time series of floats
> 
>      returns-mean(returns)
> }
> 
> standardGarch<-function(returns, alpha, beta, omega){
>      #standard garch per rugarch documentation
> 
>      #returns             :a vector or time series of floats
>      #alpha               :a float, estimation of the alpha parameter
>      #beta                :a float, estimation of the beta parameter
>      #omega               :a float, estimation of the omega parameter
> 
>      residuals<-calcResiduals(returns)
>      #now we have our iterative recursive method
>      sigmaVect<-rep(0, length(returns)+1)
> 
>      for(i in 1:length(returns)){
>             sigmaVect[i+1]<-omega+alpha*residuals[i]^2+beta*sigmaVect[i]
>      }
>      sigmaVect
> }
> 
> returns<-sp500ret[,1]                    #leave off the dates for now
> 
> spec<-ugarchspec(variance.model=list(model="sGARCH"))
> fit<-ugarchfit(spec, sp500ret)
> fit
> plot(fit)     #here press 3 then enter on the console
>             #then press 0 then enter to exit the graph menu
> 
> #I got the following as estimates for my parameters from ugarchfit
> #these should be changed to the appropriate ones you get in output
> #they should be near the same
> alpha<-.087817
> beta<-.904886
> omega<-.000001
> 
> vals<-standardGarch(returns,alpha, beta, omega )
> vals<-vals[2:(length(vals))]
> vals<-as.data.frame(vals)
> rownames(vals)<-rownames(sp500ret)        #attach the dates
> 
> #yes, the dates are most likely a bit off, that won't matter to much for the 
> visual
> #representation though.  My issue is a vertical shift difference
> 
> lines(sqrt(vals), col="purple")
> 
> #plot the by hand calculation on top of the ugarchfit graph.
> 
> #end code     *******************
> 
> On my machine, I see a slight discrepancy between my function's calculation 
> of the conditional variances and the ugarchfit calculation.  To my 
> understanding I implemented the formula used in ugarchfit for sGarch 
> correctly, so there should be very little difference in the output.
> 
> My first thoughts as to why this difference occurs is some difference in how 
> C and R treat numerics and the conversion back and forth (this occurs in 
> ugarchfit but not in mine), or possibly some truncation of the parameter 
> estimates for display purposes, leading me to use parameter values that are 
> slightly off.
> 
> Can anyone provide an explanation as to what I am seeing here?
> 
>       [[alternative HTML version deleted]]
> 
> _______________________________________________
> R-SIG-Finance@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.
> 

_______________________________________________
R-SIG-Finance@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.

Reply via email to