gpt4 book ai didi

协方差矩阵的滚动窗口

转载 作者:行者123 更新时间:2023-12-02 02:55:12 29 4
gpt4 key购买 nike

我有一个 4 年的 Assets 返回时间序列,我正在尝试执行滚动窗口以估计校准期为 6 个月的方差-协方差矩阵。

一般来说,将包含 5 种 Assets 20 天内 yield 的矩阵视为数据集

data <- matrix(rnorm(100), 20, 5) #data represents the returns of 5 assets over 20 days

我想校准 5 天 yield 的协方差矩阵,因此考虑第 1、2、3、4、5 天。然后我想校准另一个协方差矩阵,考虑第 4、5、6、7 天, 8. 依此类推,使用滚动窗口(我已经尝试使用循环 for)。

window.size <- 5

但是将窗口大小设置为 5,对于第一个矩阵,代码会考虑第 1、2、3、4、5 天,但对于第二个矩阵,代码会考虑第 2、3、4、5、6 天(不是我想要的 4、5、6、7、8)。这是我的问题。我不知道如何修改代码以便从第 2 天到第 4 天“拆分”。我该如何解决这个问题?

window.size <- 5 #set the size of the window equal to 5 days
windows <- embed(1:nrow(data), window.size)
forApproach <- function(data, windows) {
l <- vector(mode="list", length=nrow(windows))
for (i in 1:nrow(data)) {
l[[i]] <- cov(data[windows[i, ], ])
}
}

最佳答案

扩展 OP 方法的解决方案是使用另一个变量 skip。根据反馈,OP 似乎想要计算前 5 行 (1:5) 的 cov,然后想要跳过 code> 3 行计算 cov 行 (4:9) 等等。

embed 的使用创建了大小为 5 的窗口,但跳过了 1。我们可以跳过行找到行索引的selected_windows,然后应用cov函数。

window.size <- 5
skip <- 3
windows <- embed(1:nrow(data), window.size)
selected_windows <- windows[(1:nrow(windows) %% skip) == 1, ]

# [,1] [,2] [,3] [,4] [,5]
# [1,] 5 4 3 2 1
# [2,] 8 7 6 5 4
# [3,] 11 10 9 8 7
# [4,] 14 13 12 11 10
# [5,] 17 16 15 14 13
# [6,] 20 19 18 17 16


#One can use for-loop or apply to calculate "cov" on group of rows and get the result
apply(selected_windows, 1, function(x)list(cov(data[x,])))

关于协方差矩阵的滚动窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49843548/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com