R中时间序列滚动交叉验证实现:tsCV与modeltime.resample对比
关于时间序列滚动交叉验证的疑问
生成时间序列数据
我用以下R代码生成了时间序列数据:
library(forecast) library(lubridate) set.seed(123) weeks <- rep(seq(as.Date("2010-01-01"), as.Date("2023-01-01"), by = "week"), each = 1) counts <- rpois(length(weeks), lambda = 50) df <- data.frame(Week = as.character(weeks), Count = counts) # 将Week列转换为日期格式 df$Week <- as.Date(df$Week) # 创建时间序列对象 ts_data <- ts(df$Count, frequency = 52, start = c(year(min(df$Week)), 1))
滚动交叉验证的尝试
我正在学习为ARIMA等时间序列模型实现滚动交叉验证,理解的流程是:按时间顺序排序数据,先用前60个数据点拟合模型并预测后续5个点、记录误差;再用前65个数据点拟合模型并预测后续5个点、记录误差,以此循环。
之前自行编写代码实现该流程难度较大,后来发现forecast包的tsCV函数,于是编写了如下代码:
# 注:我明确希望使用auto.arima()函数 far2 <- function(x, h){forecast(auto.arima(x), h=h)} e <- tsCV(ts_data, far2, h=5)
疑问点
- 这段
tsCV代码是否按照我预期的滚动窗口逻辑执行? - 运行完成后,是否需要手动计算MAE、RMSE等误差指标?
- 是否更适合使用
modeltime.resample工具来实现该功能?
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

