BoxCox.lambda不返回与寓言功能相同的结果

问题描述

我正在比较BoxCox.lambda包中的自动Lambda选择函数forecast与VS fable包中的自动Lambda选择features

的结果

如下所示,这两个函数未返回相同的结果。此外,当我将BoxCox.lamda应用于同一数据时,一次在ts对象上,一次在vector上,结果是不同的。

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

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

解决方法

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

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

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