J'ai des données sur les rendements boursiers trimestriels et j'aimerais calculer les rendements annuels glissants. Par exemple:

Le Rolling_Annual Return pour q4_2000 est = (1+0,042) * (1-0,1814) * (1+0,0353) * (1-0,0143)-1 = -12,95 %

Date_2   Stock     Rolling_Annual Returns
Q1_2000     4.20%
Q2_2000   -18.14%
Q3_2000     3.53%
Q4_2000    -1.43%        -12.95%
Q1_2001    -0.65%        -17.00% 
Q2_2001     1.90%          3.31%
Q3_2001     3.68%          3.46%
Q3_2001    -0.49%          4.44%
Q4_2001    11.37%         17.08%

Je ne suis pas sûr de la meilleure façon d'aborder cela dans R? Toute aide est grandement appréciée.

r
0
CISCO 12 févr. 2020 à 07:29

1 réponse

Meilleure réponse

Vous pouvez utiliser rollapplyr de zoo pour calculer le calcul de roulement.

zoo::rollapplyr(df$Stock/100, 4, function(x) prod(1 + x) - 1, fill = NA) * 100
#[1]     NA    NA    NA -12.9537 -17.0053   3.3125   3.4622   4.4489  17.0858

données

df <- structure(list(Date_2 = structure(c(1L, 3L, 5L, 7L, 2L, 4L, 6L, 
6L, 8L), .Label = c("Q1_2000", "Q1_2001", "Q2_2000", "Q2_2001", 
"Q3_2000", "Q3_2001", "Q4_2000", "Q4_2001"), class = "factor"), 
Stock = c(4.2, -18.14, 3.53, -1.43, -0.65, 1.9, 3.68, -0.49, 
11.37)), row.names = c(NA, -9L), class = "data.frame")
3
Ronak Shah 12 févr. 2020 à 04:37