我正在使用交叉验证拟合动态回归,但无法生成预测。
根据FPP3 的这个页面,想法是创建一个具有协变量值的未来数据对象,然后使用新的未来数据进行预测。每当我这样做时,我都会收到一个关键错误,“提供的数据包含与模型不同的关键结构。”
设置和模型拟合:
library(fable)
library(tidyverse)
library(tidyquant)
apple = tq_get("AAPL") %>%
select(symbol, date, open, close, volume) %>%
mutate(day_prior_result = case_when(lag(close) > lag(open) ~ 'up',
TRUE ~ 'down')) %>%
as_tsibble() %>%
mutate(day = row_number()) %>%
update_tsibble(index = day, regular = TRUE) %>%
select(-date)
apple_cv = apple %>%
stretch_tsibble(.init=750, .step=1)
apple_fit = apple_cv %>%
model(
arima = ARIMA(close ~ day_prior_result)
)
如果我尝试通过简单地从 CV 数据创建新数据来进行预测,则不会day_prior_result
生成协变量的值:
apple_fit %>% forecast(new_data(apple_cv, 1))
结果是 :
Error: Problem with `mutate()` column `arima`.
ℹ `arima = (function (object, ...) ...`.
x object 'day_prior_result' not found
如果我通过加入生成具有协变量值的未来数据集,然后将其传递给预测(),我会得到一个关键结构错误。
apple_new = apple_cv %>%
new_data(1) %>%
as_tibble() %>%
left_join(apple_cv %>% as_tibble() %>% select(day, day_prior_result)) %>%
distinct() %>%
as_tsibble(index=day, key = .id, regular=TRUE)
结果是:
Error: Provided data contains a different key structure to the models.
真的不确定第二种方法哪里出错了。两个 tsibble 对象的结构看起来是一样的。