[R-SIG-Finance] Rugarch package using external regressors, a forecasting doubt

alexios alexios at 4dscape.com
Thu Jun 25 22:21:04 CEST 2015


As this appears to be a general point of confusion, see below a
commented example:

#########################
library(rugarch)
library(xts)
data(sp500ret)
spx<-xts(sp500ret, as.Date(rownames(sp500ret)))
xreg<-xts(rnorm(nrow(spx)), index(spx))
colnames(xreg)<-"xreg"
# assume xreg is an actual series, so we lag it
# as we would do in a real application
xreg = lag(xreg,1)
inputs<-na.omit(cbind(spx, xreg, join="left"))
# real time forecasting
spec<-ugarchspec(mean.model=list(external.regressors=inputs[1:2000,2]))
fit<-ugarchfit(spec, inputs[1:2000,1])
# 2 ways to do real-time forecasting (ugarchforecast and ugarchfilter)
# Example: forecast points 2001:2020
xforc = xts(matrix(NA, ncol=2, nrow=20), index(inputs[2001:2020]))
sforc = xts(matrix(NA, ncol=2, nrow=20), index(inputs[2001:2020]))
for(i in 1:20){
   # Forecast(T+1)|Information(T)
   # 1. Create a similar spec as you used in estimation
   # and add the lagged regressor upto time T
specf1<-ugarchspec(mean.model=list(external.regressors=inputs[1:(2000+i-1),2]))
   # Pass the estimated coefficients from the estimation upto time 2000
   setfixed(specf1)<-as.list(coef(fit))
   # 2. Forecast using ugarchforecast on a specification with fixed
parameters
   # where n.old is used in order to recreate the correct start-up
conditions
   # used in the fitting routine
   f1<-ugarchforecast(specf1, inputs[1:(2000+i-1),1], n.ahead=1, n.old=2000)
   # 3. Forecast using ugarchfilter on a specification with fixed 
parameters.
   # For this method, append a new row to the end of the data with zeros,
   # as you would do with related filters. This forces the routine to
   # output the value at time T+1
   newdat<-rbind(inputs[1:(2000+i-1),],xts(matrix(0, nrow=1, ncol=2),
tail(move(index(inputs[1:(2000+i-1)])),1)))
   specf2<-ugarchspec(mean.model=list(external.regressors=newdat[,2]))
   setfixed(specf2)<-as.list(coef(fit))
   f2<-ugarchfilter(specf2, newdat[,1], n.old=2000)
   # fitted = estimated conditional mean values for uGARCHfit objects
   # fitted = forecast/filtered conditional mean values for
uGARCHforecast/uGARCHfilter objects
   xforc[i,1] = as.numeric(fitted(f1))
   xforc[i,2] = as.numeric(tail(fitted(f2),1))
   # sigma = conditional sigma values (fitted/forecast etc)
   sforc[i,1] = as.numeric(sigma(f1))
   sforc[i,2] = as.numeric(tail(sigma(f2),1))
}
# check
all.equal(xforc[,1], xforc[,2])
all.equal(sforc[,1], sforc[,2])
# check that the 1-ahead forecast directly from the fitted object is also
# the same
all.equal(as.numeric(xforc[1,1]), as.numeric(fitted(ugarchforecast(fit,
n.ahead=1))))
all.equal(as.numeric(sforc[1,1]), as.numeric(sigma(ugarchforecast(fit,
n.ahead=1))))
# check the filter values vs the fitted values (i.e. why we use the
n.old argument)
all.equal(fitted(fit), fitted(f2)[1:2000])
all.equal(sigma(fit), sigma(f2)[1:2000])
#########################


Regards,

Alexios

On 25/06/2015 21:11, Diego Ignacio Acuña Rozas wrote:
> Hi all, I'm using the rugarch package (which is btw an excellent piece
> of software). I'm
> using the A-PARCH(1,1) model with an external regressor (the Yang-Zhang
> volatility proxy) and I've a doubt about how to perform forecasting
> using the model:
>
>   * Suppose I've n observations for the returns of a financial serie and
> for the external regressor
>   * Then, I use ugarchspec with an A-PARCH(0,1) model with the external
> regressor, the ugarchspec and ugarchfit steps work pretty well.
>   * Now I want to do forecasting. I don't quite fully understand the
> limitation of this process. When I use ugarchforecast, the main
> limitation is that I only can forecast 1-step ahead due to the external
> regressor data limitation (I don't have more than n data for the
> external regressor)???
>
> Now, if I fit a model with the n external regressor data and if I do a
> 1-step ahead forecast for t+1, then the next day I recieve new data for
> the external regressor, how to use the rugarch package to use this new
> data and generate a new 1-step ahead forecast from t+1 to t+2? is this
> possible?
>
> Thanks in advance, I've read a lot of the rugarch documentation and from
> this mailing list, but I'm a bit lost regarding to my doubts.
> Any help will be really appreciated.
>
> Best,
>
>



More information about the R-SIG-Finance mailing list