Вычисление различных периодов удержания в данных панели, заданных в r - PullRequest
0 голосов
/ 19 апреля 2019

Мне нравится находить коды, которые могут вычислять различный возврат периода удержания из столбца возврата в наборе данных панели, подобном этому (где последние два столбца являются желаемым выходом)

 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 = ))

Но не могу найти, как я строю кодсвязанные с периодом удержания функции возврата.не могли бы вы помочь мне в этом отношении.

1 Ответ

0 голосов
/ 19 апреля 2019

Используя 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
#....

Сохраняем ваши исходные столбцы такими же, как для сравнения результатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...