Функция точности R генерирует ошибку window.default в тестовом наборе временных рядов - PullRequest
0 голосов
/ 31 марта 2020

Я разделил свой временной ряд var на тест поезда, установленный этим кодом:

df_train <- df %>%
  filter(dt >= as.Date("2019-01-01") &  dt <= as.Date("2020-02-29"))

df_test <- df %>%
  filter(dt >= as.Date("2020-03-01") &  dt <= as.Date("2020-03-12"))

ts_train_tmp <- ts(data=df_train$new_user_cnt, frequency = 7)
ts_train <- diff(ts_train_tmp, 1)

ts_test_tmp <- ts(data=df_test$new_user_cnt, frequency = 7)
ts_test <- diff(ts_test_tmp, 1)

Затем я сделал поезд и тест по:

f_snaive <- snaive(ts_train, h=12)
accuracy(f_snaive, ts_test)

Но функция точности выше выдает эту ошибку:

Error in window.default(x, ...) : 'start' cannot be after 'end'

Я не понимаю, почему он возвращает эту ошибку. Мой поезд проходит с января 2019 года по февраль 2020 года, а тестовый набор - с 1 марта 2020 года по 12 марта 2020 года.

Любая помощь приветствуется. Спасибо!

1 Ответ

1 голос
/ 01 апреля 2020

Когда вы создаете объекты ts_train и ts_test, вы выбрасываете информацию о дате, поэтому они оба должны начинаться в одну и ту же дату.

Я предлагаю вам использовать пакет fable вместо пакета forecast для ежедневных данных. Он использует tsibble, а не ts объектов. Большинство из тех же методов моделирования и прогнозирования доступны. Вот некоторый код, показывающий, как сделать то же самое, что и вы, но используя tsibble и fable вместо ts объектов.

library(tidyverse)
library(tsibble)
library(fable)

df <- data.frame(
    dt = seq(as.Date("2019-01-01"), by = "day", length = 450),
    new_user_cnt = rnorm(450)
  ) %>%
  as_tsibble(index = dt) %>%
  mutate(
    diff = difference(new_user_cnt)
  )
df
#> # A tsibble: 450 x 3 [1D]
#>    dt         new_user_cnt   diff
#>    <date>            <dbl>  <dbl>
#>  1 2019-01-01       0.523  NA    
#>  2 2019-01-02       1.52    0.999
#>  3 2019-01-03      -2.51   -4.03 
#>  4 2019-01-04      -0.612   1.90 
#>  5 2019-01-05      -0.125   0.486
#>  6 2019-01-06       0.410   0.536
#>  7 2019-01-07      -1.30   -1.71 
#>  8 2019-01-08      -0.0844  1.22 
#>  9 2019-01-09      -0.239  -0.154
#> 10 2019-01-10      -1.44   -1.20 
#> # … with 440 more rows

df_train <- df %>%
  filter(dt >= as.Date("2019-01-01") & dt <= as.Date("2020-02-29"))

f_snaive <- df_train %>%
  model(
    mod1 = SNAIVE(diff)
  ) %>%
  forecast(h=12)

accuracy(f_snaive, df)
#> # A tibble: 1 x 9
#>   .model .type      ME  RMSE   MAE   MPE  MAPE  MASE   ACF1
#>   <chr>  <chr>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
#> 1 mod1   Test  -0.0379  2.08  1.72  117.  164.  1.17 -0.412

Создано в 2020-04-01 представляет пакет (v0.3.0)

...