1

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

我正在尝试将我的预测工作转移到fable. 在此过程中,我尝试使用tsibble. 以前用一个ts对象我只是设置开始年份和频率。现在tsibble正在寻找一个日期对象。但是我有两年一次的数据(秋季和春季学期)。并且变量是不规则的(我想保留)。Forecast在准确“预测”它方面做得很好。我的大学用 3 位数的年份和一个术语来命名这些术语。所以 2019-2020 学年的秋季是 2204 年,其中 4 代表秋季。春天是 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

下面米切尔的出色回答。

然而,似乎因素引发了更多问题,事实证明一切都不是很固定。ARIMA 模型运行良好,购买 ETS 则不行。

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

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

4

1 回答 1

2

这里的问题是您的索引变量是一个有序因子,并且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 包(v0.3.0)于 2020 年 1 月 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 包(v0.3.0)于 2020 年 1 月 23 日创建

于 2020-01-23T04:13:15.513 回答