fable::ARIMA не может найти xreg при программном создании формул

Я пытаюсь программно сгенерировать формулы для тестирования различных запаздывающих регрессоров в модели ARIMA, используя fable. По сути, я хочу провести анализ запаздывающих предикаторов из fpp3, но там, где формулы генерируются R на основе заданного количества запаздываний xreg. Я пробовал следовать инструкциям в /questions/52734716/fablemodel-peredaet-spiski-vneshnih-regressorov-v-arima/52734723#52734723 но получаю сообщение об ошибке:

      library(magrittr)
cast_lags_formula <- function(x, lags, names = TRUE) {
  if (names) names(lags) <- paste0("L", lags)
  lapply(lags, function(l, x) {
    paste0("lag(",x,", ",l,")", collapse = "+")
  }, x = x)
}

lags <- 0:3  

formula_lags <- cast_lags_formula("Income", lags)
arima_rhs <- purrr::accumulate(formula_lags, paste, sep = " + ")
arima_formulas <- lapply(arima_rhs,
                         function(x) as.formula(paste("Consumption", x, sep  = " ~ ")))
model_formulas <- purrr::set_names(purrr::map(arima_formulas, fable::ARIMA), paste0("ARIMAL", lags))

model_formulas
#> $ARIMAL0
#> <ARIMA model definition>
#> 
#> $ARIMAL1
#> <ARIMA model definition>
#> 
#> $ARIMAL2
#> <ARIMA model definition>
#> 
#> $ARIMAL3
#> <ARIMA model definition>
print(model_formulas$ARIMAL0$formula)
#> <quosure>
#> expr: ^<formula>
#> env:  empty
print(model_formulas$ARIMAL1$formula)
#> <quosure>
#> expr: ^<formula>
#> env:  empty
print(model_formulas$ARIMAL2$formula)
#> <quosure>
#> expr: ^<formula>
#> env:  empty
print(model_formulas$ARIMAL3$formula)
#> <quosure>
#> expr: ^<formula>
#> env:  empty

train_df <- fpp3::us_change
train_stretched <- train_df %>%
  tsibble::stretch_tsibble(.init = 190)

train_stretched
#> # A tsibble: 1,746 x 7 [1Q]
#> # Key:       .id [9]
#>    Quarter Consumption Income Production Savings Unemployment   .id
#>      <qtr>       <dbl>  <dbl>      <dbl>   <dbl>        <dbl> <int>
#>  1 1970 Q1       0.619  1.04      -2.45    5.30         0.9       1
#>  2 1970 Q2       0.452  1.23      -0.551   7.79         0.5       1
#>  3 1970 Q3       0.873  1.59      -0.359   7.40         0.5       1
#>  4 1970 Q4      -0.272 -0.240     -2.19    1.17         0.700     1
#>  5 1971 Q1       1.90   1.98       1.91    3.54        -0.100     1
#>  6 1971 Q2       0.915  1.45       0.902   5.87        -0.100     1
#>  7 1971 Q3       0.794  0.521      0.308  -0.406        0.100     1
#>  8 1971 Q4       1.65   1.16       2.29   -1.49         0         1
#>  9 1972 Q1       1.31   0.457      4.15   -4.29        -0.200     1
#> 10 1972 Q2       1.89   1.03       1.89   -4.69        -0.100     1
#> # … with 1,736 more rows

fits <- train_stretched %>%
  fabletools::model(!!!model_formulas)

fits
#> # A mable: 9 x 5
#> # Key:     .id [9]
#>     .id                     ARIMAL0                               ARIMAL1
#>   <int>                     <model>                               <model>
#> 1     1 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 2     2 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 3     3 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 4     4 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 5     5 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 6     6 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 7     7 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 8     8 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> 9     9 <LM w/ ARIMA(1,0,2) errors> <LM w/ ARIMA(3,0,0)(2,0,0)[4] errors>
#> # … with 2 more variables: ARIMAL2 <model>, ARIMAL3 <model>

test_stretched <- tsibble::new_data(train_stretched, n = 4) %>%
  dplyr::left_join(train_df, by = c("Quarter"))

test_stretched
#> # A tsibble: 36 x 7 [1Q]
#> # Key:       .id [9]
#>    Quarter   .id Consumption Income Production Savings Unemployment
#>      <qtr> <int>       <dbl>  <dbl>      <dbl>   <dbl>        <dbl>
#>  1 2017 Q3     1       0.585  0.580     -0.201  0.478        -0.100
#>  2 2017 Q4     1       1.13   0.907      1.81  -1.32         -0.100
#>  3 2018 Q1     1       0.417  1.67       0.564 17.4          -0.100
#>  4 2018 Q2     1       0.983  0.662      1.12  -2.72          0    
#>  5 2017 Q4     2       1.13   0.907      1.81  -1.32         -0.100
#>  6 2018 Q1     2       0.417  1.67       0.564 17.4          -0.100
#>  7 2018 Q2     2       0.983  0.662      1.12  -2.72          0    
#>  8 2018 Q3     2       0.853  0.806      1.26  -0.0857       -0.300
#>  9 2018 Q1     3       0.417  1.67       0.564 17.4          -0.100
#> 10 2018 Q2     3       0.983  0.662      1.12  -2.72          0    
#> # … with 26 more rows

fc <- fabletools::forecast(fits, new_data = tidyr::drop_na(test_stretched))
#> Error: Problem with `mutate()` column `ARIMAL0`.
#> ℹ `ARIMAL0 = (function (object, ...) ...`.
#> x object 'Income' not found
#>   Unable to compute required variables from provided `new_data`.
#>   Does your model require extra variables to produce forecasts?

Создано 2021-08-13 пакетом REPEX (v2.0.0)

Я не уверен, почему получаю сообщение об ошибке, потому что Income хорошо виден в test_stretchedнабор данных. Единственное, о чем я могу думать, это то, что это как-то связано со средой формул, созданных с помощью as.formula(), но я не знаю, как это могло быть, если model процесс работает правильно и это только forecast шаг, который вызывает ошибку.

0 ответов

Другие вопросы по тегам