首页 > 解决方案 > 用于矩阵运算的 for 循环

问题描述

尝试在 R 中使用“for 循环”。我有一个长度为 44 的向量,从数据文件“data.csv”中读取了 4401 个观察值。

我将其转换为矩阵,以便将每一列作为时间序列数据处理。

我想提取每一列,进行预测,然后为此制作一个矩阵。

最简单的方法是什么?

library(forecast)
data<-read.table(file="data.csv",sep=",",row.names=NULL,header=FALSE)
x <- matrix(1:47, ncol = 1, byrow = FALSE)
for (i in 1:4401)
{
y <- data[i]
y_ts <- ts(y, start=c(2016,1), end=c(2019,8), frequency=12)
AutoArimaModel=auto.arima(y_ts)
forecast=predict(AutoArimaModel, 3)
output <- matrix(forecast$pred, ncol = 1, byrow = FALSE)
ym = data.matrix(y)
z = rbind(ym,output)
x = cbind(x,z)}

它只是运行i = 1并给我如下错误:

数组(x,c(长度(x),1L)中的错误,如果(!is.null(名称(x)))列表(名称(x),:“数据”必须是向量类型,为“空” '

标签: r

解决方案


因此,您的代码需要部分重写!

如果我理解,您希望每 44 个时间序列数据获得 3 个预测。我使用了您提供的 .xlsx 数据。

library(forecast)
library(readxl)

data<-read_excel("data.xlsx",col_names = F)

z <- NULL
data <- t(data)
forecast_horizon <- 3

for (i in 1:ncol(data)){
  y <- data[,i]

  y_ts <- ts(y, start=c(2016,1), end=c(2019,8), frequency=12)
  AutoArimaModel <- auto.arima(y_ts)
  forecast <- tryCatch(predict(AutoArimaModel, forecast_horizon),
                       error = function(e) data.frame(pred = rep(NA,forecast_horizon))) 

  output <- matrix(forecast$pred, ncol = 1, byrow = FALSE)

  z = cbind(z,output)

}

注意使用tryCatch哪个,因为在访问预测时有一个时间序列会产生错误(您可以进一步调查为什么会这样。)


推荐阅读