ウェーブレット変換をローリングウィンドウを使用して適用できる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を。 Grothendieckは、1つの時系列のローリングウインドウのアプローチのためのきちんとしたコードを提供しましたhere。
ローリングウィンドウが1ずつ増加し、私たちはもう一度やり直して、時系列の全長がロールオーバーされるまで、d1-> d4だけを気にする5つのリストを作成します。
次の手順は、ローリングウィンドウリストの出力にwaveslim::brick.wall
関数を適用することです。 brick.wall
関数は、4レベルにわたる最初のウィンドウの出力をmodwt
から探し、値の一部を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))
最後のピースは、関心の4つのレベルを超える上記L
あるbrick.wall
機能の出力の相関行列を構築することです。
brick.wall
出力XとYを取り、様々なレベルでwave.correlation
を計算するwaveslim::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つの時系列の完全相関行列を計算したいと思います。上記の例の為替レートでは、私が今したい時系列の全長を使用するので、ローリングウインドウアプローチを使用しないことに注意してください。また、2つの時系列間の相関のための単一の値も生成します。時間の経過とともにこれらの相関行列の固有値に興味があるので、私が必要とする完全な相関行列は構成しません。要約中のSO
:
- が
- 3時系列を取るローリング・ウィンドウ
- を使用して
modwt
関数を適用 - 上記2のローリング・ウィンドウの各出力に
brick.wall
機能を適用し、完全な3x3の相関関係を作成します。上記の3つの出力を用いて4つのレベルの行列を計算する。
私はそれを得ることができません。ほとんどの場合、3つの時系列に対して 'wave.correlation'を適用/修正する必要があります。 – PoGibas
@PoGibasそれはそれほどシンプルではありません。少なくとも私の頭の中にはありません。私はパート1とパート2を持っています。私は第3を作成する必要がありますが、強力なプログラマーではなく、リストで作業するのは難しいです。彼らと協力して何か経験がある。あなたが何か入力があれば、それを聞いて嬉しく思っています。 – TheGoat