Здесь есть пара проблем. Во-первых, вы предоставляете исторические временные данные и данные о доходах в аргументе newdata
, когда они должны быть будущими значениями этих переменных. Вторая проблема заключается в том, что пакет прогнозов не особенно хорош в поиске соответствующих переменных в newdata
и здесь запутывается. Обходные пути возможны, но я предлагаю вам использовать более новый пакет fable
вместо forecast
, что значительно упрощает подобные вещи.
library(tidyverse)
library(lubridate)
library(tsibble)
library(fable)
df <- tsibble(
quarter = seq(yearquarter("2010 Q1"), to=yearquarter("2018 Q3"), by = 1),
beer = c(
3.301, 2.826, 2.712, 3.934, 3.192, 2.975, 2.865, 3.789,
2.728, 2.840, 2.633, 3.837, 3.090, 2.779, 2.594, 3.960,
2.771, 2.860, 2.676, 3.831, 2.986, 2.558, 2.810, 3.743,
3.054, 2.764, 2.985, 3.807, 3.046, 2.880, 2.689, 4.005,
3.013, 2.800, 2.937
),
temp = c(
16.766667, 11.433333, 9.400000, 14.533333, 17.033333, 11.966667, 8.633333, 13.900000,
15.800000, 10.600000, 9.700000, 13.766667, 17.033333, 11.333333, 10.200000, 14.866667,
16.266667, 11.900000, 9.266667, 13.900000, 17.300000, 11.400000, 8.733333, 13.966667,
18.033333, 12.400000, 9.300000, 14.100000, 16.533333, 11.100000, 9.733333, 15.300000,
18.400000, 11.033333, 9.700000
),
income = c(
48.064, 47.755, 47.878, 47.707, 48.226, 49.063, 49.322, 49.518,
49.714, 49.390, 49.683, 50.386, 50.405, 51.476, 52.527, 53.456,
54.309, 54.308, 54.811, 54.723, 55.254, 55.913, 56.472, 56.316,
58.013, 58.312, 58.744, 59.806, 59.881, 60.683, 61.164, 61.887,
61.969, 62.507, 63.054
),
index = quarter
)
df
#> # A tsibble: 35 x 4 [1Q]
#> quarter beer temp income
#> <qtr> <dbl> <dbl> <dbl>
#> 1 2010 Q1 3.30 16.8 48.1
#> 2 2010 Q2 2.83 11.4 47.8
#> 3 2010 Q3 2.71 9.4 47.9
#> 4 2010 Q4 3.93 14.5 47.7
#> 5 2011 Q1 3.19 17.0 48.2
#> 6 2011 Q2 2.98 12.0 49.1
#> 7 2011 Q3 2.86 8.63 49.3
#> 8 2011 Q4 3.79 13.9 49.5
#> 9 2012 Q1 2.73 15.8 49.7
#> 10 2012 Q2 2.84 10.6 49.4
#> # … with 25 more rows
train <- df %>% filter(year(quarter) <= 2016)
test <- df %>% filter(year(quarter) > 2016)
fc <- train %>%
model(TSLM(beer ~ temp + income + trend() + season())) %>%
forecast(new_data = test)
Создано в 2020-04-29 Представить пакет (v0.3.0)