在 tsibble 中设置索引

Setting index in a tsibble

你是否曾经回头看你的旧问题并感到有点尴尬?我刚刚做了,现在我做了。在某个时候我可能会对这个有同样的感觉。

我正在尝试将我的预测工作转移到 fable。在此过程中,我尝试使用 tsibble。以前使用 ts 对象时,我只是设置了开始年份和频率。现在 tsibble 正在寻找日期对象。但是我有一年两次的数据(秋季和 spring 学期)。并且变量是不规则的(我想保留)。 Forecast 做得非常准确 "forecasting" 它。我的大学用 3 位数的年份和术语命名术语。所以 2019-2020 学年的秋季是 2204,其中 4 代表秋季。 spring 是 2207.

基本上,我在网上找不到索引在非日期对象意义上不规则的情况的示例?有什么提示吗?谢谢。

好吧,如果它要了我的命,我会尝试解决这个问题。我看到他们添加了一个有序因子作为可能的索引。所以我会试试的。

这是我遇到困难的可重现示例。

enroll <- data.frame(term = c(2194L, 2197L, 2204L, 2207L), 
                 ECO110 = c(518, 410, 537, 386), 
                 ECO120 = c(315, 405, 419, 401))

enroll.tb <- enroll %>% 
  mutate(term = ordered(term)) %>%
  select(term, starts_with("ECO")) %>%
  pivot_longer(-term, names_to = "class", values_to = "enroll")

enroll.tb <- as_tsibble(enroll.tb, key = class, index = term)

fc <-  enroll.tb %>% 
  model(arima = ARIMA()) %>%
  forecast(h = 2)

现在它让我发出了 tsibble,但寓言产生了错误: Error: Unsupported index type: logical

Mitchell 的出色回答

不过似乎factor抛出了更多的问题,结果都不是很固定。 ARIMA 模型很好用,买 ETS 不行。

fc <-  enroll.tb %>% 
  model(ets = ETS()) %>%
  forecast(new_data = enroll.future)

抛出错误 Error: A model specification is trained to a dataset using themodel()function.

这里的问题是您的索引变量是一个有序因子,forecast() 不知道如何生成该索引的未来值。

我添加了一个信息更丰富的错误 (02fb2a),所以它现在应该说:

fc <-  enroll.tb %>% 
  model(arima = ARIMA()) %>%
  forecast(h = 2)
#> Model not specified, defaulting to automatic modelling of the `enroll` variable.
#> Override this using the model formula.
#> Error: Cannot automatically create `new_data` from an factor/ordered time index. Please provide `new_data` directly.

reprex package (v0.3.0)

于 2020-01-23 创建

正如错误现在所暗示的那样,要生成预测,您需要在 new_data 中指定适当的因子水平。


enroll.future <- tsibble(
  term = rep(ordered(c(2214L, 2217L)), 2),
  class = rep(c("ECO110", "ECO120"), each = 2),
  index = term, key = class)

fc <-  enroll.tb %>% 
  model(arima = ARIMA()) %>%
  forecast(new_data = enroll.future)
#> Model not specified, defaulting to automatic modelling of the `enroll` variable.
#> Override this using the model formula.
fc
#> # A fable: 4 x 5 [1]
#> # Key:     class, .model [2]
#>   class  .model term  enroll .distribution
#>   <chr>  <chr>  <ord>  <dbl> <dist>       
#> 1 ECO110 arima  2214    532. N(532, 1380) 
#> 2 ECO110 arima  2217    385. N(385, 1380) 
#> 3 ECO120 arima  2214    385  N(385, 2237) 
#> 4 ECO120 arima  2217    385  N(385, 2237)

reprex package (v0.3.0)

于 2020-01-23 创建