Правильное вменение для зоорегированного объекта? - PullRequest
0 голосов
/ 18 мая 2018

Моя цель состоит в том, чтобы приписать NA в объекте временных рядов zooreg.Структура временного ряда является циклической.Мой код:

#load libraries required
library("zoo")

# create sequence every 15 minutes from 1st Dec to 20th Dec, 2018
timeStamp <- seq.POSIXt(from=as.POSIXct('2018-01-01 00:00:00', tz="UTC"), to=as.POSIXct('2018-01-20 23:45:00', tz="UTC"), by = "15 min")
# data which increases from 12am to 12pm, then decreases till 12 am of next day, for 20 days
readings <- rep(c(seq(1,48,1), seq(48,1,-1)), 20)
dF <- data.frame(timeStamp=timeStamp, readings=readings)

# create a regular zooreg object, frequency is 1 day( 4 readings * 24 hours)
readingsZooReg <- zooreg(dF$readings, order.by  = dF$timeStamp, frequency = 4*24)
plot(readingsZooReg)

# force some data to be NAs
window(readingsZooReg, start = as.POSIXct("2018-01-14 00:00:00", tz="UTC"), end = as.POSIXct("2018-01-16 23:45:00", tz="UTC")) <- NA
plot(readingsZooReg)


# plot imputed values
plot(na.approx(readingsZooReg))

Графики: Полный временной ряд, добавлены NA, Вмененный временной ряд

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

1) Правильно ли мое использование "zooreg"?Или объекта "зоопарк" будет достаточно?
2) Правильно ли моя частотная переменная?
3) Почему не работает na.approx?Я также попробовал na.StructTs, скрипт R зависает.
4) Есть ли решение, использующее какой-либо другой пакет?хтс, тс и тд?

1 Ответ

0 голосов
/ 20 мая 2018

Ваш текущий примерный временной ряд - обычный временной ряд .( нерегулярный временной ряд будет иметь временные шаги с различными временными интервалами между наблюдениями)

Например:

  • 10: 00: 10, 10:00:20, 10:00:30, 10:00:40, 10:00:50 (обычный интервал)
  • 10: 00: 10, 10:00:17, 10:00:33, 10:00: 37, 10:00:50 (с нерегулярным интервалом)

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

О частоте:

Вы установиличастота временных рядов обычно соответствует значению, при котором вы ожидаете повторения паттернов.(в вашем примере это может быть 96).В реальной жизни это часто 1 день, 1 неделя, 1 месяц, .... но это также может отличаться от этих, как 1,5 дня.(например, если у вас есть ежедневные возвращающиеся паттерны и 1-минутные наблюдения, вы должны установить частоту 1440).

na.approx зоопарка работает отлично.Это именно то, что ожидается.Интерполяция между точками 0 до разрыва и 0 в конце разрыва даст прямую линию в 0. Конечно, это, вероятно, не тот результат, который вы ожидали, потому что он не учитывает сезонность.Вот почему Г. Гротендик предлагает вам na.StructTS в качестве метода выбора.(этот метод обычно лучше учитывает сезонность)

Лучшим выбором, если вы не связаны с зоопарком, в данном конкретном случае будет использование na.seadec из пакета imputeTS (пакетапредназначен исключительно для импутации временных рядов).

Я добавил вам пример с хорошими графиками из пакета imputeTS

library(imputeTS)
yourTS <- ts(coredata(readingsZooReg), frequency = 96)
plotNA.distribution(yourTS)
imputedTS <- na.seadec(yourTS)
plotNA.imputations(yourTS, imputedTS)

Обычно imputeTS также отлично работает с зоопаркомвременные ряды в качестве входных данных.Я только изменил его на ts еще раз, потому что что-то с вашим объектом зоопарка кажется странным ... именно поэтому na.StructTS из самого зоопарка ломается.Может быть, кто-то с лучшими знаниями может помочь здесь.

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

...