关于如何在 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 <- lapply(sampledat, FUN = apply.yearly, sd, na.rm = T)
以上是关于关于如何在 xts 对象中获取特定元素的简单问题的主要内容,如果未能解决你的问题,请参考以下文章