You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于R语言tsCV函数滚动交叉验证的误差位置疑问

误差位置错位的原因解析

这是因为tsCV函数的误差序列索引规则和你手动计算的逻辑存在对应关系:

  • 你手动计算的是:用前14个数据训练模型,预测第15个数据的误差,这个误差对应实际值与第15个预测值的差值。
  • 而tsCV返回的误差序列中,第k个位置的误差,定义为:用前k个数据训练模型,预测第k+1个数据的误差。

所以当你用前14个数据预测第15个数据时,这个误差会被tsCV放在序列的第14个位置,而非第15个位置。序列第15个位置的误差,实际是用前15个数据预测第16个数据的结果。

代码验证

运行以下代码可以直观看到对应关系:

library(forecast)
### First method
tscv_test1 <- c(11, 25, 3, 8, 7, 78, 5, 2, 7, 82, 20, 10, 22, 45, 11, 8)
tscv_test1_ts <- ts(tscv_test1, start= c(2012, 1), freq = 4) 
train.length = 14
train.ts1 <- window(tscv_test1_ts, start=c(2012,1), end=c(2012, train.length))
valid.ts1 <- window(tscv_test1_ts, start=c(2012, train.length+1), end=c(2012, train.length+1))
arima.fit1 <- arima(train.ts1, order=c(0,0,0), seasonal=list(order=c(0,1,0), period=4))
arima.pred1 <- forecast(arima.fit1, h= 1)
error1 <- valid.ts1 - arima.pred1$mean[1]
error1
### Second method
tscv_test1_cv <- window(x = tscv_test1_ts, start=c(2012,1), end=c(2015,4))
far2 <- function(x, h){forecast(arima(x, order=c(0,0,0), seasonal=list(order=c(0,1,0), period=4)), h=h)}
error_test1 <- tsCV(tscv_test1_cv, far2, h=1)
error_test1

执行后你会发现error1的值和error_test1[14]完全一致,这就验证了上述索引规则的对应关系。

内容的提问来源于stack exchange,提问作者유준택

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 17:05:13