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