首页 > 解决方案 > tsCV(时间序列交叉验证)函数在 R 中不起作用

问题描述

我正在尝试进行时间序列交叉验证以测试某些预测方法的准确性。我有以下代码,它定义了一个函数func_1来使用 ETS 模型计算数据集的预测,然后使用时间序列交叉验证对其进行测试:

library(fpp2)
library(fpp3)
library(forecast)

func_1 <- function(y, h){
  fc <- forecast(object = ets(y), h=h)
  return(fc)
}

tsCV(y = visitors, forecastfunction = func_1, h = 1)

函数func_1,当给定适当的参数(y = 单变量时间序列,h = 预测范围)时,工作得非常好。但是,当func_1作为参数输入到tsCV函数中,R 不输出任何内容,而是卡住了。我阅读了tsCV的文档,这就是我对forecastfunction的了解:

Forecastfunction: 返回类预测对象的函数。它的第一个参数必须是单变量时间序列,并且它必须具有预测范围的参数 h。

我相信我的功能符合这个标准,但它仍然无法正常工作。但是,以下代码可以正常工作:

tsCV(y = visitors, forecastfunction = naive, h = 1)

唯一的区别是,naive是一个函数,它是包预测的一部分,不是我创建的。

标签: rtime-seriescross-validationforecasting

解决方案


该系列visitors包含 240 个观测值,因此大约有 240 个训练集。对于每一个模型,ets()将在确定最佳模型之前估计 15 个模型。所以这是 3600 个非线性优化,每个最多涉及 17 个参数。这需要一些时间。另一方面,naive不需要任何优化,因此非常快。

将其放置几分钟,然后tsCV()使用您的函数func_1()将返回结果。


推荐阅读