Как отключить сэмплы из модели прогноза fable R
Я пытаюсь получить образцы из модели прогноза, созданной с помощью
fable
. Это то, что я пробовал
library(fable)
library(tsibble)
library(tsibbledata)
library(dplyr)
library(tidyr)
# Forecasting with an ETS(M,Ad,A) model to Australian beer production
beer_fc <- aus_production %>%
model(ets = ETS(log(Beer) ~ error("M") + trend("Ad") + season("A"))) %>%
forecast(h = "3 years", bootstrap=TRUE, times = 5)
beer_fc %>% unnest(c(Beer))
Я получаю следующую ошибку:
Error: Input must be list of vectors
Вот структура данных
str(beer_fc$Beer[1])
:
> str(beer_fc$Beer[1])
dist [1:1]
$ :List of 3
..$ dist :List of 1
.. ..$ x: num [1:5] 6.09 6.02 6.06 6 5.95
.. ..- attr(*, "class")= chr [1:2] "dist_sample" "dist_default"
..$ transform:function (.x)
.. ..- attr(*, "class")= chr "transformation"
.. ..- attr(*, "inverse")=function (.x)
..$ inverse :function (.x)
..- attr(*, "class")= chr [1:2] "dist_transformed" "dist_default"
@ vars: chr "Beer"
3 ответа
Если мы хотим извлечь значения dist в длинный формат, переберите
list
столбец "Пиво", извлеките значения, верните его в "Пиво", а затем
unnest
library(purrr)
library(tidyr)
library(dplyr)
beer_fc$Beer <- map(beer_fc$Beer, ~ .x[[1]]$x)
beer_fc %>%
unnest(c(Beer))
-вывод
# A tibble: 60 x 4
# .model Quarter Beer .mean
# <chr> <qtr> <dbl> <dbl>
# 1 ets 2010 Q3 6.02 402.
# 2 ets 2010 Q3 5.99 402.
# 3 ets 2010 Q3 6.05 402.
# 4 ets 2010 Q3 5.92 402.
# 5 ets 2010 Q3 5.99 402.
# 6 ets 2010 Q4 6.15 470.
# 7 ets 2010 Q4 6.15 470.
# 8 ets 2010 Q4 6.17 470.
# 9 ets 2010 Q4 6.17 470.
#10 ets 2010 Q4 6.12 470.
# … with 50 more rows
Вы можете использовать
pluck
чтобы получить значения, которые вы хотите извлечь с любого уровня, а затем
unnest
.
library(tidyverse)
beer_fc %>%
mutate(value = map(Beer, purrr::pluck, 'dist', 'x')) %>%
unnest(value)
# A tibble: 60 x 5
# .model Quarter Beer .mean value
# <chr> <qtr> <dist> <dbl> <dbl>
# 1 ets 2010 Q3 t(sample[5]) 402. 6.00
# 2 ets 2010 Q3 t(sample[5]) 402. 6.02
# 3 ets 2010 Q3 t(sample[5]) 402. 5.99
# 4 ets 2010 Q3 t(sample[5]) 402. 6.05
# 5 ets 2010 Q3 t(sample[5]) 402. 5.92
# 6 ets 2010 Q4 t(sample[5]) 483. 6.21
# 7 ets 2010 Q4 t(sample[5]) 483. 6.16
# 8 ets 2010 Q4 t(sample[5]) 483. 6.14
# 9 ets 2010 Q4 t(sample[5]) 483. 6.22
#10 ets 2010 Q4 t(sample[5]) 483. 6.16
# … with 50 more rows
The {distributional}
пакет (используемый для предоставления этих объектов распределения) с тех пор был обновлен функциями для получения формы и параметров распределения. Эти функции рекомендуются вместо деклассирования дистрибутивов, поскольку внутреннее представление этих дистрибутивов может измениться в будущем.
Например, возьмем нормальное распределение:
library(distributional)
fc <- dist_normal(10, 3)
Получить параметры из распределения
parameters(fc)
#> mu sigma
#> 1 10 3
Получить форму распределения
family(fc)
#> [1] "normal"
Для вашего примера…
library(fable)
#> Loading required package: fabletools
beer_fc <- tsibbledata::aus_production %>%
model(ets = ETS(log(Beer) ~ error("M") + trend("Ad") + season("A"))) %>%
forecast(h = "3 years", bootstrap=TRUE, times = 5)
Вы можете извлечь параметры и семейство
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
beer_fc %>%
mutate(parameters(Beer), family(Beer))
#> # A fable: 12 x 6 [1Q]
#> # Key: .model [1]
#> .model Quarter Beer .mean x `family(Beer)`
#> <chr> <qtr> <dist> <dbl> <list> <chr>
#> 1 ets 2010 Q3 sample[5] 411. <dbl [5]> sample
#> 2 ets 2010 Q4 sample[5] 486. <dbl [5]> sample
#> 3 ets 2011 Q1 sample[5] 426. <dbl [5]> sample
#> 4 ets 2011 Q2 sample[5] 382. <dbl [5]> sample
#> 5 ets 2011 Q3 sample[5] 409. <dbl [5]> sample
#> 6 ets 2011 Q4 sample[5] 487. <dbl [5]> sample
#> 7 ets 2012 Q1 sample[5] 424. <dbl [5]> sample
#> 8 ets 2012 Q2 sample[5] 390. <dbl [5]> sample
#> 9 ets 2012 Q3 sample[5] 407. <dbl [5]> sample
#> 10 ets 2012 Q4 sample[5] 483. <dbl [5]> sample
#> 11 ets 2013 Q1 sample[5] 425. <dbl [5]> sample
#> 12 ets 2013 Q2 sample[5] 390. <dbl [5]> sample
Сейчасx
переменная содержит простой список чисел, которые вы можете использоватьunnest()
или другие функции для работы.
Создано 15 ноября 2022 г. пакетом reprex (v2.0.1)