使用滚动窗口小波相关(Wavelet correlation using rolling windo

2019-09-30 16:55发布

我有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)

@G。 格罗腾迪克慷慨提供一个整洁的一段代码为一个单一的时间序列滚动窗口方法在这里 。

1滚动窗口增量,我们又来了,生产另外5只列出了直到时间序列的全长已经滚过我只关心D1-> D4等等等等。

下一步是将应用waveslim::brick.wall功能,滚动窗口列表的输出。 所述brick.wall函数查看的输出modwt用于跨4个级别的第一窗口和替换一些与所述值的NA秒。

我相信我已经通过修改@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个时间序列。 请注意,因为它使用了,我想时间序列的全长现在要做的,它也产生了两个时间序列之间的相关性的单个值与汇率上面的例子中不使用滚动窗口的方法。 它不建立,我需要为我感兴趣的这些相关矩阵随时间的特征值全相关矩阵。

因此,在总结:

  1. 取3次系列
  2. 应用modwt使用滚动窗口功能
  3. 适用brick.wall功能在上面2中的滚动窗口的每个输出
  4. 创建完整的3×3的相关矩阵对使用上述随时间的3个输出端的4个级别的

Answer 1:

放在一起,你在你的问题给出件:

1)创建3时间序列

set.seed(1)
s <- replicate(3, rnorm(200), simplify = FALSE)

2)及3)应用modwtbrick.wall具有滚动窗口

modwt2 <- function(...) unlist(head(brick.wall(modwt(...), wf = "la8"), 4))

rollr <- lapply(s, function(x) rollapplyr(x, 30, FUN = modwt2, wf = "la8", 
                                          n.levels = 4, boundary = "periodic"))

L <- lapply(rollr, function(x) lapply(1:nrow(x), function(i) matrix(x[i,], , 4)))

res <- lapply(L, function(y) lapply(y, function(x) as.list(as.data.frame(x))))

4)创建相关矩阵

create_4mat <- function(w) {
  # create four 3*3 correlation matrices (one for each level) for window w
  M <- replicate(4, matrix(0, nrow = 3, ncol = 3), simplify = FALSE)
  for (k in 1:4) {
    for (i in 1:3) {
      for (j in (i:3)[-1]) {
        M[[k]][i, j] = wave.correlation(res[[i]][[w]], res[[j]][[w]], N=30)[k, 1]
      }
    }
    M[[k]] <- M[[k]] + t(M[[k]]) + diag(1, 3, 3)
  }
  M
}

output <- lapply(1:171, create_4mat)

output是4点的相关性矩阵171名列表的列表。

例如, output[[28]][[2]]是相关矩阵d2在28号窗口:

output[[28]][[2]]
#            [,1]       [,2]      [,3]
# [1,]  1.0000000 -0.1740320 0.2292872
# [2,] -0.1740320  1.0000000 0.6046918
# [3,]  0.2292872  0.6046918 1.0000000

编辑:特征值(的要求,在评论)

对于d1

eigenvalues1 <- lapply(output, function(x) eigen(x[[1]], symmetric = TRUE, 
                                                 only.values = TRUE)$values)

同样,对于d2 。 请注意, d3d4的所有相关矩阵填充缺失值。



文章来源: Wavelet correlation using rolling window