将forecast :: ma()的结果作为矩阵并计算RMSE

时间:2016-07-22 08:21:04

标签: r time-series

我是R的新手。我正在尝试计算R中的一些MA [n]预测。 这是我的代码,

# simple reproducible example
set.seed(0); factory <- round(rnorm(84), 1)
library(forecast)
factory.ts <- ts(factory, start = 1947, frequency = 12)
fit_EMA <- ma(factory.ts, order=5)

工作正常。以下是R {控制台中fit_EMA的样子。但是我不喜欢这种格式,因为我无法找到一种方法来取得那些适合进一步使用的点。例如,如何提取行或列?

       Jan   Feb   Mar   Apr   May   Jun   Jul   Aug   Sep   Oct   Nov   Dec
1947    NA    NA  0.80  0.24  0.12 -0.20 -0.46 -0.06  0.40  0.42  0.26  0.20
1948 -0.34 -0.58 -0.36 -0.32 -0.18 -0.36 -0.32 -0.30 -0.10 -0.02  0.20  0.34
1949  0.48  0.32 -0.10 -0.08 -0.22 -0.54 -0.48 -0.34 -0.20  0.08  0.38  0.38
1950  0.74  0.54  0.66  0.58  0.56  0.16 -0.02 -0.60 -1.04 -0.70 -0.38 -0.18
1951  0.10  0.34  0.58  0.26  0.28  0.28  0.48 -0.04 -0.32 -0.56 -0.54 -0.66
1952 -0.80 -0.38 -0.28 -0.32 -0.60 -0.34 -0.28 -0.10 -0.14  0.20  0.00 -0.06
1953  0.06  0.28  0.24  0.34  0.18 -0.24 -0.62 -0.38 -0.20 -0.06    NA    NA

另外,我如何计算RMSE或其他错误方法? forecast::maTTR::SMATTR::EMA未在摘要中提供计算错误度量。或者我错过了图书馆的功能?

1 个答案:

答案 0 :(得分:1)

forecast::ma()的结果始终是"ts"个对象。虽然当您将fit_EMA打印到屏幕时,frequence = 12显示为矩阵(因为str(fit_EMA)因此您有12列),但它本质上是一个向量。您可以使用mat <- matrix(fit_EMA, ncol = 12, byrow = TRUE) 进行检查。你可以做到

mat[1, ]

获得矩阵。然后MSE <- mean((fit_EMA - factory.ts) ^ 2, na.rm = TRUE) # [1] 0.55876 RMSE <- sqrt(MSE) # [1] 0.7475025 给出第一年(1947年)的拟合值。

获取RMSE非常简单,不需要函数/库例程。做:

(function () {
    Office.initialize = function (reason) {
       //If you need to initialize something you can do so here.
    };

})();

var i = 42;

//Notice function needs to be in global namespace
function undo() {
    console.log(i);
    i++;
}