【问题标题】:Generic time-series backtesing/cross-validation with R使用 R 进行通用时间序列回测/交叉验证
【发布时间】:2018-04-06 13:50:10
【问题描述】:

我想在 R 中进行一些时间序列评估。该过程通常是定义时间延迟和评估频率/周期,并且对于每个评估周期,训练具有定义的时间延迟的模型并为此计算指标期间。

例如,我们有:

  • 评估周期大小和间隔n
  • 评估开始于b
  • 时滞l

我们用1:b-l 训练一个模型,在b:b+n 上对其进行评估。之后,我们训练一个带有点 1:b+n-l 的模型,并在 b+n:b+2n 等上对 k 周期进行评估。它可能会有所不同,但这是一般精神。所以这基本上是评估数据的滑动窗口,但训练数据的窗口增加。

this 问题的答案(扩展窗口解决方案)对此进行了说明。

我怎样才能做到这一点,最好不使用循环并使用 tidyverse 和/或特定于时间序列分析的包?

【问题讨论】:

    标签: r time-series


    【解决方案1】:

    所以这就是我目前的做法,但我真的对此并不满意。自定义代码过多,模块化程度不高。

    time_series_cv <- function(dates_lim, df) {
    
      eval_data <-
        df %>%
        filter(
          date >= dates_lim[['date_beg']],
          date < dates_lim[['date_end']]
        )
    
      eval_data$prediction <-
        predict(
          lm(
            log(y) ~ .,
            df %>% filter(date < dates_lim[['date_beg']]) %>% select(-c(date))
          ),
          eval_data
        )
    
      eval_data %>%
        select(date, y, prediction)
    }
    
    predictions <-
      lapply(dates, time_series_cv, df = df) %>%
      bind_rows()
    

    dates 是具有评估期开始和结束的命名列表的列表。滞后是这里的 1 个样本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-24
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 2021-02-27
      • 2015-06-11
      • 2020-07-13
      • 2019-09-06
      相关资源
      最近更新 更多