我有一个包含29个时间序列的列表-列表称为“ lRet”
我需要将所有序列滞后一个时间段并计算第一个自动相关性。然后,我需要将这29个数字存储在矩阵的第6列中。
> head(lRet$TRV)
TRV.Adjusted
2018-01-03 0.3177055
2018-01-04 0.0000000
2018-01-05 -0.1814193
2018-01-08 -0.5386908
2018-01-09 0.7729854
2018-01-10 -0.2721412
> head(lag(lRet$TRV))
TRV.Adjusted
2018-01-03 NA
2018-01-04 0.3177055
2018-01-05 0.0000000
2018-01-08 -0.1814193
2018-01-09 -0.5386908
2018-01-10 0.7729854
自相关只是上面两个序列之间的相关。我需要对所有29个系列都执行此操作(上面只是1个)。
DescStat[,6] <- diag(cor(lRet[-1], lag(lRet, 1)[-1]))
我删除了第一个观察值,因为滞后运算符生成“ NA”作为第一个条目。这不起作用,因为"x has to be numeric"
(R中的错误)。我使用diag
是因为cor
产生一个矩阵,我只想要与股票本身的相关性,而不是与股票之间的相关性。
然后我尝试使用“ as.numeric”将列表中的所有值更改为数值:
DescStat[,6] <- diag(cor(sapply(lRet, as.numeric)[-1], sapply(lag(as.numeric(lRet),1))[-1]))
但是我收到错误消息“(list)不能强制键入'double'”,我将其解释为列表仍然是列表.....
我感觉我是如此接近..我在做什么错?有没有一种非常简单的方法可以做到这一点?
答案 0 :(得分:1)
你很近。答案要简单得多。只需使用sapply()
即可将函数应用于列表中的每个元素。由于列表中有股票收益作为单独的元素,因此您无需使用diag()
。只需使用sapply()
在列表中的每个元素上应用相关代码即可。 sapply()
返回一个数据框,因此它将用值填充六列中的行。
DescStat[,6] <- sapply(lRet, function(x) x <- cor(x[-1], lag(x, 1)[-1]))