问题描述
我正在比较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