Прогноз нескольких временных рядов в R с использованием - PullRequest
3 голосов
/ 10 октября 2019

Рассмотрим случайный data.frame:

d <- data.frame(replicate(10,sample(0:1,1000,rep=TRUE)))

Я хочу рассматривать каждую строку как уникальный временной ряд (в данном случае - десять лет). Итак, во-первых, мне нужно преобразовать данные во временные ряды. Я пробовал следующий код:

d1 <- ts(d, start=2000, end=2009)

Однако этот код рассматривает временные ряды как один длинный временной ряд на 100 лет, я думаю. В моем случае я хочу 1000 уникальных временных рядов за 10 лет.

И затем я хочу прогнозировать каждую 1000 временных рядов (скажем, 1 год). Используя следующий код:

fit <- tslm(d1~trend) fcast <- forecast(fit, h=1) plot(fcast)

Я получаю один прогноз (поскольку я в своем наборе данных d1 рассматриваю только один временной ряд).

Может кто-нибудьпомочь мне с этим?

Ответы [ 2 ]

3 голосов
/ 10 октября 2019

Если мы ищем создание временных рядов для каждого столбца, затем выполните цикл по столбцам набора данных с помощью lapply и создайте его

library(forecast)
lst1 <- lapply(d, ts, start = 2000, end = 2009)
#If we want to split by `row`
#lst1 <- lapply(asplit(as.matrix(d), 1), ts, start = 2000, end = 2009)
par(mfrow = c(5, 2))
lapply(lst1, function(x) {
        fit <- tslm(x ~ trend)
        fcast <- forecast(fit, h = 1)
        plot(fcast)
   })

enter image description here

1 голос
/ 11 октября 2019

@ akrun показывает, как это сделать, используя базу R и пакет прогноза.

Вот как сделать то же самое, используя новый пакет fable, предназначенный для такого рода вещей.

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

set.seed(1)
d <- data.frame(replicate(10, sample(0:1, 1000, rep = TRUE)))
# Transpose
d <- t(d)
colnames(d) <- paste("Series",seq(NCOL(d)))
# Convert to a tsibble
df <- d %>%
  as_tibble() %>%
  mutate(time = 1:10) %>%
  gather(key = "Series", value = "value", -time) %>%
  as_tsibble(index = time, key = Series)
df
#> # A tsibble: 10,000 x 3 [1]
#> # Key:       Series [1,000]
#>     time Series   value
#>    <int> <chr>    <int>
#>  1     1 Series 1     0
#>  2     2 Series 1     1
#>  3     3 Series 1     0
#>  4     4 Series 1     0
#>  5     5 Series 1     1
#>  6     6 Series 1     0
#>  7     7 Series 1     0
#>  8     8 Series 1     0
#>  9     9 Series 1     1
#> 10    10 Series 1     0
#> # … with 9,990 more rows
# Fit models
fit <- model(df, TSLM(value ~ trend()))
# Compute forecasts
fcast <- forecast(fit, h = 1)
# Plot forecasts for one series
fcast %>%
  filter(Series == "Series 1") %>%
  autoplot(df)

Создано в 2019-10-11 пакетом Представление (v0.3.0)

...