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
шаг, который вызывает ошибку.