我喜欢找到可以计算面板数据集中返回列的不同保持期返回的代码(其中最后两列是所需的输出)
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 = ))
但是找不到我如何构建与保持期间返回功能相关的代码。在这方面你能帮我吗?
使用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
#....
保留原始列,以便比较结果。