1

我正在为一个项目开发一个预测循环,我一直在使用函数 sarima.for 形成包 ASTSA 来执行预测。

最初,我只预测了地平线上的 1 个观测值,并且能够将预测值存储在我创建的向量中。

但是,当我预测循环以预测地平线上的两个观测值时,不知何故只存储了第一个值。

我将向量创建为

fc_values <- double(12) 

但如前所述,仅适用于 1 n.adead = 1 的预测

然后我创建了一个矩阵来看看它是否有效

 fc_values=matrix(nrow = 12, ncol=2)

但它也没有奏效。

这是此函数的预测预测示例

$pred
      Jan      Feb
2012 20.65135 20.68599

$se
      Jan      Feb
2012 1.734058 2.911538

从预测函数 sarima.for 生成的对象类别是“列表”。

当我只是预测一个值时它与下面的示例一起使用

varii <- sarima.for( xdata = x , n.ahead =1 , 1,0,1) 
fc_values <- varii$pred

但现在有 2 个值,它不起作用,出现以下错误:

 Not enough forecasts. Check that forecasts and test data match.
 In addition: Warning messages:
 1: In fc_valuesl[i] <- varii$pred :
 number of items to replace is not a multiple of replacement length

这里以一个 TS 为例

     Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov
2008                                                         135.62 213.84 347.80
2009 542.13 462.34 399.07 213.86 122.86  70.32  23.02  23.58  71.64 245.10 310.74
        Dec
2008 467.15
2009 499.75

我将不胜感激有关我应该如何构造一个向量来存储由 sarima.for 命令产生的 2 个预测值的任何帮助。

4

1 回答 1

1

您没有提供如何存储时间序列的示例,但这里有一些选项。

set.seed(1)
x <- rnorm(100)
y <- rnorm(100)

是两个样本时间序列。

使用未指定长度的向量看起来像

fc_vec1 <- numeric()
fc_vec1 <- c(fc_vec1, sarima.for(x, 2, 1, 0, 1)$pred)
fc_vec1 <- c(fc_vec1, sarima.for(y, 2, 1, 0, 1)$pred)
fc_vec1
# [1]  0.10913776  0.10869919  0.00957128 -0.05164050

也就是说,我们不断向向量中添加新元素。然而,这并不是最好的选择。似乎您也知道预测的数量。因此,我们可以在定义向量时指定向量长度:

fc_vec2 <- numeric(4)
fc_vec2[1:2] <- sarima.for(x, 2, 1, 0, 1)$pred
fc_vec2[3:4] <- sarima.for(y, 2, 1, 0, 1)$pred
fc_vec2
# [1]  0.10913776  0.10869919  0.00957128 -0.05164050

但是,鉴于您的预测来自不同的时间序列,连接到单个向量并不是很有吸引力。因此,使用矩阵更好:

fc_mat <- matrix(NA, 2, 2)
fc_mat[1, ] <- sarima.for(x, 2, 1, 0, 1)$pred
fc_mat[2, ] <- sarima.for(y, 2, 1, 0, 1)$pred
fc_mat
#            [,1]       [,2]
# [1,] 0.10913776  0.1086992
# [2,] 0.00957128 -0.0516405

将所有时间序列存储在一个对象中是个好主意。例如,如果我们将它们放在一个列表中Z,那么我们可以更简洁:

Z <- list(x, y)
sapply(Z, function(z) sarima.for(z, 2, 1, 0, 1)$pred)
#           [,1]        [,2]
# [1,] 0.1091378  0.00957128
# [2,] 0.1086992 -0.05164050
于 2018-03-12T01:15:11.300 回答