使用适合另一组的模型对一组的寓言预测结果

问题描述

我正在尝试使用适合一组时间序列的fable模型来预测另一组的时间序列:

library(dplyr)
library(fable)
library(feasts)
library(tsibble)
library(fabletools)

df <- data.frame(
    id = rep(c('A','B'),each = 5),date = seq(as.Date('2020-01-01'),by = "month",length.out = 10),y = rnorm(10)
)

train_tsbl <- as_tsibble(filter(df,id == 'A'),key = id,index = date)
test_tsbl <- as_tsibble(filter(df,id == 'B'),index = date)

model <- train_tsbl %>%
    model(lm = TSLM(y ~ trend()))

但是,当预测到“测试”集–对应于ID'B'的记录时,forecast调用将返回'B' –测试集的空结果。

> forecast(model,test_tsbl)
# A fable: 0 x 4 [?]
# Key:     id,.model [0]
# … with 4 variables: id <fct>,.model <chr>,date <date>,y <dist>

但是对于train_tsbl,以下内容

> forecast(model,train_tsbl)
# A fable: 5 x 5 [1D]
# Key:     id,.model [1]
  id    .model date                   y  .mean
  <fct> <chr>  <date>            <dist>  <dbl>
1 A     lm     2020-01-01  N(0.19,1.8)  0.191
2 A     lm     2020-02-01 N(-0.12,1.5) -0.122
3 A     lm     2020-03-01 N(-0.42,1.3) -0.416
4 A     lm     2020-04-01 N(-0.73,1.5) -0.730
5 A     lm     2020-05-01    N(-1,1.8) -1.03 

我似乎找不到指定用于预测新ID的选项。这是怎么回事?

解决方法

您正在使用id作为密钥,这意味着您需要为每个密钥配备一个单独的模型。但是您的训练数据不包含id==B,因此没有B模型。

在这里很难知道您的期望。您要为B行使用哪种模型?

如果您想使用A模型,请设置测试集,将B替换为A

> forecast(model,test_tsbl %>% mutate(id = 'A'))
# A fable: 5 x 5 [1D]
# Key:     id,.model [1]
  id    .model date            y .distribution 
  <chr> <chr>  <date>      <dbl> <dist>        
1 A     lm     2020-06-01 -0.100 N(-0.10,0.32)
2 A     lm     2020-07-01 -0.217 N(-0.22,0.42)
3 A     lm     2020-08-01 -0.338 N(-0.34,0.56)
4 A     lm     2020-09-01 -0.459 N(-0.46,0.73)
5 A     lm     2020-10-01 -0.575 N(-0.58,0.93)