【问题标题】:How can I add exogenous variables to my ARIMA model estimation while using fable package with model() extension如何在使用带有 model() 扩展的 fable 包时将外生变量添加到我的 ARIMA 模型估计中
【发布时间】:2021-01-22 12:34:51
【问题描述】:

我正在尝试估计 100 个不同系列的 ARIMA 模型。所以我使用fabletools::model() 方法和fable::ARIMA() 函数来完成这项工作。但我无法在模型估计中使用我的外生变量。

我的系列有 3 个不同的列,第一个标识第一个出口的 ID 标签,然后是 Date.Time 标签,最后是销售。除了这些变量之外,我还有代表一天中的小时和一周的虚拟变量。

按照下面给出的代码,我将包含我的 endegounus 和 exegenous 变量的数据框转换为 tstibble。

ts_forecast <- df11  %>% select(-Date) %>%
  mutate(ID = factor(ID)) %>% group_by(ID) %>% as_tsibble(index=Date.Time,key=ID)%>%tsibble::fill_gaps(Sales=0) %>%
  fabletools::model(Arima = ARIMA(Sales,stepwise = TRUE,xreg=df12))

使用此代码,我尝试预测使用 ID 因子标识的多个网点的相同日期时间间隔的值。但是,代码返回以下错误。

>     Could not find an appropriate ARIMA model.
>     This is likely because automatic selection does not select models with characteristic roots that may be numerically unstable.
>     For more details, refer to https://otexts.com/fpp3/arima-r.html#plotting-the-characteristic-roots

销售是我的内生目标变量,df12 包括代表小时和天的虚拟变量。一些商店不会在某些特定时间创造销售,因此它们代表 01:00 AM 的虚拟变量对于所有观察都可能为零。但是我不认为这会是一个问题,而 fable 使用逐步方法。我想,当代码看到变量为 0 时,它可以排除它们

我不确定是什么问题。我是否使用有问题的方式将 xreg 添加到模型中(在 ARIMA hep 页面中,它说 xreg= 就像以前的预测包一样)或者问题与我提到的第二个问题有关,包括所有观察的“0”。如果是第二个,则可能有解决方案可以排除所有具有恒定 0 值的变量。

如果你能帮助我,我会很高兴。

谢谢

【问题讨论】:

  • fable 使用公式接口。查看ARIMA 的帮助文件以查看使用协变量的示例。
  • 非常感谢您的帮助。我将代码更改为公式表示法。但我仍然需要添加每小时虚拟变量,因为网点的销售具有显着的每小时季节性。但我无法使用我之前创建的每小时显示一天中的时间的假人。当我添加这些变量时,我收到特征根错误。但是我尝试使用包中提供的 common_xreg 函数,但我认为 season(periods = 24) 不适合每小时的假人。因为我再次收到排名不足错误。

标签: r time-series forecast fable-r


【解决方案1】:

这是一个使用每小时行人计数数据的示例。

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
library(tsibble)
library(fable)
#> Loading required package: fabletools

# tsibble with hourly data
df <- pedestrian %>%
  mutate(dow = lubridate::wday(Date, label=TRUE))
# Training data
train <- df %>% 
  filter(Date <= "2015-01-31")
# Fit models
fit <- train %>%
  model(arima = ARIMA(Count ~ season("day") + dow + pdq(2,0,0) + PDQ(0,0,0)))
# Forecast period
fcast_xregs <- df %>%
  filter(Date > "2015-01-31", Date <= "2015-02-07") 
# Forecasts
fit %>% 
  forecast(fcast_xregs)
#> # A fable: 504 x 8 [1h] <Australia/Melbourne>
#> # Key:     Sensor, .model [3]
#>    Sensor .model Date_Time                     Count  .mean Date        Time
#>    <chr>  <chr>  <dttm>                       <dist>  <dbl> <date>     <int>
#>  1 Birra… arima  2015-02-01 00:00:00  N(-67, 174024)  -67.1 2015-02-01     0
#>  2 Birra… arima  2015-02-01 01:00:00 N(-270, 250881) -270.  2015-02-01     1
#>  3 Birra… arima  2015-02-01 02:00:00 N(-286, 310672) -286.  2015-02-01     2
#>  4 Birra… arima  2015-02-01 03:00:00 N(-283, 351704) -283.  2015-02-01     3
#>  5 Birra… arima  2015-02-01 04:00:00 N(-264, 380588) -264.  2015-02-01     4
#>  6 Birra… arima  2015-02-01 05:00:00  N(-244, 4e+05) -244.  2015-02-01     5
#>  7 Birra… arima  2015-02-01 06:00:00 N(-137, 414993) -137.  2015-02-01     6
#>  8 Birra… arima  2015-02-01 07:00:00   N(93, 424929)   93.0 2015-02-01     7
#>  9 Birra… arima  2015-02-01 08:00:00  N(292, 431894)  292.  2015-02-01     8
#> 10 Birra… arima  2015-02-01 09:00:00  N(225, 436775)  225.  2015-02-01     9
#> # … with 494 more rows, and 1 more variable: dow <ord>

reprex package (v0.3.0) 于 2020 年 10 月 9 日创建

注意事项:

  • 您无需在 R 中创建虚拟变量。公式界面将适当地处理分类变量。
  • ARIMA 中的 season("day") 特殊值将生成适当的季节性分类变量,相当于每小时 23 个虚拟变量。
  • 我指定了一个特定的 ARIMA 模型来节省计算时间。但省略 pdq 特殊符号以自动选择最佳模型。
  • 保持 PDQ(0,0,0) 特殊,因为在使用外生变量时不需要 ARIMA 模型来处理季节性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2015-05-14
    相关资源
    最近更新 更多