【问题标题】:BoxCox.lambda not returning same results as fable featuresBoxCox.lambda 不返回与寓言特征相同的结果
【发布时间】:2020-11-30 10:41:03
【问题描述】:

我正在比较来自forecast 包的自动lambda 选择函数BoxCox.lambdafable 包自动lambda 选择features 的结果

如下所示,这两个函数返回的结果不同。此外,当我将BoxCox.lamda 应用于相同的数据,但一次应用于 ts 对象和一次应用于向量时,结果会有所不同。

有人可以解释我为什么会这样?

library(tidyverse)
library(tsibble)
library(lubridate)
library(fable)
library(tsibbledata)

library(forecast)


vic_cafe <- tsibbledata::aus_retail %>%
  filter(
    State == "Victoria",
    Industry == "Cafes, restaurants and catering services"
  ) %>%
  select(Month, Turnover)


lambda_fable <- vic_cafe %>% features(Turnover, guerrero) %>% pull(lambda_guerrero)
lambda_fable
#> [1] 0.1240828

lambda_forecast <- BoxCox.lambda(vic_cafe$Turnover, method = "guerrero")
lambda_forecast
#> [1] 0.02686482

lambda_forecast_ts <- BoxCox.lambda(as.ts(vic_cafe), method = "guerrero")
lambda_forecast_ts
#> [1] 0.1734189

【问题讨论】:

    标签: r time-series forecast fable-r tsibble


    【解决方案1】:

    feasts::guerrero() 函数使用所有可用数据,而 forecast::BoxCox.lambda() 忽略不完全符合年份的数据。

    您的 vic_cafe 数据集从 4 月开始,因此 feasts 包将季节分组为 4 月至 3 月,但预测将使用 1 月至 12 月并删除数据的第一部分。

    可以在here 找到更多讨论,我在文档中添加了对这些差异的提及:https://github.com/tidyverts/feasts/commit/830fe4095cf6231e7bb179519cddfeadd9cd7531

    【讨论】:

    • 谢谢米切尔。现在似乎很清楚了。我了解lambda_fablelambda_forecast_ts 之间的区别。但是,我的第二个问题仍然悬而未决。根据我的理解lambda_forecastlambda_fable 必须相同,因为lambda_forecast 是根据没有时间索引的数字向量计算的(因此无法修剪,必须使用所有数据)?跨度>
    • 如果季节性周期 forecast::BoxCox.lambda() 函数将按 2 对序列进行分组。第一次使用提供向量时,假定数据不是季节性的 (period = 1)因此,格雷罗的方法将在长度为 2 的子序列上计算。使用 ts 时,它是季节性的 (period = 12),因此子序列的长度为 12(1 月 - 12 月)。