Нерегулярные временные ряды в пакете басни

В пакете tsibble и пакете fable я где-то читал, что мы можем обрабатывать нерегулярные временные ряды. Я не смог найти ничего с примерами, как это сделать. У меня есть следующие вопросы:

  1. Нужно ли мне преобразовывать нерегулярные таймсерии в обычные, прежде чем я смогу моделировать? (На данный момент я знаю, что нам нужно преобразовать нерегулярные временные ряды в обычные. Пожалуйста, дайте мне знать, если это не так? А если нет, то какие модели не нуждаются в регулярных временных рядах?)
  2. Какие инструменты и модели есть в tidyverts / tsibble/ fable /fabletools для обработки нерегулярных таймсерий?

Есть вопросы / ссылки, где я могу увидеть рабочий пример? Например, в этом вопросе для его решения используется zoo / xts .

Я видел некоторые возможности, связанные с этим в zoo / xts, что всегда хорошо, но я крутю колеса над басней и пытаюсь заставить ее работать.

для образца набора данных мы можем использовать

          DF <- structure(list(station = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L), Time = structure(c(1L, 2L, 3L, 5L, 7L, 1L, 2L, 4L, 6L, 8L
), .Label = c("01-01-1974", "01-02-1974", "01-03-1974", "01-04-1974", 
"01-05-1974", "01-06-1974", "01-07-1974", "01-08-1974"), class = "factor"), 
    WaterTemp = c(5, 5, 8.6000004, 8.1333332, 12.7999999, 5, 
    5, 8.6000004, 8.1333332, 12.7999999)), .Names = c("station", 
"Time", "WaterTemp"), class = "data.frame", row.names = c(NA, 
-10L))

1 ответ

Большинство моделей доступны в {fable}требуют, чтобы наблюдения были регулярными, а многие модели также требуют, чтобы в данных не было пробелов. Пример модели, которая поддерживает нестандартные данные: fable::TSLM().

Данные из приведенного выше примера обычно считаются «обычными», но с пробелами. Это потому, что данные имеют общий интервал 1 month, однако в данных отсутствуют несколько месяцев. Вот как можно создать тиббл для этих данных:

      DF <- structure(list(station = c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
                                 2L), Time = structure(c(1L, 2L, 3L, 5L, 7L, 1L, 2L, 4L, 6L, 8L
                                 ), .Label = c("01-01-1974", "01-02-1974", "01-03-1974", "01-04-1974", 
                                               "01-05-1974", "01-06-1974", "01-07-1974", "01-08-1974"), class = "factor"), 
                     WaterTemp = c(5, 5, 8.6000004, 8.1333332, 12.7999999, 5, 
                                   5, 8.6000004, 8.1333332, 12.7999999)), .Names = c("station", 
                                                                                     "Time", "WaterTemp"), class = "data.frame", row.names = c(NA, 
                                                                                                                                               -10L))

# Fix $Time to a valid yearmonth index variable
library(tsibble)
library(dplyr)
DF <- DF %>% 
  mutate(Time = yearmonth(as.Date(format(Time), format = "%d-%m-%Y")))
DF
#>    station     Time WaterTemp
#> 1        1 1974 Jan  5.000000
#> 2        1 1974 Feb  5.000000
#> 3        1 1974 Mar  8.600000
#> 4        1 1974 May  8.133333
#> 5        1 1974 Jul 12.800000
#> 6        2 1974 Jan  5.000000
#> 7        2 1974 Feb  5.000000
#> 8        2 1974 Apr  8.600000
#> 9        2 1974 Jun  8.133333
#> 10       2 1974 Aug 12.800000

# Create a 'regular' tsibble (with gaps)
as_tsibble(DF, key = "station", index = "Time")
#> # A tsibble: 10 x 3 [1M]
#> # Key:       station [2]
#>    station     Time WaterTemp
#>      <int>    <mth>     <dbl>
#>  1       1 1974 Jan      5   
#>  2       1 1974 Feb      5   
#>  3       1 1974 Mar      8.60
#>  4       1 1974 May      8.13
#>  5       1 1974 Jul     12.8 
#>  6       2 1974 Jan      5   
#>  7       2 1974 Feb      5   
#>  8       2 1974 Apr      8.60
#>  9       2 1974 Jun      8.13
#> 10       2 1974 Aug     12.8

Чтобы заполнить пробелы в этом наборе данных - аналогично тому, что показано в связанном вопросе - вы можете использовать tsibble::fill_gaps()функция. Это делает данные совместимыми с моделями, которые поддерживают пропущенные значения, но не поддерживают пробелы в данных, такие как fable::ARIMA().

      # Create a 'regular' tsibble (with gaps) then complete the gaps
as_tsibble(DF, key = "station", index = "Time") %>% 
  fill_gaps()
#> # A tsibble: 15 x 3 [1M]
#> # Key:       station [2]
#>    station     Time WaterTemp
#>      <int>    <mth>     <dbl>
#>  1       1 1974 Jan      5   
#>  2       1 1974 Feb      5   
#>  3       1 1974 Mar      8.60
#>  4       1 1974 Apr     NA   
#>  5       1 1974 May      8.13
#>  6       1 1974 Jun     NA   
#>  7       1 1974 Jul     12.8 
#>  8       2 1974 Jan      5   
#>  9       2 1974 Feb      5   
#> 10       2 1974 Mar     NA   
#> 11       2 1974 Apr      8.60
#> 12       2 1974 May     NA   
#> 13       2 1974 Jun      8.13
#> 14       2 1974 Jul     NA   
#> 15       2 1974 Aug     12.8

Нерегулярный временной ряд можно создать с помощью regular = FALSE. Обычно это полезно, если вы работаете с данными событий. В этом случае вы вряд ли захотите заполнять пробелы, потому что их очень много.

      # Create an 'irregular' tsibble (no concept of gaps)
as_tsibble(DF, key = "station", index = "Time", regular = FALSE)
#> # A tsibble: 10 x 3 [!]
#> # Key:       station [2]
#>    station     Time WaterTemp
#>      <int>    <mth>     <dbl>
#>  1       1 1974 Jan      5   
#>  2       1 1974 Feb      5   
#>  3       1 1974 Mar      8.60
#>  4       1 1974 May      8.13
#>  5       1 1974 Jul     12.8 
#>  6       2 1974 Jan      5   
#>  7       2 1974 Feb      5   
#>  8       2 1974 Apr      8.60
#>  9       2 1974 Jun      8.13
#> 10       2 1974 Aug     12.8

Создано 2021-02-09 пакетом REPEX (v0.3.0)

Другие вопросы по тегам