寓言:从ARIMA模型中提取p,d,q规范

问题描述

我一直在使用整洁的预测软件包寓言(它非常有用)。

我想知道是否有一种简单的方法可以从山able中提取出p,d,q值。

以本指南中的数据为例https://www.mitchelloharawild.com/blog/fable/

library(tidyverse)
library(tsibble)
library(fable)

tourism_state <- tourism %>% 
  group_by(State) %>% 
  summarise(Trips = sum(Trips))

fit <- tourism_state %>% 
  model(arima = ARIMA(Trips))
> fit
# A mable: 8 x 2
# Key:     State [8]
  State                                 arima
  <chr>                               <model>
1 ACT                          <ARIMA(0,1,1)>
2 New South Wales    <ARIMA(0,1)(0,1)[4]>
3 northern Territory <ARIMA(1,1)[4]>
4 Queensland                   <ARIMA(2,2)>
5 South Australia    <ARIMA(1,1)[4]>
6 Tasmania           <ARIMA(0,3)(2,0)[4]>
7 Victoria           <ARIMA(0,1)[4]>
8 Western Australia            <ARIMA(0,3)>

我知道规范存储在model [[1]] $ fit $ spec下,但是如果我有多模型,我想不出一种提取规范的方法

理想情况下我想

  State                                 arima       p     d       q
  <chr>                               <model>
1 ACT                          <ARIMA(0,1)>       0     1       1
2 New South Wales    <ARIMA(0,1)[4]>       0     1       1
3 northern Territory <ARIMA(1,1)[4]>       1     0       1
4 Queensland                   <ARIMA(2,2)>       
5 South Australia    <ARIMA(1,1)[4]>       and so on....
6 Tasmania           <ARIMA(0,3)>

谢谢!

解决方法

那呢?

# specific needed libraries from tidyverse
library(dplyr)
library(purrr)
library(tidyr)

fit %>%
    mutate(pdq = map(arima,c("fit","spec"))) %>% 
    unnest(pdq)


#> # A tibble: 8 x 10
#>   State                                 arima     p     d     q     P     D     Q constant period
#>   <chr>                               <model> <int> <int> <int> <int> <int> <int> <lgl>     <dbl>
#> 1 ACT                          <ARIMA(0,1,1)>     0     1     1     0     0     0 FALSE         4
#> 2 New South Wales    <ARIMA(0,1)(0,1)[4]>     0     1     1     0     1     1 FALSE         4
#> 3 Northern Territory <ARIMA(1,1)[4]>     1     0     1     0     1     1 FALSE         4
#> 4 Queensland                   <ARIMA(2,2)>     2     1     2     0     0     0 FALSE         4
#> 5 South Australia    <ARIMA(1,1)[4]>     1     0     1     0     1     1 FALSE         4
#> 6 Tasmania           <ARIMA(0,3)(2,0)[4]>     0     0     3     2     1     0 FALSE         4
#> 7 Victoria           <ARIMA(0,1)[4]>     0     1     1     0     1     1 FALSE         4
#> 8 Western Australia            <ARIMA(0,3)>     0     1     3     0     0     0 FALSE         4

它适用于R4.0和dplyr >= 1.0。不确定以前的版本。

map是从列表中提取数据的一种非常舒适的方法。新的arima列是一个列表,您可以利用这个事实来发挥自己的优势。

警告:解决方案的输出将是tibble,而不是类似于输入的mable。为了恢复相同的类,请在末尾添加:

%>% as_mable(key = State)