I am trying to make a rolling window forecast, but I am having troubles doing so. My goal is to compute one-step ahead forecast by using fixed number of observations (1444 in my case).

That means, that to compute Forecast for observation 1445 I will use AR(1) model with data from observations 1-1444. To compute forecast for observation 1446 I will use AR(1) model with data from observations 2-1445 and so on.

However, I can't get it to work in R, so any help would be greatly appreciated. Cheers

Below is the code that I tried:

data.xts$AR1EX_Forecast<-NA
for (s in data.xts$t) {
if(s>=1444 && s<nrow(data.xts)){
model.1=Arima(data.xts$RealizedVariance, order = c(1,0,0), seasonal = FALSE)
forecast=forecast(model.1,h=1)
data.xts$AR1EX_Forecast<- forecast$fitted
}
}

The h argument to forecast can take a range ahead based on the fit of the data. It would seem, therefore, in order to generate n period-ahead forecasts, it would be necessary first to generate n fits.

I'd prefer to do this by mapping, rather than looping, using purrr:map I'd first write a function to generate the fits by successively subsetting data.xts, taking as its argument seq(1445:nrow(data.xts) and then another function to do the fit, taking as its argument the successive fits.

The resulting object from the first function, say fits would be fed to the second function, say aheads with

The tsCV() function in the forecast package is designed to do exactly this. See the examples in the help file. It returns the errors, rather than the forecasts, but you can easily compute the forecasts by substracting the errors from the data.

Something like this should do what you want:

library(forecast)
#> Registered S3 method overwritten by 'quantmod':
#> method from
#> as.zoo.data.frame zoo
data.xts <- data.frame(
t = seq(2000),
RealizedVariance = ts(rnorm(2000))
)
far1 <- function(x, h){forecast(Arima(x, order=c(1,0,0), seasonal=FALSE), h=h)}
e <- tsCV(data.xts$RealizedVariance, far1, h=1)
fc <- c(NA, data.xts$RealizedVariance[2:2000] - e[1:1999])

^{Created on 2020-03-26 by the reprex package (v0.3.0)}