LauraDR
LauraDR

Reputation: 86

R fable doesn't appear to be generating bootstrap forecast intervals for reconciled hierarchical models

I'm using fable and testing out using forecast(bootstrap = T) with a reconciled hierarchical univariate model as shown below.

tourism_hts <- tourism |>
  aggregate_key(State / Region, Trips = sum(Trips))

tourism_forecast <- tourism_hts |>
  model(arima_model = ARIMA(Trips)) |>
  reconcile(arima_td = top_down(arima_model)) |>
  forecast(h=20, bootstrap = TRUE)

tourism_forecast |> filter(.model == "arima_td")

This produces a dist variable which is simply a point estimate, not a distribution.

# A fable: 1,700 x 6 [1Q]
# Key:     State, Region, .model [85]
   State  Region   .model   Quarter    Trips .mean
   <chr*> <chr*>   <chr>      <qtr>   <dist> <dbl>
 1 ACT    Canberra arima_td 2018 Q1 666.0948  666.
 2 ACT    Canberra arima_td 2018 Q2 666.6314  667.
 3 ACT    Canberra arima_td 2018 Q3 673.8574  674.
 4 ACT    Canberra arima_td 2018 Q4 669.5495  670.
 5 ACT    Canberra arima_td 2019 Q1 669.8017  670.
 6 ACT    Canberra arima_td 2019 Q2 673.7087  674.
 7 ACT    Canberra arima_td 2019 Q3 679.0933  679.
 8 ACT    Canberra arima_td 2019 Q4 672.9738  673.
 9 ACT    Canberra arima_td 2020 Q1 669.2769  669.
10 ACT    Canberra arima_td 2020 Q2 677.0714  677.

In contrast, we see that the base model actually does have a valid dist variable

tourism_forecast

# A fable: 3,400 x 6 [1Q]
# Key:     State, Region, .model [170]
   State  Region   .model      Quarter        Trips .mean
   <chr*> <chr*>   <chr>         <qtr>       <dist> <dbl>
 1 ACT    Canberra arima_model 2018 Q1 sample[5000]  661.
 2 ACT    Canberra arima_model 2018 Q2 sample[5000]  660.
 3 ACT    Canberra arima_model 2018 Q3 sample[5000]  661.
 4 ACT    Canberra arima_model 2018 Q4 sample[5000]  660.
 5 ACT    Canberra arima_model 2019 Q1 sample[5000]  660.
 6 ACT    Canberra arima_model 2019 Q2 sample[5000]  662.
 7 ACT    Canberra arima_model 2019 Q3 sample[5000]  660.
 8 ACT    Canberra arima_model 2019 Q4 sample[5000]  660.
 9 ACT    Canberra arima_model 2020 Q1 sample[5000]  661.
10 ACT    Canberra arima_model 2020 Q2 sample[5000]  660.

Should I expect that fable will generate a valid interval for the reconciled model rather than a point estimate?

sessionInfo()

R version 4.3.1 (2023-06-16)
Platform: aarch64-apple-darwin20 (64-bit)
Running under: macOS Sonoma 14.7.2

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.3-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.11.0

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

time zone: America/Chicago
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
 [1]      feasts_0.3.2      tsibbledata_0.4.1 fpp3_1.0.1        tsibble_1.1.5     fable_0.3.4       fabletools_0.4.2  lubridate_1.9.3  
 [9] forcats_1.0.0     stringr_1.5.1     dplyr_1.1.4       purrr_1.0.2       readr_2.1.5       tidyr_1.3.1       tibble_3.2.1      ggplot2_3.5.1    
[17] tidyverse_2.0.0  

loaded via a namespace (and not attached):
 [1] rappdirs_0.3.3       utf8_1.2.4           generics_0.1.3       anytime_0.3.9        renv_1.0.7           lattice_0.21-8       stringi_1.8.4       
 [8] digest_0.6.36        hms_1.1.3            magrittr_2.0.3       grid_4.3.1           timechange_0.3.0     rprojroot_2.0.4      DBI_1.2.3           
[15] fansi_1.0.6          scales_1.3.0         cli_3.6.3            rlang_1.1.4          crayon_1.5.3         ellipsis_0.3.2       munsell_0.5.1       
[22] withr_3.0.1          yaml_2.3.10          tools_4.3.1          tzdb_0.4.0           colorspace_2.1-0     here_1.0.1           vctrs_0.6.5         
[29] R6_2.5.1             lifecycle_1.0.4      urca_1.3-4           pkgconfig_2.0.3      progressr_0.14.0     pillar_1.9.0         gtable_0.3.5        
[36] glue_1.7.0           Rcpp_1.0.13          xfun_0.45            tidyselect_1.2.1     rstudioapi_0.16.0    knitr_1.47           farver_2.1.2        
[43] nlme_3.1-162         labeling_0.4.3       compiler_4.3.1       distributional_0.4.0

Upvotes: 0

Views: 17

Answers (0)

Related Questions