У меня есть 3 временных ряда, к которым я могу применить вейвлет-преобразование с помощью скользящего окна. Скользящее окно берет один временной ряд длиной 200 и применяет к нему функцию waveslim::modwt
в течение первых 30 выборок. Это выводит 5 списков, из которых меня интересуют только (d1, d2, d3, d4), каждый из которых имеет длину 30. Простой пример можно найти здесь:
library(waveslim)
J <- 4 #no. of levels in decomposition
data(ar1)
ar1.modwt <- modwt(ar1, "la8", J)
@ГРАММ. Гротендик любезно предоставил аккуратный фрагмент кода для подхода скользящего окна для одного временного ряда здесь.
Скользящее окно увеличивается на 1, и мы снова идем, создавая еще 5 списков, из которых меня интересуют только d1-> d4 и так далее, и так далее, пока не будет пролистан весь временной ряд.
Следующим шагом является применение функции waveslim::brick.wall
к выводу списков скользящего окна. Функция brick.wall
просматривает выходные данные modwt
для первого окна на 4 уровнях и заменяет некоторые значения на NA
s.
Думаю, я решил это, изменив @G. Гротендик отвечает, используя следующий подход, надеюсь, я прав:
modwt2 <- function(...) unlist(head(brick.wall(modwt(...)), 4))
rollr <- rollapplyr(ar1, 30, FUN = modwt2, wf = "la8", n.levels = 4, boundary = "periodic")
L <- lapply(1:nrow(rollr), function(i) matrix(rollr[i,], , 4))
Последней частью является построение матриц корреляции для выходов функции brick.wall
, которая находится на L
выше по 4 интересующим уровням.
Существует функция под названием waveslim::wave.correlation
, которая принимает два brick.wall
выхода X и Y и вычисляет wave.correlation
на различных уровнях.
library(waveslim)
data(exchange)
returns <- diff(log(as.matrix(exchange)))
returns <- ts(returns, start=1970, freq=12)
wf <- "la8"
J <- 4
demusd.modwt <- modwt(returns[,"DEM.USD"], wf, J)
demusd.modwt.bw <- brick.wall(demusd.modwt, wf)
jpyusd.modwt <- modwt(returns[,"JPY.USD"], wf, J)
jpyusd.modwt.bw <- brick.wall(jpyusd.modwt, wf)
returns.modwt.cor <- wave.correlation(demusd.modwt.bw, jpyusd.modwt.bw,
N = dim(returns)[1])
Я хочу расширить это и вычислить полную матрицу корреляции для моих трех временных рядов. Обратите внимание, что в приведенном выше примере с обменными курсами не используется подход скользящего окна, поскольку он использует всю длину временного ряда, который я хотел бы сейчас сделать, а также дает одно значение для корреляции между двумя временными рядами. Он не создает полную матрицу корреляции, которая мне нужна, поскольку меня интересуют собственные значения этих матриц корреляции с течением времени.
Итак, в итоге:
- Возьмите 3 временных ряда
- Применить функцию
modwt
с помощью скользящего окна - Примените функцию
brick.wall
к каждому выходу скользящего окна в 2 выше - Создайте полную матрицу корреляции 3x3 для 4 уровней, используя выходные данные 3 выше, с течением времени.
wave.correlation
для трех временных рядов? - person pogibas   schedule 18.08.2017