R 使用1年窗口计算每个月末的收益波动率
我正在处理股票收益的时间序列。这些数据包括数千只股票以及1985-2010年间每只股票的每日收益。由于交易暂停,缺少回报。对于每只股票,我试图使用前一年的收益率计算每个月底(数据集中每个月的最后一个交易日)收益率的移动波动率。我有一些数据:R 使用1年窗口计算每个月末的收益波动率,r,rstudio,xts,zoo,quantmod,R,Rstudio,Xts,Zoo,Quantmod,我正在处理股票收益的时间序列。这些数据包括数千只股票以及1985-2010年间每只股票的每日收益。由于交易暂停,缺少回报。对于每只股票,我试图使用前一年的收益率计算每个月底(数据集中每个月的最后一个交易日)收益率的移动波动率。我有一些数据: date name return 1985-01-01 A -0.044 1985-01-01 C 0.038 1985-01-02 A 0.041 1985-01-02
date name return
1985-01-01 A -0.044
1985-01-01 C 0.038
1985-01-02 A 0.041
1985-01-02 B -0.005
1985-01-02 C -0.052
1985-01-03 B 0.018
1985-01-03 C -0.034
请注意,B公司在1985-01-01没有交易,因此当天没有退货数据。我已经查找了一些有用的软件包,如TTR、zoo、xts。但是,所有功能都需要输入每年的期间数,这在每个股票中是不同的。我模糊的想法是首先在xts中使用split按公司名称分割数据,然后应用endpoints函数查找每个月的最后一天。我被困在那里了。因为我有一个大的数据集,我更喜欢一些快速的方法。谢谢大家! 假设末尾注释中重复显示的数据,并假设每个日期至少出现在一只股票中(但不需要出现在任何特定股票中)。252通常使用一年,这可能对大多数用途来说足够接近;然而,考虑到问题中数据的长度,我们在本例中使用2:
library(zoo)
z <- read.zoo(DF, split = "name")
r <- rollapplyr(z, 2, sd, na.rm = TRUE)
aggregate(r, as.yearmon, tail, 1)
## A B C
## Jan 1985 NA 0.01626346 0.01272792
图书馆(动物园)
你的问题有点不清楚。什么是“移动波动率”?根据你的描述,我猜这是一年前股票价格的百分比变化?您希望在每个月末为每只股票计算此值,但某些股票缺少此值。所以你想a)估算缺失的价值,b)计算一年前每只股票价值的变化吗?@jdobres抱歉,我没有把问题说得很清楚。我试图计算一年内回报的波动性。通常,一年内应该有252次观测。但也有一些遗漏值。我想要的是取一年内的所有值并计算波动率。谢谢你的回答。但是,我如何才能在一年的时间窗口内,在每个月底找到观测值的数量呢?如前所述,通常使用252。明白了。另一个问题是如何获得正确的返回数据。例如,我有2017年1月至2018年12月的股票回报。我想计算2018年6月的一年回报波动率。我将接受2017年7月1日至2018年6月30日期间的所有申报。然后应用sd函数。接下来,我将此过程继续到2018年7月,以此类推。这是一种更快的方法吗?已添加到答案中。使用rollapplyr是处理未命中值的智能方法。但如果我只有一只股票呢?有没有其他方法可以避免日期消失?另外,由于我有一个非常大的数据集,每天滚动,并且在每个月底只使用方差,会产生大量未使用的数据。还有别的办法克服它吗?非常感谢。
Lines <- "
date name return
1985-01-01 A -0.044
1985-01-01 C 0.038
1985-01-02 A 0.041
1985-01-02 B -0.005
1985-01-02 C -0.052
1985-01-03 B 0.018
1985-01-03 C -0.034"
library(zoo)
DF <- read.table(text = Lines, header = TRUE)