问题描述
我有一个相对较大的 xts 对象。它包含欧洲 STOXX 600 指数中每家公司 2012 年至 2021 年的每日调整后收盘价。我想计算每家公司每年股票的年度波动率。例如,我想计算从 01.01.2012 - 31.12.2012 到 2021 年的每一年“Covestro AG”公司股票的波动率,因此“Covestro AG”公司从 2012 年到 2021 年的年度股票波动率以及这是在欧洲斯托克 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 个元素的样本。
这是我的数据集外观的链接:
有没有办法考虑每年有不同的交易日?
一个大问题是我的数据集中有一些“NA”,这是由于雅虎财经中的数据缺失,或者仅仅是因为该公司目前不存在。我该如何处理?
解决方法
您可以使用 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