Функция 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)