Как анализировать нерегулярные временные ряды в R
у меня есть zoo
временные ряды в R:
d <- structure(c(50912, 50912, 50912, 50912, 50913, 50913, 50914,
50914, 50914, 50915, 50915, 50915, 50916, 50916, 50916, 50917,
50917, 50917, 50918, 50918, 2293.8, 2302.64, 2310.5, 2324.02,
2312.25, 2323.93, 2323.83, 2338.67, 2323.1, 2320.77, 2329.73,
2319.63, 2330.86, 2323.38, 2322.92, 2317.71, 2322.76, 2286.64,
2294.83, 2305.06, 55.9, 62.8, 66.4, 71.9, 59.8, 65.7, 61.9, 67.9,
38.5, 36.7, 43.2, 30.3, 42.4, 33.5, 48.8, 52.7, 61.2, 30, 41.7,
50, 8.6, 9.7, 10.3, 11.1, 9.2, 10.1, 9.6, 10.4, 5.9, 5.6, 6.6,
4.7, 6.5, 5.2, 7.5, 8.1, 9.5, 4.6, 6.4, 7.7, 9.29591864400155,
10.6585128174944, 10.4386464748912, 11.5738448647708, 10.9486074772952,
10.9546547052814, 10.3733963771546, 9.15627378048238, 8.22993822910891,
5.69045896511178, 6.95269658370746, 7.78781665368086, 7.20089569039135,
4.9759716583555, 8.99378907920762, 10.0924594632635, 10.3909638115674,
6.28203685114275, 9.16021859457356, 7.56829801052175, 0.695918644001553,
0.9585128174944, 0.138646474891241, 0.473844864770827, 1.74860747729523,
0.854654705281426, 0.773396377154565, -1.24372621951762, 2.32993822910891,
0.0904589651117833, 0.352696583707458, 3.08781665368086, 0.700895690391349,
-0.224028341644497, 1.49378907920762, 1.99245946326349, 0.890963811567351,
1.68203685114275, 2.76021859457356, -0.131701989478247), .Dim = c(20L,
6L), .Dimnames = list(NULL, c("station_id", "ztd", "zwd", "iwv",
"radiosonde", "error")), index = structure(c(892094400, 892116000,
892137600, 892159200, 892180800, 892245600, 892267200, 892288800,
892332000, 892353600, 892375200, 892418400, 892440000, 892461600,
892504800, 892526400, 892548000, 892591200, 892612800, 892634400
), class = c("POSIXct", "POSIXt")), class = "zoo")
Я хочу выполнить некоторые из анализов, которые ts
пакет позволяет мне делать, например, разложение временных рядов на тренд и сезонность и просмотр функции автокорреляции. Однако попытка сделать что-либо из этого дает ошибку: Error in na.fail.default(as.ts(x)) : missing values in object
.
глядя на это более подробно, кажется, что все эти функции работают на ts
объекты, которые, по определению, регулярно расположенные наблюдения. Мои наблюдения не являются, поэтому я заканчиваю с большим количеством NA
s и все терпит неудачу.
есть ли способ проанализировать нерегулярные временные ряды в R? Или мне нужно как-то преобразовать их в обычные? Если да, то есть ли простой способ сделать это?
1 ответов
я анализировал такие нерегулярные данные в прошлом, используя аддитивную модель для "разложения" сезонных и трендовых компонентов. Поскольку это регрессионный подход, вам нужно смоделировать остатки как процесс временных рядов, чтобы учесть отсутствие независимости в остатках.
я использовал mgcv пакет для этого анализа. По существу, модель установлена:
require(mgcv)
require(nlme)
mod <- gamm(response ~ s(dayOfYear, bs = "cc") + s(timeOfSampling), data = foo,
correlation = corCAR1(form = ~ timeOfSampling))
который соответствует циклическому сплайну в день переменной года dayOfYear
для сезонный термин и тренд представлены timeOfSampling
это числовая переменная. Остатки моделируются здесь как непрерывное время AR (1) с помощью timeOfSampling
переменная как компонент времени автомобиля(1). Это предполагает, что с увеличением временного разделения корреляция между остатками падает экспоненциально.
Я написал несколько сообщений в блоге о некоторых из этих идей:
- сглаживание временной корреляции данные
- аддитивное моделирование и глобальная серия средних температур HadCRUT3v
, которые содержат дополнительный код R для вас, чтобы следовать.