最近x个月的累计回报

时间:2020-02-13 00:42:14

标签: r rolling-computation

我有以下类型的数据集:

      ID     date       RET
1  10026 20171227 -0.003768
2  10026 20171228  0.008958
3  10027 20171227 -0.001447
4  10027 20171228 -0.017454
5  10028 20171227 -0.009988
6  10028 20171228  0.013813

我的目的是创建一个新的绩效列,其中包含从每个日期t之前的252天开始到t天(包括在内)的21天之前为止的累积回报。此类累积回报需要按天数来缩放,以得出平均值,即总公式为

$(\sum_{tau=t-252}^{t-21} (1+r_{tau}^{i}) )^{1/(252-21)}$

这需要分别对每个ID进行。 我现在最好的解决方案是使用zoo软件包:

df$performance<-0
df$performance<-rollapply(df$RET,252:21,function(x) (prod(x+1)-1))^(252-21)

但是我收到一条消息

Error in `$<-.data.frame`(`*tmp*`, performance, value = c(0.092128914384922,  : 
  replacement has 25281 rows, data has 25300

此外,我不确定指示252:21是否是继续获得我想要的东西的正确方法。我知道这可能很乏味,但是我对R很陌生,希望有人可以找到解决方案并解释使用的正确逻辑

作为替代解决方案,我将使用:

df<-df %>% 
  group_by(ID) %>%
  mutate(performance = myfunc)

其中myfunc是用于计算过去(252-21)天的累积回报的函数。但是,我在编写适当的函数时遇到了麻烦

0 个答案:

没有答案
相关问题