【发布时间】:2020-11-06 17:28:34
【问题描述】:
我想将 tslm 模型拟合到每个时间序列组。 我正在关注here 的示例,但我不想拟合 ets 模型,而是想拟合 tslm。
我调整了代码,使其看起来像这样:
library(tidyverse)
library(timetk)
library(sweep)
library(forecast)
monthly_qty_by_cat2 <-
bike_sales %>%
mutate(order.month = as_date(as.yearmon(order.date))) %>%
group_by(category.secondary, order.month) %>%
summarise(total.qty = sum(quantity)) %>%
mutate(trendx = row_number())
monthly_qty_by_cat2_nest <-
monthly_qty_by_cat2 %>%
group_by(category.secondary) %>%
nest() %>%
mutate(data.ts = map(.x = data,
.f = tk_ts,
select = -order.month,
start = 2011,
freq = 12)) %>%
mutate(fit.ts = map(data.ts, ~tslm(total.qty ~ season, data=.x))) %>%
mutate(fcast.ts = map(fit.ts, forecast))
它可以工作,但是当我改变时
mutate(fit.ts = map(data.ts, ~tslm(total.qty ~ season, data=.x)))
到
mutate(fit.ts = map(data.ts, ~tslm(total.qty ~ trendx, data=.x)))
我收到一个错误:
错误:
mutate()输入fcast.ts有问题。 未找到 x 对象“trendx” 并且输入fcast.ts是map(fit.ts, forecast)。
如何使用 tslm 模型中的自定义预测器预测这些数据?
编辑为了使用 fable 包,我重写了代码:
monthly_qty_by_cat2 <-
bike_sales %>%
mutate(order.month = as_date(as.yearmon(order.date))) %>%
group_by(category.secondary, order.month) %>%
summarise(total.qty = sum(quantity)) %>%
mutate(trendx = row_number())
monthly_qty_by_cat2_nest <-
monthly_qty_by_cat2 %>%
group_by(category.secondary) %>%
as_tsibble(key = category.secondary)
monthly_qty_by_cat2_nest %>%
model(tslm = TSLM(total.qty ~ trendx)) %>%
forecast()
并收到错误:
错误:
mutate()输入tslm有问题。 未找到 x 对象“trendx” 无法从提供的new_data计算所需的变量。 您的模型是否需要额外的变量来生成预测?
【问题讨论】:
-
fable 包就是为此而设计的。如果没有可重现的数据结构示例,我将无法提供更多帮助。
-
bike_sales 是扫包link提供的数据集
-
我编辑了代码,使用了 fable 包,仍然收到错误。
标签: r time-series tidyverse