关于如何在 xts 对象中获取特定元素的简单问题

Posted

技术标签:

【中文标题】关于如何在 xts 对象中获取特定元素的简单问题【英文标题】:Simple Questions on how to get specific elements in a xts object 【发布时间】:2021-09-15 03:18:18 【问题描述】:

我有一个相对较大的 xts 对象。它包含 2012-2021 年欧洲斯托克 600 指数中每家公司的每日调整收盘价。我想计算每家公司每年股票的年度波动率。例如,我想计算“Covestro AG”公司股票从 01.01.2012 到 31.12.2012 的波动率,这是到 2021 年的每一年,所以“Covestro AG”从 2012 年到 2021 年的年度股票波动率和这是欧洲 STOXX 600 指数中上市的 600 家公司中的每一家。

所以首先我开始计算对数差异:

XTS.LOGDIFFS <- diff(log(XTS.ADJCLOSE))

因此,下一步是计算每家公司在 1 年特定期间(例如 01.01.2012-31.12.2021)的对数差异的标准差。但我真的不知道该怎么做。

所以我的数据如下所示:我有 600 家公司,平均交易日为 252 个(并非每年都有 252 个,因为假期等),2012 年我有 8 个月,2012 年我有 5 个月而不是 12 个月. 这导致了 1.395.000 个元素的样本。

这是我的数据集外观的链接:

https://imgur.com/a/oS7ROCL

有没有办法考虑到每年有不同的交易日这一事实?

一个大问题是我的数据集中有一些“NA”,这是由于 yahoo Finance 中缺少数据,或者只是因为该公司目前不存在。我该如何处理?

【问题讨论】:

这将取决于您的 XTS 对象的时间索引。使用 dput(head(XTS)) 到 edit 您的答案正文。 (没有用于代码或数据的 cmets。) 【参考方案1】:

您可以使用apply.yearly 作为助手。由于您没有提供示例数据,我创建了一些。

library(xts)

dates <- seq.Date(as.Date("2012-01-01"),
                  as.Date("2021-07-07"),
                  "days")

sampledat <- xts(matrix(rnorm(600 * length(dates)), ncol = 600),
                 order.by = dates)

result_list <- lapply(sampledat,
              FUN = apply.yearly, sd)

result_xts <- do.call(merge, result_list)

> head(result_xts[, 1:5])
                 x.1       x.2       x.3       x.4       x.5
2012-12-31 0.9928683 0.9863453 0.9656742 0.9924881 1.0086642
2013-12-31 0.9837968 0.9378844 1.0512200 1.0327317 0.9610698
2014-12-31 0.9911269 1.0304369 1.0329215 1.0193346 0.9715923
2015-12-31 1.0323760 1.0279656 1.0091391 0.9229457 0.9800465
2016-12-31 1.0258107 0.9320686 1.0288169 0.9994578 0.9424084
2017-12-31 1.0492600 0.9816240 0.9578318 1.0166213 1.0042377

【讨论】:

所以我的数据如下所示:我有 600 家公司,平均交易日为 252 个(并非每年都有 252 个,因为假期等),2012 年我只有 8 个月,2021 年我有 5 个月而不是 12 个月。这导致了 1.395.000 个元素的样本。这是我的数据集外观的链接:imgur.com/a/oS7ROCL 一个大问题是我的数据集中有一些“NA”,这是由于 yahoo Finance 中缺少数据,或者只是该公司不存在的事实时间。我该如何处理?当我尝试你展示给我的代码时,我只得到 NA 结果。 —— 使用以下命令忽略 NA:result_list &lt;- lapply(sampledat, FUN = apply.yearly, sd, na.rm = T)

以上是关于关于如何在 xts 对象中获取特定元素的简单问题的主要内容,如果未能解决你的问题,请参考以下文章

在循环中添加 xts 对象

将 xts 对象与一些常用列合并

如何在 R 中更改时间序列(XTS 或 ZOO)?

如何将数据框转换为xts

如何通过 javascript/typescript 获取“事件”对象的特定元素

如何将 data.frame 表转换为 xts 对象