J'ai un problème pour me demander de calculer le produit de laminage d'une série de retours de 1 période. La longueur de la fenêtre mobile est variable. Le but est d'obtenir le produit roulant des déclarations de 1 période qui couvre le plus possible une fenêtre de 12 mois.Calculer le produit cumulatif sur des fenêtres de temps de 1 an dans R
J'ai été en mesure de produire une solution de travail en utilisant la force brute à travers for
boucles et if
déclarations, mais je me demande s'il existe une solution élégante. J'ai passé beaucoup de temps à essayer avec rollapply
et d'autres fonctions similaires, mais je n'ai pas été en mesure d'obtenir une solution.
Les données ci-dessous illustrent le problème.
date rt_1_period rt_12_mth_window
1 04-04-13 NA NA
2 10-04-13 0.729096362 NA
3 24-05-13 1.002535647 NA
4 30-05-13 0.993675716 NA
5 21-07-13 1.002662843 NA
6 03-08-13 1.009516582 NA
7 01-09-13 0.963099395 NA
8 20-10-13 1.012470278 NA
9 25-10-13 1.01308502 NA
10 03-11-13 1.005440704 NA
11 01-01-14 1.024208021 NA
12 11-01-14 0.996613924 NA
13 17-02-14 1.009811368 NA
14 24-02-14 1.008139557 NA
15 30-03-14 1.002794709 NA
16 30-04-14 0.998745849 1.042345473
17 02-05-14 1.002324076 1.044767963
18 27-06-14 0.997741026 1.046389027
19 24-08-14 1.015767546 1.050072129
20 05-09-14 1.014405005 1.106010894
21 02-11-14 1.013830296 1.09319212
22 09-11-14 1.013127219 1.101549487
23 16-11-14 1.012614177 1.115444628
24 18-01-15 0.986893629 1.078458006
25 24-01-15 1.028120919 1.108785236
26 10-04-15 0.912452762 0.991025615
27 09-08-15 1.004676152 0.981376513
28 07-01-16 1.004236123 0.934086003
29 01-04-16 1.02341302 0.94215696
Dans l'exemple des 12 mois de retour pour la ligne 29 est calculé comme le produit d'une période de retour de ligne 26 à 29 parce 04/02/15 (365 jours à partir de 04/01/16) est compris entre De l'autre côté, la déclaration de 12 mois pour la ligne 15 est NA parce que 30-03-13 (365 jours du 30-03-14) est en dehors de la fenêtre temporelle pour laquelle j'ai des retours de période observables.
Je serais heureux si quelqu'un pourrait suggérer une façon d'aborder ce problème. Pour plus de clarté, si les données fournies n'ont pas beaucoup de sens, c'est parce qu'il s'agit d'une version réduite d'une base de données plus grande que j'ai créée à des fins d'illustration.
Merci beaucoup pour la réponse! Très appréciée! Vous avez raison le 2015-08-09. Les données que j'ai utilisées étaient un copier coller à partir d'une feuille de calcul Excel maquette et votre version est correcte. J'ai commencé à utiliser votre code et semble bien fonctionner. Merci! – Abdd
Juste essayé d'exécuter le code sur le jeu de données réel qui est une version expnded de ce que j'ai posté et a obtenu l'erreur suivante 'Erreur dans appliquer (coredata (x), 2, fonction (y) cumprod (y)): dim (X) doit avoir une longueur positive. Savez-vous quelle pourrait être l'origine?Merci d'avance – Abdd
pourriez-vous mettre à jour votre question et inclure l'appel de fonction que vous faites avec 'dput (head (data))' wherre 'data' est vos données d'entrée. Seulement alors nous pouvons répliquer l'erreur – OdeToMyFiddle