Р: Как я могу создать объект временного ряда с несколькими шкалами времени в существующем классе временных рядов R? - PullRequest
0 голосов
/ 24 марта 2020

I sh для создания объекта временного ряда в одном из существующих типов временных рядов R, в котором наблюдения помечаются двумя видами времени: порядковое время с индексом последовательных целых чисел, которые больше, меньше или равно как наблюдение до, после или одновременно с другим; и кардинальное время, состоящее из стандартных дат (дней, по крайней мере, для начинающих).

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

Вот набор игрушечных данных:

set.seed(1)
dates. <- seq(as.Date("2020-03-03"), by = "day", length.out=8)[c(1, 1, 2, 3, 3, 3, 4, 4, 4, 8, 8, 8, 8)]
index. <- c(1, 2, 3, 4, 4, 5, 6, 7, 8, 9, 9, 9, 10)
dat. <- rnorm(13)  
tib_ts <- tibble(dates., index., dat.)
tib_ts
# A tibble: 13 x 3
   dates.     index.   dat.
   <date>      <dbl>  <dbl>
 1 2020-03-03      1 -0.626
 2 2020-03-03      2  0.184
 3 2020-03-04      3 -0.836
 4 2020-03-05      4  1.60 
 5 2020-03-05      4  0.330
 6 2020-03-05      5 -0.820
 7 2020-03-06      6  0.487
 8 2020-03-06      7  0.738
 9 2020-03-06      8  0.576
10 2020-03-10      9 -0.305
11 2020-03-10      9  1.51 
12 2020-03-10      9  0.390
13 2020-03-10     10 -0.621

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

Однако я убежден, что реализация уже должна существовать в существующем классе или пакете, поскольку существуют общие проблемы с такой же или похожей временной структурой. Возьмем, к примеру, большие потери от несчастных случаев по долларовой стоимости, агрегированные по часам, дням или месяцам. В любом масштабе агрегации будут периоды без потерь и периоды с множественными потерями. Аналогично с дневными максимальными и минимальными значениями, будь то температура или цена акций. Вы знаете, что они приходят после вчерашнего максимума и минимума и до завтрашнего дня, но вы уже знаете, что пришло первым, или они разнесены на две минуты или 20 часов. Данные о ценах на акции часто рассматривают понедельник, как если бы это был день после пятницы, поскольку в это время транзакции не проводились. И так далее.

1 Ответ

1 голос
/ 24 марта 2020

Предположим, значения values, числа ix и даты d. Затем присвойте номера именам d и создайте объект зоопарка, используя это:

library(zoo)

values <- 1:4

ix <- c(0, 3, 4, 6)
d <- as.Date("2000-01-01") + ix
names(d) <- ix

z <- zoo(values, d)
time(z)
##            0            3            4            6 
## "2000-01-01" "2000-01-04" "2000-01-05" "2000-01-07" 

В этом примере разница между любыми двумя числами и разница между соответствующими датами одинакова, но это не обязательно. Числа могут быть не связаны с датами.

Если числа имеют вышеуказанное отношение к датам, то другая возможность состоит в том, чтобы просто использовать даты и затем получать числа, используя их, когда они вам нужны:

zz <- zoo(values, unname(d))
as.numeric(time(zz) - time(zz)[1]) # derive numbers from dates
## [1] 0 3 4 6
...