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.