r - 避免在 R 中的 for 循环中使用 "optimization failure"

标签 r for-loop optimization forecasting holtwinters

我正在尝试使用 R 中的 HoltWinters 函数进行大量时间序列预测。
为此,我使用 for 循环并在内部调用该函数,并将预测保存在 data.frame 中。

问题是 HoltWinters 函数的一些结果给出了错误,特别是优化错误:

Error en HoltWinters(TS[[i]]) : optimization failure

这个错误打破了循环。

所以我需要的是“尝试”之类的东西:如果它可以使 HoltWinters 函数,则保存预测,否则保存错误。

下面的代码复制了这个问题:
data <- list()
data[[1]] <- rnorm(36)
data[[2]] <-
  c(
    24,24,28,24,28,22,18,20,19,22,28,28,28,26,24,
    20,24,20,18,17,21,21,21,28,26,32,26,22,20,20,
    20,22,24,24,20,26
  )
data[[3]] <- rnorm(36)

TS <- list()
Outputs <- list()

for (i in 1:3) {
  TS[[i]] <- ts(data[[i]], start = 1, frequency = 12)
  Function <- HoltWinters(TS[[i]])
  TSpredict <- predict(Function, n.ahead = 1)[1]
  Outputs[[i]] <-
    data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict)
}

其中 i <- 2 问题产生。

我需要的是,在这个例子中,“输出”列表如下:
> Outputs
[[1]]
   LastReal  Forecast
1 0.5657129 -2.274507

[[2]]
  LastReal Forecast
1    error    error

[[3]]
   LastReal   Forecast
1 0.4039783 -0.9556881

提前致谢。

最佳答案

前几天我在 HoltWinters 上遇到了同样的问题,并通过使用 tryCatch 听取了 Roman 的建议。 .根据文档实现并不是最直观的,但我发现这个链接对理解它非常有帮助:How to write trycatch in R

我的解决方案建立在那里的样本之上。

    data <- list()

data[[1]] <- rnorm(36)
data[[2]] <- c(
  24,24,28,24,28,22,18,20,19,22,28,28,
  28,26,24,20,24,20,18,17,21,21,21,28,
  26,32,26,22,20,20,20,22,24,24,20,26
)
data[[3]] <- rnorm(36)

TS <- list()
Outputs <- list()
result <- list()

for (i in 1:3) {
  Outputs[[i]] <- tryCatch({
    #You can enter messages to see where the loop is
    #message(paste("Computing", i))
    TS[[i]] <- ts(data[[i]], start = 1, frequency = 12)
    Function <- HoltWinters(TS[[i]])
    TSpredict <- predict(Function, n.ahead = 1)[1]
    result[[i]] <-
      data.frame(LastReal = TS[[i]][length(TS[[i]])], Forecast = TSpredict)
  },
  error = function(cond) {
    #message(paste("ERROR: Cannot process for time series:", i))
    msg <- data.frame(LastReal = "error", Forecast = "error")
    return(msg)
  })
}

对于输出
> Outputs
[[1]]
   LastReal  Forecast
1 0.4733632 0.5469373

[[2]]
  LastReal Forecast
1    error    error

[[3]]
   LastReal   Forecast
1 0.8984626 -0.5168826

您可以使用其他错误处理参数,例如 finallywarning处理可能出现的其他异常。

关于r - 避免在 R 中的 for 循环中使用 "optimization failure",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30290857/

相关文章:

r - 底部图例,两行包裹在 r 中的 ggplot2 中

r - 无法重新安装或运行 Stringr 包

java - 在 Java 中返回 for-each 外部的元素

c++ - 无限循环

c# -/optimize 标志启用了哪些运行时优化?

R Shiny : how to call a JavaScript function from a custom button inside a Datatable

r - 如何将 str() 的结果保存为 R 中的字符串?

c - 为什么 strlen 函数在此 for 循环条件下不起作用?

r - R : GenSA running time中的模拟退火

javascript - Underscore.js 为什么使用 "switch' 而不是 "for loop"来处理案例