Skip to contents

Load package

library(echos)
#> Error in get(paste0(generic, ".", class), envir = get_method_env()) : 
#>   object 'type_sum.accel' not found
library(tidyverse)
library(tsibble)
library(fable)

Prepare dataset

In this example, we will use the m4_data. The dataset is a monthly tsibble, which is filtered to include only the time series "M21655" and "M2717". The resulting object train_frame contains the training data and is visualized below.

train_frame <- m4_data %>%
  filter(series %in% c("M21655", "M2717"))

train_frame
#> # A tsibble: 494 x 4 [1M]
#> # Key:       series [2]
#>    series category       index value
#>    <chr>  <fct>          <mth> <dbl>
#>  1 M21655 Demographic 1995 Jan  4970
#>  2 M21655 Demographic 1995 Feb  5010
#>  3 M21655 Demographic 1995 Mrz  5060
#>  4 M21655 Demographic 1995 Apr  5010
#>  5 M21655 Demographic 1995 Mai  5610
#>  6 M21655 Demographic 1995 Jun  6040
#>  7 M21655 Demographic 1995 Jul  6450
#>  8 M21655 Demographic 1995 Aug  6370
#>  9 M21655 Demographic 1995 Sep  5190
#> 10 M21655 Demographic 1995 Okt  5250
#> # ℹ 484 more rows

p <- ggplot()

p <- p + geom_line(
  data = train_frame,
  aes(
    x = index,
    y = value),
  linewidth = 0.5
)

p <- p + facet_wrap(
  vars(series),
  ncol = 1,
  scales = "free")

p

Plot actual values

Train ESN model

The function ESN() is used in combination with model() from the fabletools package to train an Echo State Network for the variable value. The trained models are stored as a mable (i.e., model table). Additionally, an ARIMA() model is trained as benchmark.

mable_frame <- train_frame %>%
  model(
    "ESN" = ESN(value),
    "ARIMA" = ARIMA(value)
    )

mable_frame
#> # A mable: 2 x 3
#> # Key:     series [2]
#>   series                                     ESN                     ARIMA
#>   <chr>                                  <model>                   <model>
#> 1 M21655  <ESN({243, 97, 194}, {36.57, 0.0046})> <ARIMA(1,0,0)(1,1,2)[12]>
#> 2 M2717  <ESN({251, 100, 200}, {31.91, 0.0046})> <ARIMA(2,1,4)(0,1,0)[12]>

Forecast ESN model

Forecasts are generated via the function forecast(), where the forecast horizon is set to h = 18 (i.e., 18-month ahead forecasts). The forecasts are stored as fable (i.e., forecast table) and visualized along the historic training data.

fable_frame <- mable_frame %>%
  forecast(h = 18)

fable_frame
#> # A fable: 72 x 5 [1M]
#> # Key:     series, .model [4]
#>    series .model    index
#>    <chr>  <chr>     <mth>
#>  1 M21655 ESN    2015 Apr
#>  2 M21655 ESN    2015 Mai
#>  3 M21655 ESN    2015 Jun
#>  4 M21655 ESN    2015 Jul
#>  5 M21655 ESN    2015 Aug
#>  6 M21655 ESN    2015 Sep
#>  7 M21655 ESN    2015 Okt
#>  8 M21655 ESN    2015 Nov
#>  9 M21655 ESN    2015 Dez
#> 10 M21655 ESN    2016 Jan
#> # ℹ 62 more rows
#> # ℹ 2 more variables: value <dist>, .mean <dbl>

fable_frame %>%
  autoplot(train_frame, level = NULL)

Plot forecast and train data