Установка индекса в циббле - PullRequest
1 голос
/ 13 января 2020

Ты когда-нибудь оглядывался назад на свои старые вопросы и чувствовал себя немного смущенным? Я только что сделал, и теперь я делаю. И я, вероятно, чувствую то же самое по этому поводу в какой-то момент.

Я пытаюсь перенести мою работу по прогнозированию на fable. В процессе я пытаюсь использовать tsibble. Ранее с помощью объекта ts я просто устанавливал начальный год и частоту. Теперь tsibble ищет объект даты. Однако у меня есть данные, которые проводятся раз в два года (осенний и весенний семестр). И переменная нерегулярна (которую я хотел бы сохранить). Forecast проделал большую работу, точно "предсказав" это. Мой универ называет термины с 3 di git year и сроком. Таким образом, падение 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)

Теперь он позволяет мне сделать циббл, но басня выдает ошибку: 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.

1 Ответ

2 голосов
/ 23 января 2020

Проблема здесь в том, что ваша переменная индекса является упорядоченным фактором, и 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.

Создано в 2020-01-23 по представительный пакет (v0.3.0)

Как показывает ошибка, для составления прогнозов вам потребуется указать соответствующие уровни факторов в 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)

Создано в 2020-01-23 пакетом представ (v0.3.0)

...