r - 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是一个函数,它是包预测的一部分,不是我创建的。
解决方案
该系列visitors
包含 240 个观测值,因此大约有 240 个训练集。对于每一个模型,ets()
将在确定最佳模型之前估计 15 个模型。所以这是 3600 个非线性优化,每个最多涉及 17 个参数。这需要一些时间。另一方面,naive
不需要任何优化,因此非常快。
将其放置几分钟,然后tsCV()
使用您的函数func_1()
将返回结果。
推荐阅读
- javascript - 购物车数量更新
- r - 如何跨多个列使用正则表达式进行过滤?
- python - Django模型结构使用另一个表中的键从外键表中获取数据
- c - C中的二分法
- c# - 将数百个条目添加到组合框中
- android-6.0-marshmallow - Android network-security-config 在 API 24 及以下版本中不起作用
- python - 使用两个不同的文本作为python中的输入编写文件
- c# - C#显示来自用户输入的字符串列表重复的所有索引
- google-cloud-platform - GCP AutoML 上的时间序列预测
- echo - fish - 在多行上打印数组/列表