R 使用1年窗口计算每个月末的收益波动率

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

我正在处理股票收益的时间序列。这些数据包括数千只股票以及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    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)