R 不同视界的滚动原点交叉验证?

R 不同视界的滚动原点交叉验证?,r,time-series,cross-validation,R,Time Series,Cross Validation,我拥有2010-2016年期间的时间序列培训数据集,下表列出了观察次数。我想在R中执行滚动原点交叉验证,初始折叠使用2010年的观察值作为培训,2011年作为测试。第二部分使用2010年和2011年的daa作为培训,2012年作为测试等。 我尝试过不同的功能,例如滚动原点和插入符号列车控制,但遗憾的是,它似乎只适用于1个预测地平线值和1个跳过值。我非常感谢任何帮助,尤其是代码示例 2010 2011 2012 2013 2014 2015 2016 614 617 599 677 881 121

我拥有2010-2016年期间的时间序列培训数据集,下表列出了观察次数。我想在R中执行滚动原点交叉验证,初始折叠使用2010年的观察值作为培训,2011年作为测试。第二部分使用2010年和2011年的daa作为培训,2012年作为测试等。 我尝试过不同的功能,例如
滚动原点
和插入符号
列车控制
,但遗憾的是,它似乎只适用于1个预测地平线值和1个跳过值。我非常感谢任何帮助,尤其是代码示例

2010 2011 2012 2013 2014 2015 2016 614 617 599 677 881 1215 1208
设x为数据,y[i]为x[i]年。然后计算u[i]作为第i个唯一年份中最后一个数据点的索引,并迭代训练集和测试集中最后一个点的索引。在下面的代码中,我们返回每个迭代的训练和测试数据,但您可以用所需的任何计算替换标记为##的行

y <- c(2000, 2000, 2000, 2001, 2001, 2002)
x <- 11:16

u <- unique(findInterval(y, y))  # 3, 5, 6

# input is last index of training and test sets in x
f <- function(itrain, itest) {    
  train <- x[ seq(1, itrain)]
  test <- x[ seq(itrain+1, itest) ]
  list(train = train, test = test)  ##
}
L <- Map(f, itrain = head(u, -1), itest = tail(u, -1))
names(L) <- y[ u[-1] ]

str(L)

非常感谢你!这工作完美无瑕。你知道我如何将此列表转换为可在中使用的折叠,即插入符号、tidymodels等?如果我们运行上述操作,除了使用x干杯来帮助!
List of 2
 $ 2001:List of 2
  ..$ train: int [1:3] 11 12 13
  ..$ test : int [1:2] 14 15
 $ 2002:List of 2
  ..$ train: int [1:5] 11 12 13 14 15
  ..$ test : int 16