r中面板数据集中的不同保持周期返回计算

问题描述 投票:0回答:1

我喜欢找到可以计算面板数据集中返回列的不同保持期返回的代码(其中最后两列是所需的输出)

 Date        Firms    ret     ret_2    ret_3
5/1/1988        A       0.5             
6/1/1988        A       0.6     1.4     
7/1/1988        A       0.4     1.24    2.36
8/1/1988        A       0.5     1.1     2.36
9/1/1988        A       0.6     1.4     2.36
11/1/1988       A       0.6     1.56    2.84
12/1/1988       A       0.4     1.24    2.584
13/01/1988      A       0.5     1.1     2.36
14/01/1988      A       0.6     1.4     2.36
15/01/1988      A       0.5     1.4     2.6
16/01/1988      A       0.6     1.4     2.84
18/01/1988      A       0.6     1.56    2.84
19/01/1988      A       0.4     1.24    2.584
20/01/1988      A       0.5     1.1     2.36
21/01/1988      A       0.6     1.4     2.36
22/01/1988      A       0.4     1.24    2.36
23/01/1988      A       0.5     1.1     2.36
25/01/1988      A       0.6     1.4     2.36
26/01/1988      A       0.5     1.4     2.6
27/01/1988      A       0.6     1.4     2.84
28/01/1988      A       0.5     1.4     2.6
29/01/1988      A       0.6     1.4     2.84
5/1/1988        B       0.5     1.4     2.6
6/1/1988        B       0.6     1.4     2.84
7/1/1988        B       0.6     1.56    2.84
8/1/1988        B       0.4     1.24    2.584
9/1/1988        B       0.5     1.1     2.36
11/1/1988       B       0.6     1.4     2.36
12/1/1988       B       0.6     1.56    2.84
13/01/1988      B       0.4     1.24    2.584
14/01/1988      B       0.5     1.1     2.36
15/01/1988      B       0.4     1.1     1.94
16/01/1988      B       0.5     1.1     2.15
18/01/1988      B       0.6     1.4     2.36
19/01/1988      B       0.4     1.24    2.36
20/01/1988      B       0.5     1.1     2.36
21/01/1988      B       0.5     1.25    2.15
22/01/1988      B       0.6     1.4     2.6
23/01/1988      B       0.6     1.56    2.84
25/01/1988      B       0.4     1.24    2.584
26/01/1988      B       0.5     1.1     2.36
27/01/1988      B       0.6     1.4     2.36
28/01/1988      B       0.4     1.24    2.36
29/01/1988      B       0.5     1.1     2.36

这里

ret_2= [(1 + r1) x (1 + r2)]-1, ret_3= [(1 + r1) x (1 + r2) x (1 + r3)]-1

r1是第一期回报,r2是第二期回报

我试图使用这种代码

library(dplyr)
library(lubridate)
df %>%
  group_by(date = format(dmy(Date), '%b-%y'), firms) %>%
  summarise(ret2 = ))

但是找不到我如何构建与保持期间返回功能相关的代码。在这方面你能帮我吗?

r return finance
1个回答
0
投票

使用dplyr我们可以使用lag来计算结果

library(dplyr)

df %>%
 mutate(res2  = ((1 + ret) * (1 + lag(ret))) - 1, 
        res3 = ((1 + ret) * (1 + lag(ret)) * (1 + lag(ret, 2))) - 1) 


#         Date Firms ret ret_2 ret_3 res2  res3
#1    5/1/1988     A 0.5    NA    NA   NA    NA
#2    6/1/1988     A 0.6  1.40    NA 1.40    NA
#3    7/1/1988     A 0.4  1.24 2.360 1.24 2.360
#4    8/1/1988     A 0.5  1.10 2.360 1.10 2.360
#5    9/1/1988     A 0.6  1.40 2.360 1.40 2.360
#6   11/1/1988     A 0.6  1.56 2.840 1.56 2.840
#7   12/1/1988     A 0.4  1.24 2.584 1.24 2.584
#8  13/01/1988     A 0.5  1.10 2.360 1.10 2.360
#....

保留原始列,以便比较结果。

© www.soinside.com 2019 - 2024. All rights reserved.