我想用滚动窗口生成协方差矩阵(和平均向量)。但是,在我所有的尝试rollapply
中,从cov
中叠加了协方差矩阵,并且耗尽了预先分配的空间(例如,如果我的原始数据有40个观察值,那么rollapply
不能返回超过40行)。Rollapply可以返回矩阵列表吗?
有没有办法让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)
你能试着让你的目标更清楚吗?协调什么到底是什么?它没有出现在代码中您认为data.list有多少组?这会产生一个动物园系列:'my.fun(data.list [[1]])'。这就是你期望从sic == 1组得到的结果吗? – 2012-03-30 17:59:17
@DWin我想每个基于10年移动窗口的每个sic的协方差矩阵。在这里没有什么神圣的关于有'动物园'对象,我只是已经熟悉如何使用'rollapply'来产生标量。 – 2012-03-30 18:43:51