我正在使用包中的accuracy函数forecast来计算准确度度量.我用它来计算拟合时间序列模型的度量,例如ARIMA或指数平滑.由于我在不同维度和聚合级别上测试不同的模型类型,我使用的是MUND,即Hyndman等人(2006年,"另一种预测准确度测量")引入的绝对缩放误差,来比较不同的模型在不同的层面上.
现在我也将模型与预测历史进行比较.因为我只有预测值而不是模型,所以我尝试使用该accuracy函数.在函数描述中提到它还允许提供两个向量参数,一个具有预测值,一个具有实际值,以计算度量(而不是拟合模型):
f:类"预测"的对象,或包含预测的数字向量.如果省略x,它也将与Arima,ets和lm对象一起使用 - 在这种情况下,返回样本内准确度度量.
x:可选的数字向量,包含与对象长度相同的实际值.
但我很惊讶所有措施都归还了,期待MASE.所以我想知道是否有人知道原因是什么?为什么MASE没有返回,而在accuracy函数中使用两个向量作为参数?
Rob*_*man 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
Run Code Online (Sandbox Code Playgroud)
但是如果你传递整个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
Run Code Online (Sandbox Code Playgroud)
Shu*_*ini 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)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5334 次 |
| 最近记录: |