R 使用tslm()预测时间序列组(&;三角帆
我想使tslm模型适合每个时间序列组。 我遵循的是ets模型的示例,但我不想拟合ets模型,而是想拟合tslm 我调整了代码,使其如下所示:R 使用tslm()预测时间序列组(&;三角帆,r,time-series,tidyverse,R,Time Series,Tidyverse,我想使tslm模型适合每个时间序列组。 我遵循的是ets模型的示例,但我不想拟合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))) %>%
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()
inputfcast.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()
按类别划分的每月数量2%
变异(order.month=as_date(as.yearmon(order.date)))%>%
分组依据(类别.次要,订单.月份)%>%
汇总(总数量=总和(数量))%>%
突变(trendx=行数()
每月数量(按类别2)
组别(中学组别)%>%
as_tsible(key=category.secondary)
每月按类别2分类的数量%>%
型号(tslm=tslm(总数量~trendx))%>%
预测()
并接收错误:
错误:mutate()
inputtslm
有问题。
找不到x对象“trendx”
无法根据提供的新数据计算所需变量。
您的模型是否需要额外的变量来生成预测
库(tidyverse)
图书馆(TSIBLE)
图书馆(寓言)
图书馆(lubridate)
按类别划分的每月数量2%
突变(order.month=yearmonth(order.date))%>%
分组依据(类别.次要,订单.月份)%>%
汇总(总数量=总和(数量))%>%
as_tsible(索引=order.month,键=category.secondary)%>%
变异(x=rnorm(长度(总数量)))
#>`summary()`按'category.secondary'重新分组输出(用'.groups'参数重写)
未来x%
突变(x=2)
每月数量(按类别2%>%
型号(tslm=tslm(总数量~趋势()+x))%>%
预测(新数据=未来数据)
#>#寓言:9x6[1M]
#>#键:category.secondary、.model[9]
#>类别.二级.型号订单.月总数.数量平均数x
#>
#>2016年1月1日越野赛tslm(369187840)369。2.
#>2 Cyclocross tslm 2016年1月N日(-2.575604)-2.50 2
#>3 Elite Road tslm 2016年1月N日(78432470)784。2.
#>4耐力路tslm 2016年1月N日(159117760)159。2.
#>5肥胖自行车tslm 2016年1月N(9566320)94.6 2
#>6山地tslm 2016年1月N日(19457732)194。2.
#>7体育tslm 2016年1月N日(12081568)120。2.
#>2016年1月第8次tslm试验N(21456269)214。2.
#>9 Triathalon tslm 2016年1月N(10294449)102。2.
由(v0.3.0)于2020年7月20日创建的寓言软件包就是为了实现这一点而设计的。如果没有可复制的数据结构示例,我无法提供更多帮助。bike_sales是随sweep package提供的数据集。我编辑了代码,使用了fable package,但仍然收到错误。在我的示例中,我使用了“trendx”,它是一个虚拟变量,而不是trend()。使用trend()或season()可以很好地工作,当我尝试使用额外的预测器时会出现问题。您可以像往常一样使用任何额外的预测器。你不需要在这里使用一个,因为trend()将为你创建相关变量。如果我使用任何额外的预测器,我会得到这个错误“object”,我已经更新了我的答案来说明如何做。如果使用其他预测值,则必须提供这些变量的未来值。
mutate(fit.ts = map(data.ts, ~tslm(total.qty ~ trendx, data=.x)))
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()