r - 如何更有效地计算滚动协方差

标签 r covariance rollapply

我正在尝试计算 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 中是否可以比以下内容更高效:

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

最佳答案

set.seed(1)
x<-as.data.frame(matrix(rnorm(500),nrow=100,ncol=5))
y<-rnorm(100)

library(zoo)

covResult = sapply(x,function(alpha) {

cov_value = rollapply(cbind(alpha,y),width=5,FUN = function(beta) cov(beta[,1],beta[,2]),by.column=FALSE,align="right") 

return(cov_value)

})

head(covResult)
#              V1         V2          V3          V4          V5
#[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

另请查看:

library(PerformanceAnalytics)
?chart.rollingCorrelation

关于r - 如何更有效地计算滚动协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38645044/

相关文章:

r - 调整 R 中的图形图例

C# - 类型约束和限制,是否有任何解决方法来保持类型安全?

OOP:实现具有更广泛签名的接口(interface)方法

ios - Swift 泛型类、继承和协方差

r - 在 R 中分配数字并汇总滑动窗口中的计数

r - 使用 dplyr 计算时间戳上的累积和

regex - R grep匹配点

R:prop.test 根据传递给它的是矩阵还是向量返回不同的值

rollapply 与一个函数采用矩阵返回 "incorrect number of dimensions"

r - 有效地执行行式分布测试