Forecast accuracy: no MASE with two vectors as arguments Forecast accuracy: no MASE with two vectors as arguments r r

Forecast accuracy: no MASE with two vectors as arguments


The MASE requires the historical data to compute the scaling factor. It is not computed from the future data as in the answer by @FBE. So if you don't pass the historical data to accuracy(), the MASE cannot be computed. For example,

> library(forecast)> fcast <- snaive(window(USAccDeaths,end=1977.99))> accuracy(fcast$mean,USAccDeaths)         ME        RMSE         MAE         MPE        MAPE        ACF1 225.1666667 341.1639391 259.5000000   2.4692164   2.8505546   0.3086626   Theil's U   0.4474491 

But if you pass the whole fcast object (which includes the historical data), you get

> accuracy(fcast,USAccDeaths)         ME        RMSE         MAE         MPE        MAPE        MASE 225.1666667 341.1639391 259.5000000   2.4692164   2.8505546   0.5387310        ACF1   Theil's U   0.3086626   0.4474491 


The paper on MASE clearly explains how to find it (even for non time-series data)

computeMASE <- function(forecast,train,test,period){  # forecast - forecasted values  # train - data used for forecasting .. used to find scaling factor  # test - actual data used for finding MASE.. same length as forecast  # period - in case of seasonal data.. if not, use 1  forecast <- as.vector(forecast)  train <- as.vector(train)  test <- as.vector(test)  n <- length(train)  scalingFactor <- sum(abs(train[(period+1):n] - train[1:(n-period)])) / (n-period)  et <- abs(test-forecast)  qt <- et/scalingFactor  meanMASE <- mean(qt)  return(meanMASE)}


To help myself a little bit, I created a function to calculate the MASE, as described by Hyndman et al in "Another look at measures of forecast accuracy" (2006).

calculateMASE <- function(f,y) { # f = vector with forecasts, y = vector with actuals    if(length(f)!=length(y)){ stop("Vector length is not equal") }    n <- length(f)    return(mean(abs((y - f) / ((1/(n-1)) * sum(abs(y[2:n]-y[1:n-1]))))))}

For reference, see: