我正在尝试在R中计算一组数据(我的x变量的每一列)和另一个数据(y变量)之间的滚动协方差。我认为可以使用其中一个apply函数,但找不到如何同时滚动两个输入集的方法。这是我尝试过的:
set.seed(1)
x<-matrix(rnorm(500),nrow=100,ncol=5)
y<-rnorm(100)
rollapply(x,width=5,FUN= function(x) {cov(x,y)})
z<-cbind(x,y)
rollapply(z,width=5, FUN=function(x){cov(z,z[,6])})
但是没有一个达到我想要的效果。我找到的一个解决方法是使用 for 循环,但想知道在 R 中是否有更高效的方法:
但是没有一个达到我想要的效果。我发现一个解决方案是使用 for 循环,但是想知道在 R 中是否有更高效的方法:
dResult<-matrix(nrow=96,ncol=5)
for(iLine in 1:96){
for(iCol in 1:5){
dResult[iLine,iCol]=cov(x[iLine:(iLine+4),iCol],y[iLine:(iLine+4)])
}
}
这使我得到了预期的结果:
head(dResult)
[,1] [,2] [,3] [,4] [,5]
[1,] 0.32056460 0.05281386 -1.13283586 -0.01741274 -0.01464430
[2,] -0.03246014 0.78631603 -0.34309778 0.29919297 -0.22243572
[3,] -0.16239479 0.56372428 -0.27476604 0.39007645 0.05461355
[4,] -0.56764687 0.09847672 0.11204244 0.78044096 -0.01980684
[5,] -0.43081539 0.01904417 0.01282632 0.35550327 0.31062580
[6,] -0.28890607 0.03967327 0.58307743 0.15055881 0.60704533