滚动相关两个数据帧
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。我有一些问题,因为我对此很陌生:
- 使用单独的数据帧最简单的方法是什么?我搜索了一下并尝试了解如何应用 rollapply 但没有成功。有人可以解释一下我如何创建函数然后应用它吗?
类似于:
corx <- function(x) cor(df1$return, df2$return)
mycors <- rollapply(c(df1$return, df2$return),5, corx)
- 我还有一个一般性问题,对时间序列日期进行升序或降序排序的最佳做法是什么?我想这可能会对应用 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 时间序列对象,这是使用的约定。
我有 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。我有一些问题,因为我对此很陌生:
- 使用单独的数据帧最简单的方法是什么?我搜索了一下并尝试了解如何应用 rollapply 但没有成功。有人可以解释一下我如何创建函数然后应用它吗?
类似于:
corx <- function(x) cor(df1$return, df2$return)
mycors <- rollapply(c(df1$return, df2$return),5, corx)
- 我还有一个一般性问题,对时间序列日期进行升序或降序排序的最佳做法是什么?我想这可能会对应用 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 时间序列对象,这是使用的约定。