【发布时间】:2021-01-16 04:19:28
【问题描述】:
您好,很抱歉提出这个问题,因为我认为这个问题的变体已经回答了很多次,但我似乎无法将这些应用于我的具体问题。
我有许多不同公司的大量股票回报时间序列,看起来像这样
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, 63, function(x) cor(x[ , 1],x[ , j]), by.column=FALSE, fill = NA)
}
但这不会像我希望的那样用包含相关性的新列替换每一列。
我还希望像现在一样保持输出垂直方向,以提高可读性。我的完美结果将是一个数据帧/时间序列列表,每个都包含一列与所有其他列的相关性,然后我可以进一步操作(每日中位数等)。
【问题讨论】: