0
votes

I have a data set and want to essentially fit a linear model with a rolling time window, find the fitted values and calculate the errors in the estimate. I have functions which calculate the error and I have the start of the algorithm, but I keep getting null time series with the algorithm below. Can anybody spot a fix for it?

rollerOLS <- function(data, measure, predict, predictor){
  error <- c()
  m <- dim(data)[1]
  for(i in 1:(floor(m/142)-10)){
    data.new <- as.data.frame(data[c((1+(142*(i-1))):((i+9)*142)),])
    data.pred <- as.data.frame(data[c((1+(142*(i+9))):((i+10)*142)-1),])
    n <- dim(data.new)[1]
    k <- dim(data.pred)[1]
    x <- data.new[-1,predictor]
    y <- data.new[-n, predict]
    mod <- lm(y ~ x)
    ts <- predict.lm(mod, newdata = data.frame(data.pred[, predictor]), interval="none")
    actual <- data.pred[-k,predict]
    error[i] <- measure(ts, actual)
  }
  return(mod)
}

Note that 142 is specific to my data set.

1

1 Answers

0
votes

The problem was in the ts line and here is the fix.

rollerOLS <- function(data, measure, predict, predictor){
  error <- c()
  m <- dim(data)[1]
  for(i in 1:(floor(m/142)-10)){
    data.new <- as.data.frame(data[c((1+(142*(i-1))):((i+9)*142)),])
    data.pred <- as.data.frame(data[c((1+(142*(i+9))):((i+10)*142)-1),])
    n <- dim(data.new)[1]
    k <- dim(data.pred)[1]
    x <- data.new[-1,predictor]
    y <- data.new[-n, predict]
    mod <- lm(y ~ x)
    ts <- mod$coefficients[1] + mod$coefficients[2]*data.pred[-1,predictor] 
    actual <- data.pred[-k,predict]
    error[i] <- measure(ts, actual)
  }
  return(error)
}