Создание объектов TS в R с определенными днями между каждым реестром - PullRequest
0 голосов
/ 11 декабря 2018

Я ищу способ создания ts объектов в R для следующего случая:

У меня есть набор данных спроса по нескольким продуктам, где дни между запросами - это определенное числодней ( время выполнения ).Эти дни между спросом не являются постоянными, поскольку они меняются в зависимости от продукта.Давайте приведем тривиальный пример:

Date       Demand
2016-03-25    2
2016-03-30    0
2016-04-04    5
2016-04-09    3
2016-04-14    4
   ...
2017-12-31    2

Здесь время выполнения заказа (время между запросами или разрыв между днями) составляет 5 дней .Данные начинаются с 2016-03-25 и заканчиваются 2017-12-31 с format = %Y-%m-%d.После прочтения ts документации я попытался создать свой ts объект со следующим выражением:

ts(df, frequency = (360/5), start = c(2016, 16))

Однако я получаю следующий результат:

Time Series:
Start = c(2016, 17) 
End = c(2018, 4) 
Frequency = 72 

Что естественноневерно, поскольку ряд заканчивается на 2017-12-31, а на выходе отображается End = c(2018, 4), что в моих расчетах будет 2018-01-20.

Каков наилучший способ установить ts в наборе данных с этими характеристиками (с начальной, конечной датой и временем выполнения)?Что, если время выполнения заказа было не 5 дней, а 18 дней и началось в другую начальную дату серии?

Заранее спасибо за вашу помощь.

PD Я рассчитал 16 в параметре start = c(2016, 16), подсчитав вручную, в какое время с 5 января я достиг 25 марта (используя 30 дней в каждом месяце).

1 Ответ

0 голосов
/ 11 декабря 2018

Первые несколько точек:

  1. Разница между первой и последней датой в вопросе не кратна 5, поэтому, если ваши данные действительно регулярно располагаются, данные отображаются неверно,Мы будем предполагать, что конечная дата 2017-12-30, чтобы избежать этой проблемы.

    as.Date("2017-12-31") - as.Date("2016-03-25")
    ## Time difference of 646 days
    
  2. ts обычно не подходит для использования с датами.

  3. баллы должны быть регулярно разнесены, и если они разнесены на 5 дней, у нас обычно будет 365/5 = 73 балла в год, если только у нас нет високосного года, в котором первая дата1 января, поэтому давайте исключим эту возможность.

Исходя из вышеизложенного, мы можем использовать:

tt <- ts(dd$Demand, end = c(2017, 365/5), freq = 365/5)

, где мы предполагаем, что dd такое, как показано в примечании.в конце.

Год и позиция цикла, соответствующие каждой дате в dd, равны

Year <- as.integer(time(tt))
Cycle <- cycle(tt)

Линейная регрессия as.numeric (dd $ Date) против as.numeric (time (tt))) и наоборот можно использовать для перевода времени.

Примечание

Данные испытаний dd в воспроизводимой форме:

dates <- seq(as.Date("2016-03-25"), as.Date("2017-12-31"), by = 5)
dd <- data.frame(Date = dates, Demand = seq_along(dates))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...