R 基于滚动窗口的小波相关

R 基于滚动窗口的小波相关,r,time-series,correlation,wavelet,rollapply,R,Time Series,Correlation,Wavelet,Rollapply,我有3个时间序列,我可以应用小波变换来使用滚动窗口。滚动窗口获取长度为200的单个时间序列,并在前30个样本上对其应用waveslim::modwt函数。这将输出我只感兴趣的5个列表(d1、d2、d3、d4),每个列表的长度为30。以下是一个简单的例子: library(waveslim) J <- 4 #no. of levels in decomposition data(ar1) ar1.modwt <- modwt(ar1, "la8", J) 最后一部分是为brick.w

我有3个时间序列,我可以应用小波变换来使用滚动窗口。滚动窗口获取长度为200的单个时间序列,并在前30个样本上对其应用
waveslim::modwt
函数。这将输出我只感兴趣的5个列表(d1、d2、d3、d4),每个列表的长度为30。以下是一个简单的例子:

library(waveslim)
J <- 4 #no. of levels in decomposition
data(ar1)
ar1.modwt <- modwt(ar1, "la8", J)
最后一部分是为
brick.wall
函数的输出构建相关矩阵,该函数在4个感兴趣的级别上都是
L

有一个名为
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])
库(waveslim)
数据交换

返回将您在问题中给出的部分放在一起:

1)创建3个时间序列

set.seed(1)
s <- replicate(3, rnorm(200), simplify = FALSE)
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)
4)创建相关矩阵

set.seed(1)
s <- replicate(3, rnorm(200), simplify = FALSE)
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)
编辑:特征值(根据注释要求)

对于
d1

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

1我不明白,你几乎拥有了一切,只需要为3个时间序列应用/修改
wave.correlation
?@PoGibas它不是那么简单,至少在我的头脑中不是。是的,我有第1部分和第2部分,我需要创建第3部分,但我不是一个强大的程序员,处理列表对我来说很困难,我没有和他们一起工作的经验。如果你有任何意见,我很高兴听到。非常感谢你,这是一个巨大的帮助。现在我有了“输出”,最后一点是如何使用应用函数和本征函数来计算每个级别的本征值,即d1->d4?
eigenvalues1 <- lapply(output, function(x) eigen(x[[1]], symmetric = TRUE, 
                                                 only.values = TRUE)$values)