【问题标题】:Looping over forecast functions in tsCV在 tsCV 中循环预测函数
【发布时间】:2019-12-28 22:35:12
【问题描述】:

我在tsCV(滚动预测来源)中有一个循环超过 4 种时间序列预测方法的循环。列表中的第三个方法 y 不会中断循环。但是,结果表 z 的目的是存储此用户定义函数的 MAE(平均绝对误差)记录 NaN

这个预测函数是用户定义的,我需要指定damped=T

library(forecast)
x <- 8  # t +
y <- list(ses
          , holt
          , function(j, k){forecast(holt(j, h=k, damped=T))}, hw
          )
z <- list()

for (i in seq_along(y))
{
  a <- data.frame(tsCV(AirPassengers, y[[i]], h=x))
  a[1:12, ] <- NA  # 1st 12 months' forecast likely to be meaningless
  b <- colMeans(abs(a), na.rm=T)
  c <- data.frame(model = i
                  ,h = 1:x
                  ,mae = b
                  )
  z[[i]] <- c
}

z <- do.call(rbind, z)
z$model <- as.factor(z$model)

我在这里得到了用户定义函数的想法: http://pkg.robjhyndman.com/forecast/reference/tsCV.html#see-also

谢谢。

【问题讨论】:

    标签: r loops time-series forecast


    【解决方案1】:

    根据tsCV 的文档,提供的函数需要有一个实际名为“h”的参数。所以只需将您的功能更改为

    y <- list(ses, holt, function(j, h){forecast(holt(j, h=h, damped=T))}, hw)
    

    执行此操作时,不会返回任何 NaN 值。

    【讨论】:

    • 你是对的。参考?tsCV,在Usage 下我们找到:tsCV(y, forecastfunction, h = 1, window = NULL, xreg = NULL, initial = 0, ...) 我的印象是Arguments 下的h 指的是tsCV 中的第三个参数,而不是forecastfunction 中的对应部分。你提供了解决方案。谢谢。
    • 我更具体地说是指帮助寻呼机的“参数”部分,其中将forecastFunction 描述为“返回类预测对象的函数。它的第一个参数必须是单变量时间序列, 并且它必须有一个用于预测范围的参数 h”(强调)。对tsCV 的调用中的h 在技术上是一个不同的变量。
    • 是的,我找到了那行(现在)。感谢您花时间指出这一点。从现在开始教我彻底阅读指南。
    猜你喜欢
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    相关资源
    最近更新 更多