Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将ARIMA模型拟合到多个时间序列并将预测存储到矩阵中_R_List_Matrix_Time Series - Fatal编程技术网

将ARIMA模型拟合到多个时间序列并将预测存储到矩阵中

将ARIMA模型拟合到多个时间序列并将预测存储到矩阵中,r,list,matrix,time-series,R,List,Matrix,Time Series,因为它太大了,我不能把它放在这里。但是假设realmatrix是一个具有非平凡值的“mts” realmatrix <- matrix(NA, ncol = 100, nrow = 138) 但我得到了以下信息: farimamatrix[,i]中的错误是的,以前的问题消失了,现在您有了一个新问题,关于Arima的故障。严格地说,你应该就此提出一个新问题。但无论如何,我会在这里回答 这个错误消息非常具有说明性。拟合模型时,有时季节部分是非平稳的,因此需要进一步的季节差异 通过查看ts.p

因为它太大了,我不能把它放在这里。但是假设
realmatrix
是一个具有非平凡值的“mts”

realmatrix <- matrix(NA, ncol = 100, nrow = 138)
但我得到了以下信息:


farimamatrix[,i]中的错误是的,以前的问题消失了,现在您有了一个新问题,关于
Arima
的故障。严格地说,你应该就此提出一个新问题。但无论如何,我会在这里回答

这个错误消息非常具有说明性。拟合模型时,有时季节部分是非平稳的,因此需要进一步的季节差异

通过查看
ts.plot(realmatrix)
,我发现
realmatrix
的所有100列都非常相似。因此,我将抽出第一列进行一些分析

x <- realmatrix[,1]

事实上,我们发现了强有力的证据,证明了季节性模式。因此,是的,需要季节性差异

现在,让我们检查两次差分后的ACF:

acf(diff(diff(x, lag = 12)))  ## first do seasonal diff, then non-seasonal diff

季节之间似乎出现负峰值,表明存在季节性MA过程。因此,
ARIMA(0,1,0)(0,1,1)[12]
将是一个不错的选择

fit <- arima(x, order = c(0,1,0), seasonal = c(0,1,1))

事实上,我对这个结果非常满意,因为根本没有滞后1甚至滞后2的自相关,也没有季节性的自相关。实际上,您可以尝试进一步添加季节性和/或非季节性AR(1),但不会有任何改进。这是我们的最终模型

因此,请使用以下循环:

farimamatrix <- matrix(NA, nrow = 12, ncol = 100)

m <- k <- list()

for (i in 1:100) {
  try(m[[i]] <- Arima(realmatrix[,i], order = c(0,1,0), seasonal = c(1,0,1)))
  k[[i]] <- forecast.Arima(m[[i]], h=12)
  farimamatrix[,i] <- fitted(k[[i]])
  }
farimamatrix <- matrix(NA, ncol = 100, nrow = 12)

m <- k <- vector("list", length = 100)

for (i in 1:100) {
  m[[i]] <- Arima(realmatrix[,i], order = c(0,1,0), seasonal = c(0,1,1))
  print(i)
  k[[i]] <- forecast.Arima(m[[i]], h = 12)
  farimamatrix[,i] <- k[[i]]$mean
  }

是的,基本的季节性模式是真正的复制,当然是固定的。

(1)您能粘贴来自
dput(head(realmatrix,20))
的输出吗(或者给我们一个仍然会产生错误消息的假矩阵),以便我们重现您的问题?看见(2)
fitted()
将为您提供长度为nrow(realmatrix)的向量,但是
farimamatrix
有12行。farimamatrix的所需内容是什么?“这是预测吗?”卫黄王肯定。(1) 我已经在编辑后的帖子中加入了dput。(2) 是的,farimatrix的目的是存储每个拟合arima的预测(12行/月)。没有所有库语句,代码是不完整的。
realmatrix
似乎是一个向量,基于
dput
——对吗?这让我很困惑,因为脚本中的对象名和
realmatrix[,i]
都向我暗示它应该是一个矩阵。它确实是一个矩阵。它存储100个长度(行)=138的时间序列(从2005年1月到2016年6月)。我想将arima预测(12个月前:即2016年7月至2017年6月)存储在另一个矩阵中(自然应该有12行100列)
acf(diff(diff(x, lag = 12)))  ## first do seasonal diff, then non-seasonal diff
fit <- arima(x, order = c(0,1,0), seasonal = c(0,1,1))
acf(fit$residuals)
farimamatrix <- matrix(NA, ncol = 100, nrow = 12)

m <- k <- vector("list", length = 100)

for (i in 1:100) {
  m[[i]] <- Arima(realmatrix[,i], order = c(0,1,0), seasonal = c(0,1,1))
  print(i)
  k[[i]] <- forecast.Arima(m[[i]], h = 12)
  farimamatrix[,i] <- k[[i]]$mean
  }
seasonal <- rep_len(sin((1:12) * pi / 6), 138)