| arfimaforecast-methods {rugarch} | R Documentation | 
Method for forecasting from an ARFIMA model.
arfimaforecast(fitORspec, data = NULL, n.ahead = 10, n.roll = 0, out.sample = 0, external.forecasts = list(mregfor = NULL), ...)
fitORspec | 
  Either an ARFIMA fit object of class 
  | 
data | 
 Required if a specification rather than a fit object is supplied.  | 
n.ahead | 
 The forecast horizon.  | 
n.roll | 
 The no. of rolling forecasts to create beyond the first one (see details).  | 
out.sample | 
 Optional. If a specification object is supplied, indicates how many data points to keep for out of sample testing.  | 
external.forecasts | 
 A list with a matrix of forecasts for the external regressors in the mean.  | 
... | 
 .  | 
The forecast function has two dispatch methods allowing the user to call it with 
either a fitted object (in which case the data argument is ignored), or a 
specification object (in which case the data is required) with the parameters 
entered via the set.fixed<- methods on an ARFIMAspec 
object.
One step ahead forecasts are based on the value of the previous data, while 
n-step ahead (n>1) are based on the unconditional mean of the model.
The ability to roll the forecast 1 step at a time is implemented with the 
n.roll argument which controls how many times to roll the n.ahead 
forecast. The default argument of n.roll = 0 denotes no rolling beyond the first 
forecast and returns the standard n.ahead forecast. Critically, since n.roll 
depends on data being available from which to base the rolling forecast, the 
arfimafit function needs to be called with the argument 
out.sample being at least as large as the n.roll argument, or in the case 
of a specification being used instead of a fit object, the out.sample
argument directly in the forecast function.
A ARFIMAforecast object containing details of the ARFIMA 
forecast. See the class for details on the returned object and methods for 
accessing it and performing some tests.
Alexios Ghalanos
## Not run: 
# Long Horizon Forecast
data(sp500ret)	
fit = vector(mode = "list", length = 9)
dist = c("norm", "snorm", "std", "sstd", "ged", "sged", "nig", "ghyp", "jsu")
for(i in 1:9){
	spec = arfimaspec(mean.model = list(armaOrder = c(1,1), include.mean = TRUE, 
	arfima = FALSE), distribution.model = dist[i])
	fit[[i]] = arfimafit(spec = spec, data = sp500ret, solver = "solnp", 
	fit.control = list(scale = 1))
}
cfmatrix = matrix(NA, nrow = 9, ncol = 7)
colnames(cfmatrix) = c("mu", "ar1", "ma1", "sigma", "skew", "shape", "ghlambda")
rownames(cfmatrix) = dist
for(i in 1:9){
	cf = coef(fit[[i]])
	cfmatrix[i, match(names(cf), colnames(cfmatrix))] =  cf
}
umean = rep(0, 9)
for(i in 1:9){
	umean[i] = uncmean(fit[[i]])
}
forc = vector(mode = "list", length = 9)
for(i in 1:9){
	forc[[i]] = arfimaforecast(fit[[i]], n.ahead = 100)
}
lmean40 = sapply(forc, FUN = function(x) as.numeric(as.data.frame(x)[40,1]))
cfmatrix1 = cbind(cfmatrix, umean, lmean40)
colnames(cfmatrix1) = c(colnames(cfmatrix1[,1:7]), "uncmean", "forecast40")
# forecast with spec to check results
forc2 = vector(mode = "list", length = 9)
for(i in 1:9){
	spec = arfimaspec(mean.model = list(armaOrder = c(1,1), include.mean = TRUE, 
	arfima = FALSE), distribution.model = dist[i])
	setfixed(spec) = as.list(coef(fit[[i]]))
	forc2[[i]] = arfimaforecast(spec, data = sp500ret, n.ahead = 100)
}
lmean240 = sapply(forc2, FUN = function(x) as.numeric(as.data.frame(x)[40,1]))
cfmatrix2 = cbind(cfmatrix, umean, lmean240)
colnames(cfmatrix2) = c(colnames(cfmatrix2[,1:7]), "uncmean", "forecast40")
cat("\nARFIMAforecast from ARFIMAfit and ARFIMAspec check:")
cat("\nFit\n")	
print(cfmatrix1, digits = 4)
cat("\nSpec\n")	
print(cfmatrix2, digits = 4)
# methods and slots
slotNames(forc[[1]])
showMethods(classes="ARFIMAforecast")
# summary
show(forc[[1]])
# Extractor Functions
# as array (array dimension [3] is 1 since n.roll = 0 i.e. no rolling beyond 
# the first)
as.array(forc[[1]])
# as.data.frame
as.data.frame(forc[[1]])
# as.list
as.list(forc[[1]])
# Rolling Forecast
data(sp500ret)
fit = vector(mode = "list", length = 9)
dist = c("norm", "snorm", "std", "sstd", "ged", "sged", "nig", "ghyp", "jsu")
for(i in 1:9){
	spec = arfimaspec(mean.model = list(armaOrder = c(1,1), include.mean = TRUE, 
			arfima = FALSE), distribution.model = dist[i])
	fit[[i]] = arfimafit(spec = spec, data = sp500ret, solver = "solnp", 
			out.sample = 1000, fit.control = list(scale = 1))
}
cfmatrix = matrix(NA, nrow = 9, ncol = 7)
colnames(cfmatrix) = c("mu", "ar1", "ma1", "sigma", "skew", "shape", "ghlambda")
rownames(cfmatrix) = dist
for(i in 1:9){
	cf = coef(fit[[i]])
	cfmatrix[i, match(names(cf), colnames(cfmatrix))] =  cf
}
forc = vector(mode = "list", length = 9)
for(i in 1:9){
	forc[[i]] = arfimaforecast(fit[[i]], n.ahead = 1, n.roll = 999)
}
rollforc = sapply(forc, FUN = function(x) t(unlist(as.data.frame(x, 
	rollframe = "all", aligned = FALSE))))
# forecast performance measures:
fpmlist = vector(mode = "list", length = 9)
for(i in 1:9){
	fpmlist[[i]] = fpm(forc[[i]], summary = FALSE)
}
par(mfrow = c(1,2))
dd = rownames(tail(sp500ret, 1250))
clrs = rainbow(9, alpha = 1, start = 0.4, end = 0.95)
plot(as.Date(dd), tail(sp500ret[,1], 1250), type = "l", 
	ylim = c(-0.02, 0.02), col = "lightgrey", ylab = "", xlab = "", 
	main = "Rolling 1-ahead Forecasts\nvs Actual")
for(i in 1:9){
	tmp = tail(sp500ret[,1], 1250)
	tmp[251:1250] = rollforc[1:1000,i]
	lines(as.Date(dd), c(rep(NA, 250), tmp[-(1:250)]), col = clrs[i])
}
legend("topleft", legend = dist, col = clrs, fill = clrs, bty = "n")
# plot deviation measures and range
tmp = vector(mode = "list", length = 9)
for(i in 1:9){
	tmp[[i]] = fpmlist[[i]][,"AE"]
	names(tmp[[i]]) = dist[i]
}
boxplot(tmp, col = clrs, names = dist, range  = 6, notch = TRUE, 
		main = "Rolling 1-ahead Forecasts\nAbsolute Deviation Loss")
# fpm comparison
compm = matrix(NA, nrow = 3, ncol = 9)
compm = sapply(fpmlist, FUN = function(x) c(mean(x[,"SE"]), mean(x[,"AE"]), 
	mean(x[,"DAC"])))
colnames(compm) = dist
rownames(compm) = c("MSE", "MAD", "DAC")
cat("\nRolling Forecast FPM\n")
print(compm, digits = 4)
cat("\nMethods Check\n")
as.data.frame(forc[[1]], rollframe = 0)
as.data.frame(forc[[1]], rollframe = 999)
t(as.data.frame(forc[[1]], rollframe = "all", aligned = FALSE))
fpm(forc[[1]], summary = TRUE)
show(forc[[1]])
## End(Not run)