R 预测精度:无MASE,以两个向量作为参数

R 预测精度:无MASE,以两个向量作为参数,r,forecasting,R,Forecasting,我正在使用forecast包中的accurity函数来计算精度度量。我用它来计算拟合时间序列模型的度量,比如ARIMA或指数平滑。 当我在不同维度和聚合级别上测试不同的模型类型时,我使用了由Hyndman等人(2006年,“预测精度度量的另一种观察”)引入的MASE,即平均绝对标度误差,来比较不同级别上的不同模型 现在我还将模型与预测历史进行比较。因为我只有预测值而没有模型,所以我尝试使用accurity功能。函数描述中提到,还允许提供两个向量参数,一个带预测值,一个带实际值,以计算度量值(而不

我正在使用
forecast
包中的
accurity
函数来计算精度度量。我用它来计算拟合时间序列模型的度量,比如ARIMA或指数平滑。 当我在不同维度和聚合级别上测试不同的模型类型时,我使用了由Hyndman等人(2006年,“预测精度度量的另一种观察”)引入的MASE,即平均绝对标度误差,来比较不同级别上的不同模型

现在我还将模型与预测历史进行比较。因为我只有预测值而没有模型,所以我尝试使用
accurity
功能。函数描述中提到,还允许提供两个向量参数,一个带预测值,一个带实际值,以计算度量值(而不是拟合模型):

f:“预测”类的对象,或包含预测的数值向量。信息技术 如果省略x,也将使用Arima、ets和lm对象-在这种情况下 返回样本中的准确度测量值

x:一个可选的数值向量,包含与 反对


但令我惊讶的是,除了MASE之外,所有的测量结果都返回了。所以我想知道是否有人知道原因是什么?为什么在
精度
函数中使用两个向量作为参数时不返回MASE?

为了帮我一点忙,我创建了一个函数来计算MASE,正如Hyndman等人在“预测精度的另一种度量”(2006)中所述


calculateMASEMASE需要历史数据来计算比例因子。它不是根据@FBE的回答中的未来数据计算的。因此,如果不将历史数据传递给
accurity()
,则无法计算MASE。比如说,

> 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 

关于MASE的论文清楚地解释了如何找到它(即使对于非时间序列数据)


computeMASE可以传递除
forecast
对象以外的对象来获得MASE预测。例如,我想使用
vars
包进行预测并计算MASE。见相关问题:Hyndman博士。感谢您在时间序列预测方面所做的工作。请评估我在不使用“forecast”类对象的情况下查找MASE的答案。如果您也能将其纳入您的软件包中,那就太好了!Hyndman博士,是否可以用实际数据获取测试集(ts格式)数据的MASE误差度量?这是非常有用的函数+1如果我有多个季节的季节性数据,有没有办法使用该函数?例如,具有工作日模式(7)和年度模式(365)的每日数据。
> 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 
> 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 
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)
}