r - 将预测结果合并到 R 中的内聚数据框架中

标签 r for-loop dataframe forecasting

循环计算并将 auto.arima()forecast() 结果存储在 Dataframe 中

可以使用以下命令生成包含随机数据的数据帧的小样本

df <- data.frame(col1 = runif(24, 400, 700),
                  col2 = runif(24, 350, 600),
                  col3 = runif(24, 600, 940),
                  col4 = runif(24, 2000, 2600),
                  col5 = runif(24, 950, 1200))


colnames(df) <- c("NorthHampton to EastHartford", "NorthHampton to Edison", 
                  "NorthHampton to Yonkers", "North Hampton to Brooklyn", "NorthHampton to Rotterdam" )

我尝试在 R 中使用 auto.arima() 运行一系列 ARIMA 模型,但很难以所需的格式生成输出。下面是我开始的示例部分。

ts <- ts(df, frequency = 12, start = c(2014, 1), end = c(2015, 12))

model  <- list()
results <- list()


for (i in 1:ncol(ts)) {
  fit <- auto.arima(ts[,i], stepwise = F, approximation = F)
  model <- forecast(fit)$method
  results <- forecast(fit, h = 3)$mean
  
#   print(forecast(fit)$method)
#   print(forecast(fit, h=3)$mean)

  }

理想情况下,我希望我的循环填充一个 data.frame ,其格式如下:

Lane                                 Model                          Time    PointEstimate
Northampton to East Hartford    "ARIMA(0,0,0) with non-zero mean"   Jan-16                  
Northampton to East Hartford    "ARIMA(0,0,0) with non-zero mean"   Feb-16                  
Northampton to East Hartford    "ARIMA(0,0,0) with non-zero mean"   Mar-16                  
Northampton to Edison           "ARIMA(0,0,0) with non-zero mean"   Jan-16                  
Northampton to Edison           "ARIMA(0,0,0) with non-zero mean"   Feb-16                  
Northampton to Edison           "ARIMA(0,0,0) with non-zero mean"   Mar-16                  
Northampton to Yonkers          "ARIMA(0,0,0) with non-zero mean"   Jan-16                  

Lane 的结果应与原始数据帧中的列名称相同。 Model 的结果是 forecast(fit)$method 的结果,点估计应该是 forecast(fit, h = 3) 的结果$mean,在本例中,每个项目在 dataframe 中重复 h 次 (3)。

我认为我的循环正在执行我需要的计算,我只是不知道如何存储结果,然后将结果附加到循环末尾的下一次迭代。我很感激我能得到的任何帮助。

最佳答案

您可以尝试以下方法:

library(forecast)
fits <- lapply(1:ncol(ts),  function(i) auto.arima(ts[,i], stepwise = F, approximation = F))
models <- sapply(1:ncol(ts), function(i) forecast(fits[[i]])$method)
results <- lapply(1:ncol(ts), function(i) forecast(fits[[i]], h = 3)$mean)

resultsdf <- data.frame(do.call(rbind, results))
colnames(resultsdf) <- format(as.Date(time(results[[1]])), "%b-%y")
resultsdf$Lane=colnames(df)
resultsdf$Model=models

library(reshape2)
res <- melt(resultsdf, id.vars=4:5, measure.vars=1:3, variable;name = "Time",value;name = "PointEstimate")

                           Lane                           Model variable     value
1  NorthHampton to EastHartford ARIMA(0,0,0) with non-zero mean janv.-16  546.9441
2        NorthHampton to Edison ARIMA(0,0,0) with non-zero mean janv.-16  487.6225
3       NorthHampton to Yonkers ARIMA(0,0,0) with non-zero mean janv.-16  778.9514
4     North Hampton to Brooklyn ARIMA(1,0,0) with non-zero mean janv.-16 2459.3983
5     NorthHampton to Rotterdam ARIMA(1,0,0) with non-zero mean janv.-16 1098.1912
6  NorthHampton to EastHartford ARIMA(0,0,0) with non-zero mean févr.-16  546.9441
7        NorthHampton to Edison ARIMA(0,0,0) with non-zero mean févr.-16  487.6225
8       NorthHampton to Yonkers ARIMA(0,0,0) with non-zero mean févr.-16  778.9514
9     North Hampton to Brooklyn ARIMA(1,0,0) with non-zero mean févr.-16 2416.4848
10    NorthHampton to Rotterdam ARIMA(1,0,0) with non-zero mean févr.-16 1077.3921
11 NorthHampton to EastHartford ARIMA(0,0,0) with non-zero mean  mars-16  546.9441
12       NorthHampton to Edison ARIMA(0,0,0) with non-zero mean  mars-16  487.6225
13      NorthHampton to Yonkers ARIMA(0,0,0) with non-zero mean  mars-16  778.9514
14    North Hampton to Brooklyn ARIMA(1,0,0) with non-zero mean  mars-16 2397.1000
15    NorthHampton to Rotterdam ARIMA(1,0,0) with non-zero mean  mars-16 1085.3332

关于r - 将预测结果合并到 R 中的内聚数据框架中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35661709/

相关文章:

r - gplots 库中 Heatmap.2 函数的格式问题 - 边距和轴

r - lpsolve 不在 R 中打印 lp 模型

java - 获取 10 个不重复的随机整数?

python - Pandas 中位数的奇怪行为

r - 如何将 MATLAB 结构加载到 R 数据框中?

r - 将具有 "NULL"值的列转换为数字

r - 如何将字符向量转换为数字?

for-loop - 使用具有 2 个参数的机器人框架进行循环

python - 是否可以重复循环的迭代?

r - xts 函数不将我的 POSIXct 日期视为适当的基于时间的对象