I am trying to estimate an ARDL(p,q). I have used the ARDL package for estimating such models in the past, but would like to use fable's scenario forecasting and bootstrapping tools. ARDL's are just linear models so, lacking a specific ARDL model I should be able to estimate using TSLM.
If I use TSLM I cannot use the order special from AR. While I can estimate a model using dplyr::lag, TSLM doesn't know this is a lag of the dependent variable and so cannot generate a dynamic forecast.
I can estimate any ARDL(p, 0) using AR, but that is only useful when the lag q on the exogenous regressor(s) is zero. The order() special cannot (as far as I know) create lags of an exogenous regressor.
A related issue occurs using scenario, where scenarios featuring lagged regressors created using lag are not recognised.
Is there a way around this without diving into fabletools and creating a new model class (and presumably, fable.ARDL)?
== Edit (28/3):
If one uses I() to wrap any lagged values, e.g. TSLM(y ~ I(lag(y)) + x + I(lag(x)) correctly estimates an ARDL(1,1). The forecast function can then correctly generate the lagged values of x, but then only generates static forecasts as it doesn't know that I(lag(y)) is a lagged dependent variable. However, it seems we can use the order() special from AR which allows us to get a dynamic forecast conditioned on the path(s) of the exogenous variable(s):
library(fable)
library(tsibble)
library(tidyverse)
set.seed(123)
df = tibble(
time = yearquarter(seq.Date(from = yq("1960-01"), to = yq("1986-04"), by = "quarter")),
y = as.double(UKgas),
x = cumprod(c(1, 1 + rnorm(length(y)-1, mean = 0.03, sd = 0.02)))
) %>%
as_tsibble(index = time)
train = filter(df, as.Date(time) <= yq("1980-01"))
test = filter(df, as.Date(time) > yq("1980-01")) %>%
select(-y)
fit <- train %>%
model(
ar = AR(y ~ order(1) + xreg(I(x)) + xreg(I(lag(x))))
)
forecast(fit, test) %>%
autoplot(train)
I am trying to estimate an ARDL(p,q). I have used the
ARDLpackage for estimating such models in the past, but would like to usefable's scenario forecasting and bootstrapping tools. ARDL's are just linear models so, lacking a specific ARDL model I should be able to estimate usingTSLM.If I use
TSLMI cannot use theorderspecial fromAR. While I can estimate a model usingdplyr::lag,TSLMdoesn't know this is a lag of the dependent variable and so cannot generate a dynamic forecast.I can estimate any ARDL(p, 0) using
AR, but that is only useful when the lagqon the exogenous regressor(s) is zero. Theorder()special cannot (as far as I know) create lags of an exogenous regressor.A related issue occurs using
scenario, where scenarios featuring lagged regressors created usinglagare not recognised.Is there a way around this without diving into
fabletoolsand creating a new model class (and presumably,fable.ARDL)?== Edit (28/3):
If one uses
I()to wrap any lagged values, e.g.TSLM(y ~ I(lag(y)) + x + I(lag(x))correctly estimates an ARDL(1,1). The forecast function can then correctly generate the lagged values ofx, but then only generates static forecasts as it doesn't know thatI(lag(y))is a lagged dependent variable. However, it seems we can use theorder()special fromARwhich allows us to get a dynamic forecast conditioned on the path(s) of the exogenous variable(s):