我想使用滚动窗口生成协方差矩阵(和均值向量)。但在我所有的尝试中rollapply
堆叠协方差矩阵cov
并且耗尽了预先分配的空间(例如,如果我的原始数据有 40 个观察值,那么rollapply
不能返回超过 40 行)。
有什么方法可以让我得到rollapply
返回矩阵列表?或者返回一个data.frame
比原来的大data.frame
,我可以手动将其拆分为列表吗?我的最终目标是建立一个面板,将面板分成一个单独的列表data.frame
s,计算每个数据帧的滚动协方差和均值,然后使用这些协方差列表和下游均值与一群个体进行比较。
这是一些代码。我的问题是my.fun
不会返回所有协方差矩阵计算的数据。是我自己编写代码的最佳选择rollapply
?或者我自己的cov
返回一个向量,我将其转换回矩阵?谢谢!
library("zoo")
data.df <- data.frame(sic = rep(1:10, each = 40),
year = rep(1:40, len = 10*40),
one = rnorm(10*40),
two = 2*rnorm(10*40),
three = 3*rnorm(10*40))
data.list <- split(data.df, data.df$sic)
data.list <- lapply(data.list, zoo)
my.fun <- function(x) {
x <- x[, c("one", "two", "three")]
rollapply(x,
width = 10,
FUN = cov,
by.column = F,
align = "right")
}
cov.list <- lapply(data.list, FUN = my.fun)