我正在处理股票回报的时间序列。这些数据包括数千只股票以及每只股票从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来按公司名称拆分数据,然后应用端点函数来查找每个月的最后一天。我被困在那里了。由于我有一个很大的数据集,我更喜欢一些快速的方法。谢谢!
发布于 2019-01-16 07:25:15
假设在结尾处的Note中重复显示的数据,还假设每个日期至少出现在一种股票中(但不需要出现在任何特定的股票中)。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
备注
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)
https://stackoverflow.com/questions/54208178
复制相似问题