滚动相关两个数据帧

Rolling correlation two data frames

我有 2 个数据框, 单独的 个,其中我有一些股票的每日 returns 日志。例如:

Index   Date    Close    Volume  Open    High    Low    Return
1259    27/07/2015  627.26  2673801 621 634.3   620.5   NA
1258    28/07/2015  628 1713684 632.83  632.83  623.31  1.18E-03
1257    29/07/2015  631.93  1573146 628.8   633.36  622.65  6.24E-03
1256    30/07/2015  632.59  1472286 630 635.22  622.05  1.04E-03
1255    31/07/2015  625.61  1705286 631.38  632.91  625.5   -1.11E-02

假设这是df1,第二个df2类似。 returns 的变量同名 (df1$Return, df2$Return)

我正在尝试创建滚动相关性,例如 5 天 window。我有一些问题,因为我对此很陌生:

  1. 使用单独的数据帧最简单的方法是什么?我搜索了一下并尝试了解如何应用 rollapply 但没有成功。有人可以解释一下我如何创建函数然后应用它吗?

类似于:

corx <- function(x) cor(df1$return, df2$return)
mycors <- rollapply(c(df1$return, df2$return),5, corx)
  1. 我还有一个一般性问题,对时间序列日期进行升序或降序排序的最佳做法是什么?我想这可能会对应用 rollapply 产生影响,所以我很想了解。

提前致谢

像这样对索引调用rollapplyr

library(zoo)

set.seed(123)

ret1 <- rnorm(10)
ret2 <- rnorm(10)

rollapplyr(seq_along(ret1), 5, function(ix) cor(ret1[ix], ret2[ix]), fill = NA)
##  [1]         NA         NA         NA         NA -0.2440453  0.6974227
##  [7]  0.7729576  0.9777006  0.8008661  0.8428961

或将 return 向量绑定在一起并使用 by.column = FALSE :

ret <- cbind(ret1, ret2)
rollapplyr(ret, 5, function(x) cor(x[, 1], x[, 2]), by.column = FALSE, fill = NA)
##  [1]         NA         NA         NA         NA -0.2440453  0.6974227
##  [7]  0.7729576  0.9777006  0.8008661  0.8428961

通常时间是递增的。如果您创建一个 ts、zoo 或 xts 时间序列对象,这是使用的约定。