首页 > 解决方案 > 如何将 tsCV() 与 MAPA 一起使用?

问题描述

我想将 tsCV() 与多重聚合预测算法 (MAPA) 和 ETS 一起使用,当我尝试运行以下代码时,所有 e2 返回都是 NA 值。我不知道我是写错了语句还是它不能与 mapa() 一起工作?

 fets <- function(y,h) {
    forecast(ets(y), h = 8)
  }
 fmapa <- function(y,fh) {
    mapa(y, fh = 8, conf.lvl=c(0.8,0.95))
  }

 e1 <- tsCV(yt, fets, h=8)
 e2 <- tsCV(yt, fmapa, h=8)

标签: rmodeltime-seriescross-validation

解决方案


这里有两个问题。

  1. 预测函数必须返回一个类对象forecast。参见帮助文件tsCV()。该MAPA包不返回forecast对象,因此您需要从输出中创建它。事实上,这里唯一真正重要的是该对象是一个列表,其中包含一个称为mean包含预测的元素。

  2. 预测函数必须有一个参数来h描述预测范围的数量。将其重命名为fh会导致问题。

一个不太严重的问题是,当您在函数体中覆盖它们时,函数中的hand参数会被完全忽略。fh

这是一个有效的示例。

library(MAPA)

fets <- function(y, h = 8) {
  forecast(ets(y), h = h)
}
fmapa <- function(y, h = 8) {
  result <- mapa(y, fh = h, conf.lvl = c(0.8, 0.95))
  list(mean = result$outfor)
}

yt <- ts(rnorm(20), frequency = 4)

e1 <- tsCV(yt, fets, h = 8)
e2 <- tsCV(yt, fmapa, h = 8)

reprex 包(v0.3.0)于 2021-01-04 创建


推荐阅读