Определите разные временные ряды для разных столбцов - PullRequest
0 голосов
/ 10 мая 2019

У меня есть датафрейм, где некоторые столбцы начинаются позже, чем другие.Пожалуйста, найдите воспроизводимый пример.

set.seed(354)
df <- data.frame(Product_Id = rep(1:100, each = 50), 
                     Date = seq(from = as.Date("2014/1/1"), 
                                to = as.Date("2018/2/1"), 
                                by = "month"), 
                     Sales = rnorm(100, mean = 50, sd= 20))
df <- df[-c(251:256, 301:312, 2551:2562, 2651:2662, 2751:2762), ]

library(zoo)
z <- read.zoo(df, index = "Date", split = "Product_Id", FUN = as.yearmon)
tt <- as.ts(z)

Теперь для этого фрейма данных для столбцов 6,7,52,54 и 56 я хочу определить их как временные ряды, начиная с другой даты по сравнению с остальной частью фрейма данных.Предположительно данные начинаются с января 2000 г., столбец 6 - с июля 2000 г., столбец 7 - с января 2001 г. и т. Д.Как мне поступить, чтобы сделать это?

Позже я хочу выполнить прогноз для этого набора данных.Есть какие-либо материалы по этому вопросу?Должен ли я рассматривать каждый столбец как отдельный фрейм данных и делать прогнозирование.Или я могу преобразовать каждый столбец в другой объект временных рядов, который начинается с первого значения, отличного от NA?

1 Ответ

0 голосов
/ 13 мая 2019

Теперь для этого фрейма данных для столбцов 6,7,52,54 и 56 я хочу определить их как серию времени, начиная с другой даты по сравнению с остальной частью фрейма данных.Предположительно данные начинаются с января 2000 г., столбец 6 - с июля 2000 г., столбец 7 - с января 2001 г. и т. Д.Как мне поступить, чтобы сделать это?

Там, AFAIK, нет способа сделать это в R в матрице временных рядов.И если каждый столбец начинается в разные даты, то (поскольку каждый столбец имеет одинаковое количество записей), каждый столбец также должен будет end в разные даты.Это действительно то, что вам нужно?Коллекция временных рядов, которые все имеют одинаковую длину (чтобы они могли вписаться в матрицу), но которые начинаются и заканчиваются смещениями?Я изо всех сил пытаюсь понять, где что-то подобное могло бы быть полезным, за пределами своего рода соревнования по прогнозированию.

Если вам это действительно нужно, то я бы порекомендовал вам поместить свои временные ряды в структуру списка.Тогда каждый может начинаться и заканчиваться в любой день, и они могут быть одинаковой или разной длины.Получите вдохновение от Mcomp::M3.

Позже я хочу выполнить прогноз для этого набора данных.Есть какие-либо материалы по этому вопросу?Должен ли я рассматривать каждый столбец как отдельный фрейм данных и делать прогнозирование.Или я могу преобразовать каждый столбец в другой объект временных рядов, который начинается с первого значения, отличного от NA?

Поскольку ваш tt уже является объектом временного ряда, самым простым способом было бы просто выполнить итерациюего столбцы:

fcst <- matrix(nrow=10,ncol=ncol(tt))
for ( ii in 1:ncol(tt) ) fcst <- forecast(ets(tt[,ii]),10)$mean

Обратите внимание, что большинство функций моделирования в forecast выдает предупреждение и делает что-то разумное при обнаружении значений NA.Вот, например:

1: In ets(tt[, ii]) :
  Missing values encountered. Using longest contiguous portion of time series

Конечно, вы можете сделать что-то сами внутри цикла, например, найти последние NA и сразу после этого запустить временной ряд для моделирования (но убедитесь, что вы потерпели неудачуизящно, если последняя запись NA).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...