如何滞后列表的序列并将函数应用于每个序列

时间:2019-10-03 14:15:28

标签: r statistics

我有一个包含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'”,我将其解释为列表仍然是列表.....

我感觉我是如此接近..我在做什么错?有没有一种非常简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

你很近。答案要简单得多。只需使用sapply()即可将函数应用于列表中的每个元素。由于列表中有股票收益作为单独的元素,因此您无需使用diag()。只需使用sapply()在列表中的每个元素上应用相关代码即可。 sapply()返回一个数据框,因此它将用值填充六列中的行。

DescStat[,6] <- sapply(lRet, function(x) x <- cor(x[-1], lag(x, 1)[-1]))