R-每一列彼此之间的滚动相关性

问题描述

您好,为此道歉,因为我认为这个问题的变体已经回答了很多次,但是我似乎无法将其应用于我的特定问题。

我有很多类似这样的公司的大量股票回报时间序列

library(tidyquant)
library(PerformanceAnalytics)

df = data.frame(tq_get("AAPL"))

ts = df[,3:8] %>%
     xts(order.by = as.Date(df[,2],"%Y-%m-%d")) %>%
     Return.calculate()

现在,我需要在时间序列中将每一列与其他每一列进行滚动关联。 对于仅两列,以下内容完美运行

rollcor = rollapply(ts,63,function(x) cor(x[,1],x[,2]),by.column=FALSE)

但是我无法让它与列上的apply()一起使用,因此我尝试了for循环以使至少第一列与所有其他列相关联

rollcors = data.frame(ts)
for(j in ncol(rollcors)) {
  rollcors[,j] = rollapply(rollcors,j]),by.column=FALSE,fill = NA)
}

但这不会像我希望的那样用包含相关性的新列替换每一列。

我也希望保持输出像现在这样垂直放置,以提高可读性。我的理想结果是创建一个数据帧/时间序列列表,每个数据帧包含一列与所有其他列的相关性,然后我可以进一步进行操纵(每日中位数等)。

解决方法

这将为每个日期提供展开成行的相关性矩阵。会有n * n列,其中ts有n列:

rollapplyr(ts,63,cor,fill = NA,by.column = FALSE)

否则将仅显示下部三角形,并具有choice(n,2)列:

ccor <- function(x) { cc <- cor(x); cc[lower.tri(cc)] }
rollapplyr(X,ccor,by.column = FALSE)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...