r - 如何滞后列表系列并将函数应用于每个系列
问题描述
我有一个包含 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
becausecor
生成一个矩阵,我只想要与股票本身的相关性 - 而不是股票之间的相关性。
然后我尝试使用“as.numeric”将列表中的所有值更改为数值:
DescStat[,6] <- diag(cor(sapply(lRet, as.numeric)[-1], sapply(lag(as.numeric(lRet),1))[-1]))
但我收到错误“(列表)不能被强制输入'double'”,我将其解释为我的列表仍然是一个列表.....
我觉得我很接近..我做错了什么?有没有一种非常简单的方法可以做到这一点?
解决方案
你很亲密。答案要简单得多。只需sapply()
将函数应用于列表中的每个元素。由于您的列表将股票收益作为单个元素,因此您无需使用diag()
. 只需使用 将sapply()
您拥有的相关代码应用于列表中的每个元素。sapply()
返回一个数据框,因此它将用值填充六列中的行。
DescStat[,6] <- sapply(lRet, function(x) x <- cor(x[-1], lag(x, 1)[-1]))
推荐阅读
- reactjs - 为什么 componentDidUpdate 参数 preState 或 prevProps 不给出引用错误?
- java - 有没有办法专门为 Windows 路径检查 Java 中的文件路径?
- sql - 无法弄清楚我的 SQL 代码有什么问题
- javascript - 沿半圆形形状的星级
- python - 从循环条件(while、list id、counter、timestamp...)创建一个新列
- r - 是否可以要求 R 从一组二元变量中随机选择两个变量来计算比例?
- css - CSS:移除焦点后如何保持样式
- elasticsearch - Elastic Search:通过标签相似度获取相关内容
- asp.net - ASP.NET MVC - 从第 3 方重定向后丢失会话(Moneris 托管支付页面)
- git - 在 Git 中暂时返回一个提交以创建一个分支,然后将提交重新应用到主分支