我正在使用accuracy
包中的forecast
函数来计算准确度度量。我用它来计算拟合时间序列模型的度量,例如ARIMA或指数平滑。
由于我在不同维度和聚合级别上测试不同的模型类型,我使用的是MUND,即Hyndman等人(2006年,“另一种预测准确度测量”)引入的绝对缩放误差,来比较不同的模型在不同的层面。
现在我也在将模型与预测历史进行比较。因为我只有预测值而不是模型,所以我尝试使用accuracy
函数。在函数描述中提到它还允许提供两个向量参数,一个具有预测值,一个具有实际值,以计算度量(而不是拟合模型):
f:“预测”类的对象,或包含预测的数字向量。它 如果省略x,它也将与Arima,ets和lm对象一起使用 - 在这种情况下 返回样本内准确度指标。
x:一个可选的数字向量,包含与...相同长度的实际值 对象的
但令我感到惊讶的是,所有措施都归还了,期待MASE。所以我想知道是否有人知道原因是什么?为什么在accuracy
函数中使用两个向量作为参数时,不返回MASE?
答案 0 :(得分:14)
MASE需要历史数据来计算比例因子。根据@FBE的回答,未来数据不计算。因此,如果您未将历史数据传递给accuracy()
,则无法计算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
但是如果你传递整个fcast
对象(包括历史数据),你就得到了
> 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
答案 1 :(得分:11)
关于MASE的论文清楚地解释了如何找到它(即使对于非时间序列数据)
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)
}
答案 2 :(得分:0)
为了帮助自己一点点,我创建了一个计算MASE的函数,如Hyndman等人在“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]))))))
}
供参考,见: