[R] windowing strategies

Luis Torgo ltorgo at liacc.up.pt
Fri Sep 3 18:59:59 CEST 2004


On Fri, 2004-09-03 at 15:37, jmoreira at fe.up.pt wrote:
> Hello to everybody,
> 
> Does anyone has implemented a function for evaluating models using windowing 
> strategies, such as growing window or sliding window ones?
> The aim is to evaluate regression models on a time series data. I do not use 
> cross-validation once data sorted in a radom way does not make sense when 
> evaluating time series.
> 

I include two functions I've written that I think accomplish what you
want. They return a list with probably too many unnecessary components
for you (they were useful in the context I've used them), so you will
probably want to change that part.

Hope it helps,

Luis Torgo

#===================================================================
# This function allows the execution of sliding window tests using 
# any algorithm.
# Example:
# > p.rt <- sliding.window.testing(exp[1:800,],700,'rpart',learner.pars=list(fk5 ~ .))
# > p.nn <- sliding.window.testing(exp[1:800,],700,'nnet',
#                                  learner.pars=list(fk5 ~ .,size=10,linout=T),
#                                  relearn.step=7)
# Note: This last example only re-learns a new model every 7 cases
#---------------------------------------------------------------------
sliding.window.testing <- function(orig.data, window.size,
                                   learner, learner.pars,
                                   relearn.step=1, test.pos=window.size+1) {
  init.test <- test.pos
  n <- nrow(orig.data)
  preds <- vector()
  while (test.pos <= n) {
    cat('*')
    learner.pars$data <- orig.data[(test.pos-window.size):(test.pos-1),]
    model <- do.call(learner,learner.pars)
    preds <- c(preds,predict(model,orig.data[test.pos:min(n,test.pos+relearn.step-1),]))
    test.pos <- test.pos+relearn.step
  }
  cat('\n')
  list(train.period=c(test.pos-relearn.step-window.size,test.pos-relearn.step-1),
       model.call=list(func=learner,pars=learner.pars),
       model=model,
       test.period=c(init.test,n),
       preds=preds,
       preds.close=NULL,preds.ret=NULL,err.ret=NULL,weigh.preds=NULL)
}

# ======================================================================
# This function allows the execution of growing window tests using any
# algorithm.
# Example:
# > p.rt <- growing.window.testing(exp[1:800,],700,'rpart',learner.pars=list(fk5 ~ .))
# > p.nn <- growing.window.testing(exp[1:800,],700,'nnet',
#                                  learner.pars=list(fk5 ~ .,size=10,linout=T),
#                                  relearn.step=7)
# Note: This last example only re-learns a new model every 7 cases
# ----------------------------------------------------------------------
growing.window.testing <- function(orig.data, 
                                   learner, learner.pars,
                                   relearn.step=1, test.pos) {
  init.test <- test.pos
  n <- nrow(orig.data)
  preds <- vector()
  while (test.pos <= n) {
    cat('*')
    learner.pars$data <- orig.data[1:(test.pos-1),]
    model <- do.call(learner,learner.pars)
    preds <- c(preds,predict(model,orig.data[test.pos:min(n,test.pos+relearn.step-1),]))
    test.pos <- test.pos+relearn.step
  }
  cat('\n')
  list(model.call=list(func=learner,pars=learner.pars),
       model=model,
       test.period=c(init.test,n),
       preds=preds)
}

-- 
Luis Torgo
  FEP/LIACC, University of Porto   Phone : (+351) 22 607 88 30
  Machine Learning Group           Fax   : (+351) 22 600 36 54
  R. Campo Alegre, 823             email : ltorgo at liacc.up.pt
  4150 PORTO   -  PORTUGAL         WWW   : http://www.liacc.up.pt/~ltorgo




More information about the R-help mailing list