R 基于滚动窗口的小波相关
我有3个时间序列,我可以应用小波变换来使用滚动窗口。滚动窗口获取长度为200的单个时间序列,并在前30个样本上对其应用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
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)