首页 > 解决方案 > 如何滞后列表系列并将函数应用于每个系列

问题描述

我有一个包含 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 中的错​​误)。我使用diagbecausecor生成一个矩阵,我只想要与股票本身的相关性 - 而不是股票之间的相关性。

然后我尝试使用“as.numeric”将列表中的所有值更改为数值:

DescStat[,6] <- diag(cor(sapply(lRet, as.numeric)[-1], sapply(lag(as.numeric(lRet),1))[-1]))

但我收到错误“(列表)不能被强制输入'double'”,我将其解释为我的列表仍然是一个列表.....

我觉得我很接近..我做错了什么?有没有一种非常简单的方法可以做到这一点?

标签: rstatistics

解决方案


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

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

推荐阅读