Функция augment() в fabletools

Я пытаюсь извлечь остатки прогноза с помощью пакета fabletools. Я знаю, что могу извлечь остатки подобранной модели, используя augment()но я не знаю, как это работает для прогнозируемых значений, и я получаю те же результаты, что и остатки подобранной модели. Вот пример:

library(fable)
library(tsibble)
 lung_deaths <- as_tsibble(cbind(mdeaths, fdeaths))

## fitted model residuals
 lung_deaths %>%
    dplyr::filter(index < yearmonth("1979 Jan")) %>%
    model(
      ets = ETS(value ~ error("M") + trend("A") + season("A"))) %>%
      augment()   
# A tsibble: 120 x 7 [1M]
# Key:       key, .model [2]
   key     .model    index value .fitted  .resid   .innov
   <chr>   <chr>     <mth> <dbl>   <dbl>   <dbl>    <dbl>
 1 fdeaths ets    1974 Jan   901    837.   64.0   0.0765 
 2 fdeaths ets    1974 Feb   689    877. -188.   -0.214  
 3 fdeaths ets    1974 Mar   827    795.   31.7   0.0399 
 4 fdeaths ets    1974 Apr   677    624.   53.2   0.0852 
 5 fdeaths ets    1974 May   522    515.    7.38  0.0144 
 6 fdeaths ets    1974 Jun   406    453.  -47.0  -0.104  
 7 fdeaths ets    1974 Jul   441    431.    9.60  0.0223 
 8 fdeaths ets    1974 Aug   393    388.    4.96  0.0128 
 9 fdeaths ets    1974 Sep   387    384.    2.57  0.00668
10 fdeaths ets    1974 Oct   582    480.  102.    0.212  
# ... with 110 more rows

## forecast residuals
test <- lung_deaths %>%
    dplyr::filter(index < yearmonth("1979 Jan")) %>%
    model(
      ets = ETS(value ~ error("M") + trend("A") + season("A"))) %>%
      forecast(h = "1 year") 
## defining newdata
  Data <- lung_deaths %>%
      dplyr::filter(index >= yearmonth("1979 Jan"))

augment(test, newdata = Data, type.predict='response')
# A tsibble: 120 x 7 [1M]
# Key:       key, .model [2]
   key     .model    index value .fitted  .resid   .innov
   <chr>   <chr>     <mth> <dbl>   <dbl>   <dbl>    <dbl>
 1 fdeaths ets    1974 Jan   901    837.   64.0   0.0765 
 2 fdeaths ets    1974 Feb   689    877. -188.   -0.214  
 3 fdeaths ets    1974 Mar   827    795.   31.7   0.0399 
 4 fdeaths ets    1974 Apr   677    624.   53.2   0.0852 
 5 fdeaths ets    1974 May   522    515.    7.38  0.0144 
 6 fdeaths ets    1974 Jun   406    453.  -47.0  -0.104  
 7 fdeaths ets    1974 Jul   441    431.    9.60  0.0223 
 8 fdeaths ets    1974 Aug   393    388.    4.96  0.0128 
 9 fdeaths ets    1974 Sep   387    384.    2.57  0.00668
10 fdeaths ets    1974 Oct   582    480.  102.    0.212  
# ... with 110 more rows

Любые предложения будут ценны.

1 ответ

Решение

Я думаю, вам, вероятно, нужны ошибки прогноза - разница между тем, что наблюдается, и тем, что было предсказано. См. https://otexts.com/fpp3/accuracy.html для обсуждения. Процитирую эту главу:

Обратите внимание, что ошибки прогноза отличаются от остатков двумя способами. Сначала на обучающем наборе рассчитываются остатки, а на тестовом наборе рассчитываются ошибки прогноза. Во-вторых, остатки основаны на одношаговых прогнозах, в то время как ошибки прогнозов могут включать многоступенчатые прогнозы.

Вот код для вычисления ошибок прогноза на вашем примере.

library(fable)
library(tsibble)
library(dplyr)

lung_deaths <- as_tsibble(cbind(mdeaths, fdeaths))

## forecasts
fcast <- lung_deaths %>%
  dplyr::filter(index < yearmonth("1979 Jan")) %>%
  model(
    ets = ETS(value ~ error("M") + trend("A") + season("A"))
  ) %>%
  forecast(h = "1 year") 

## defining newdata
new_data <- lung_deaths %>%
  dplyr::filter(index >= yearmonth("1979 Jan")) %>%
  rename(actual = value)

# Compute forecast errors
fcast %>%
  left_join(new_data) %>%
  mutate(error = actual - .mean)
#> Joining, by = c("key", "index")
#> # A fable: 24 x 7 [1M]
#> # Key:     key, .model [2]
#>    key     .model    index        value .mean actual error
#>    <chr>   <chr>     <mth>       <dist> <dbl>  <dbl> <dbl>
#>  1 fdeaths ets    1979 Jan N(783, 8522)  783.    821  37.5
#>  2 fdeaths ets    1979 Feb N(823, 9412)  823.    785 -38.4
#>  3 fdeaths ets    1979 Mar N(742, 7639)  742.    727 -14.8
#>  4 fdeaths ets    1979 Apr N(570, 4516)  570.    612  41.7
#>  5 fdeaths ets    1979 May N(461, 2951)  461.    478  16.9
#>  6 fdeaths ets    1979 Jun N(400, 2216)  400.    429  29.5
#>  7 fdeaths ets    1979 Jul N(378, 1982)  378.    405  27.1
#>  8 fdeaths ets    1979 Aug N(335, 1553)  335.    379  44.5
#>  9 fdeaths ets    1979 Sep N(331, 1520)  331.    393  62.1
#> 10 fdeaths ets    1979 Oct N(427, 2527)  427.    411 -15.7
#> # … with 14 more rows

Создано 2020-11-03 пакетом REPEX (v0.3.0)

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