【问题标题】:Rolling window for co-variance matrix协方差矩阵的滚动窗口
【发布时间】:2018-09-25 09:08:23
【问题描述】:

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

一般来说,将包含 5 种资产在 20 天内的收益的矩阵视为数据集

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

我想校准 5 天内收益的协方差矩阵,因此考虑到第 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, ], ])
  }
}

【问题讨论】:

  • 两件事。 1) 看来您的基于far-loop 的代码不起作用。 2) 您希望如何显示结果?
  • 我想要一个列表(代码中的 l 变量),其中有 6 个方差-协方差矩阵。考虑到所有列,这些矩阵应从 1:5、4:8、7:11、10:14、13:17、16:20(行/天)开始计算。但是,上面的代码计算了考虑 1:5、2:6、3:7(行)等的矩阵。
  • 我想要一个列表(代码中的 l 变量),其中有 6 个方差-协方差矩阵。考虑到所有列,这些矩阵应从 1:5、4:8、7:11、10:14、13:17、16:20(行/天)开始计算。但是,上面的代码计算了考虑 1:5、2:6、3:7(行)等的矩阵。 @MKR

标签: r matrix variance calibration rolling-computation


【解决方案1】:

扩展 OP 方法的解决方案是使用另一个变量 skip。根据反馈,似乎 OP 想要为第一个 5 行(1:5)计算 cov,然后想要 skip 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) %% 3) == 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,])))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2020-04-13
    • 2014-03-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多