我正在尝试按照Rob Hyndman 的 Rstudio.conf 研讨会的方式进行分层预测,但遇到了一些问题。这是我的代码:
library(dplyr)
library(tsibbledata)
library(tsibble)
library(fable)
aus_retail_2013_tr <- aus_retail %>%
filter(Month <= yearmonth("2013 Dec"))
aus_retail_2013_vl <- aus_retail %>%
filter(Month > yearmonth("2013 Dec"))
hmod <- aus_retail_2013_tr %>%
aggregate_key(State*Industry, Turnover=sum(Turnover)) %>%
model(ar=ARIMA(log(Turnover))) %>%
reconcile(ar_adj=min_trace(ar))
fcasts_hmod <- forecast(hmod, aus_retail_2013_vl)
fcasts_hmod %>%
filter(is_aggregated(Industry), State == "Victoria") %>%
autoplot()
Run Code Online (Sandbox Code Playgroud)
该图的输出如下。
我的主要问题是:
ar和ar_adj线是相同的。我该如何解决这些问题?后一个可能是因为并非所有时间序列都涵盖整个时期,但我怎样才能reconcile不跳过缺失的时期?
这是 dplyr 0.8.5、fable 0.2.0、fabletools 0.1.3 和 tsibble 0.8.6。我在 Ubuntu/R 3.6.3 和 Windows 10/R 4.0.0 …
我想预测在服务时间内进入商店的顾客数量。我有每小时的数据
因此,我认为我的时间序列实际上是有规律的,但在某种意义上是非典型的,因为我每天有 10 个小时,每周有 5 天。
我可以通过将非服务时间设置为零来对这个常规的 24/7 时间序列进行建模,但我发现这样做效率低下而且也不正确,因为时间并没有丢失。相反,它们并不存在。
使用旧的ts框架我能够明确指定
myTS <- ts(x, frequency = 10)
Run Code Online (Sandbox Code Playgroud)
然而,在新的tsibble/fable框架内这是不可能的。它检测每小时的数据,预计每天 24 小时,而不是 10 小时。每个后续函数都会提醒我隐含的时间间隙。手动覆盖interval-Attribute 有效:
> attr(ts, "interval") <- new_interval(hour = 10)
> has_gaps(ts)
# A tibble: 1 x 1
.gaps
<lgl>
1 FALSE
Run Code Online (Sandbox Code Playgroud)
但对建模没有影响:
model(ts,
snaive = SNAIVE(customers ~ lag("week")))
Run Code Online (Sandbox Code Playgroud)
我仍然收到相同的错误消息:
snaive [1] 遇到 1 个错误。数据包含隐式时间间隙。您应该检查数据并
tsibble::fill_gaps()根据需要使用将隐式间隙转换为显式缺失值。
任何帮助,将不胜感激。
我一直在使用 tidy 预测包寓言(它非常有用)。
我想知道是否有一种简单的方法可以从 mable 中提取 p、d、q 值。
以本指南中的数据为例https://www.mitchelloharawild.com/blog/fable/
library(tidyverse)
library(tsibble)
library(fable)
tourism_state <- tourism %>%
group_by(State) %>%
summarise(Trips = sum(Trips))
fit <- tourism_state %>%
model(arima = ARIMA(Trips))
Run Code Online (Sandbox Code Playgroud)
> fit
# A mable: 8 x 2
# Key: State [8]
State arima
<chr> <model>
1 ACT <ARIMA(0,1,1)>
2 New South Wales <ARIMA(0,1,1)(0,1,1)[4]>
3 Northern Territory <ARIMA(1,0,1)(0,1,1)[4]>
4 Queensland <ARIMA(2,1,2)>
5 South Australia <ARIMA(1,0,1)(0,1,1)[4]>
6 Tasmania <ARIMA(0,0,3)(2,1,0)[4]>
7 Victoria <ARIMA(0,1,1)(0,1,1)[4]>
8 Western Australia <ARIMA(0,1,3)>
Run Code Online (Sandbox Code Playgroud)
我知道规格存储在 model[[1]]$fit$spec 下,但如果我有大量模型,我无法找到提取它们的方法
理想情况下我想要
State arima …Run Code Online (Sandbox Code Playgroud) 我如何才能从 mable 中单独报告每个模型。
示例代码(来自https://otexts.com/fpp3/holt-winters.html)
library(fabletools)
library(fable)
library(forecast)
library(tsibble)
library(feasts)
aus_holidays <- tourism %>%
filter(Purpose == "Holiday") %>%
summarise(Trips = sum(Trips))
fit <- aus_holidays %>%
model(
additive = ETS(Trips ~ error("A") + trend("A") + season("A")),
multiplicative = ETS(Trips ~ error("M") + trend("A") + season("M"))
)
fc <- fit %>% forecast(h = "3 years")
fc %>%
autoplot(aus_holidays, level = NULL) + xlab("Year") +
ylab("Overnight trips (millions)") +
scale_color_brewer(type = "qual", palette = "Dark2")
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,我想分别报告加法模型和乘法模型。我尝试过report(fc$additive),但这不起作用。或者,我可以一次安装一个模型,并且report(fc).
在线文档表明,底层算法与估计 (s)Arima 模型相同。在一些测试中,使用 Kaggle 数据集,我有不同的模型:ARIMA 函数向我显示 sArima、auto.arima 仅 Arima 模型。
auto.arima(tsbble_item1_store1$sales)
Run Code Online (Sandbox Code Playgroud)
给
Best model: ARIMA(5,1,2)
Run Code Online (Sandbox Code Playgroud)
和
tsbble_item1_store1 %>%
model(arima = ARIMA(sales))
Run Code Online (Sandbox Code Playgroud)
给
# A mable: 1 x 2
# Key: store [1]
store arima
<dbl> <model>
1 1 <ARIMA(1,1,3)(0,0,2)[7]>
Run Code Online (Sandbox Code Playgroud)
我有非常不同的模型。顺便说一句,Arima 的寓言函数向我展示了一个更好的模型,因为它控制季节性,而 auto.arima 函数则没有,而且数据显示明显的季节性。
当两个函数尝试估计模型时,有人知道默认参数的主要区别吗,因为我不明白文档?
抱歉,如果我有一些错误
提前致谢
祝你有美好的一天
MC
我正在尝试使用 fable 包创建 1000 家商店的预测。包是否fable像函数一样并行工作forecast?
非常感谢