我有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)
@G。格洛腾迪克已经为单个时间序列here提供了一个整洁的滚动窗口代码。
滚动窗口增加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个时间序列的完全相关矩阵。请注意,以上汇率的例子没有使用滚动窗口方法,因为它使用了我现在想要做的时间序列的全部长度,并且它还为两个时间序列之间的相关性生成了单个值。由于我对这些相关矩阵的特征值随着时间的推移感兴趣,它并不构建我所需要的全相关矩阵。
因此,在总结:
- 取3时间序列
- 使用滚动窗口应用
modwt
函数 - 应用
brick.wall
函数以滚动窗口的每个输出在2以上 - 创建完整的3×3的相关性使用以上3个输出的4个级别的矩阵
我不明白,你几乎拥有一切,只需要对3个时间序列应用/修改'wave.correlation'? – PoGibas
@PoGibas这不是那么简单,至少不是在我的头上。是的,我有第1部分和第2部分,我需要创建第3个,但我不是一个强大的程序员,使用列表对我来说很困难,我不有任何与他们合作的经验。如果您有任何意见,我会很高兴听到。 – TheGoat