Bonjour à tous,
Aors voilà, je suis un novice concernant le programme R mais j'ai déjà acquis quelques notions.
Je suis actuellement en stage dans une entreprise où l'on me demande de faire une étude sur les propriétés de MEAN REVERSION des cds spread (c'est une sorte de contrat d'assurance sur les crédits mais pas besoin de savoir c'est quoi pour pouvoir m'aider).
Pour ce faire je dois donc réaliser des test de stationnarité et dans mon cas j'ai choisi le test KPSS que j'applique grâce à la fonction urkpssTest du package urca qui lui même est chargé automatiquement quand je charge le package fUnitRoots.
J'ai tout d'abord extrait mes données d'un fichier csv qui contient 119 variables (les colonnes) dont je n'exploite que 116 et pour chaque variables 506 observations temporelles.
Etant donné que j'éprouve des difficultés avec les fonctions qui permettent de faire des loops (dans les manuels je les comprends mais quand je dois les appliquer à mon cas, il y a toujours quelque chose qui cloche) j'ai transformé une par une les variables dont j'ai besoin en série temporelles de la façon qui suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 #On utilise le bureau setwd("C:/Users/Jimmy/Desktop") getwd() #On charge le tableau csv data<-read.csv("spreadr1.csv", header=TRUE, sep=";", dec=",", na.strings=" ")
Puis j'ai construit une matrice comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 #On transofrme le type de données en séries temporelles ACELtd<-ts(data[4], start = 2003, frequency = 52) AetnaInc<-ts(data[5], start = 2003, frequency = 52) AlbertsonsLLC<-ts(data[6], start = 2003, frequency = 52) RioTintoAlcanInc<-ts(data[7], start = 2003, frequency = 52) AlcoaInc<-ts(data[8], start = 2003, frequency = 52) AlltelCorp<-ts(data[9], start = 2003, frequency = 52) AltriaGroupInc<-ts(data[10], start = 2003, frequency = 52) AmericanElectricPowerCoInc<-ts(data[11], start = 2003, frequency = 52) AmericanExpressCo<-ts(data[12], start = 2003, frequency = 52) AmericanInternationalGroupI<-ts(data[13], start = 2003, frequency = 52) AmgenInc<-ts(data[14], start = 2003, frequency = 52) AnadarkoPetroleumCorp<-ts(data[15], start = 2003, frequency = 52) ArrowElectronicsInc<-ts(data[16], start = 2003, frequency = 52) AutoZoneInc<-ts(data[17], start = 2003, frequency = 52) BaxterInternationalInc<-ts(data[18], start = 2003, frequency = 52) BellSouthCorp<-ts(data[19], start = 2003, frequency = 52) BoeingCapitalCorp<-ts(data[20], start = 2003, frequency = 52) BombardierInc<-ts(data[21], start = 2003, frequency = 52) BristolMyersSquibbCo<-ts(data[22], start = 2003, frequency = 52) BurlingtonNorthernSantaFeL<-ts(data[23], start = 2003, frequency = 52) CampbellSoupCo<-ts(data[24], start = 2003, frequency = 52) CapitalOneBankUSANA<-ts(data[25], start = 2003, frequency = 52) CardinalHealthInc<-ts(data[26], start = 2003, frequency = 52) CarnivalCorp<-ts(data[27], start = 2003, frequency = 52) #ETC
#On construit une matrice avec l'ensemble des variables dans le but d'automatiser les tests par la suite avec une fonction apply
J'imagine qu'il y a plus simple mais enfin.. C'est fait c'est fait.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 mequity<- matrix(c(ACELtd, AetnaInc, AlbertsonsLLC, RioTintoAlcanInc, AlcoaInc, AlltelCorp, AltriaGroupInc, AmericanElectricPowerCoInc, AmericanExpressCo, AmericanInternationalGroupI, AmgenInc, AnadarkoPetroleumCorp, ArrowElectronicsInc, AutoZoneInc, BaxterInternationalInc, BellSouthCorp, BoeingCapitalCorp, BombardierInc, BristolMyersSquibbCo, BurlingtonNorthernSantaFeL, CampbellSoupCo, CapitalOneBankUSANA, CardinalHealthInc, CarnivalCorp, ETC.), nrow = 1, ncol = 119)
Après cela j'ai testé la stationnarité des variables individuellement et j'ai obtenu les tableaux de résultats tels que celui-ci:
J'imagine que vous vous doutez que cette méthode est assez fastidieuse, d'autant plus que je dois réaliser le test avec plusieurs lags différents et aussi avec et sans tendance. J'aimerais donc automatiser la procédure, au moins pour chaque test différent.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #Stationnarité à 3 mois #avec constante urkpssTest(ACELtd, use.lag = 13, type = "mu", doplot = TRUE) Title: KPSS Unit Root Test Test Results: Test is of type: mu with 13 lags. Value of test-statistic is: 0.4643 Critical value for a significance level of: 10pct 5pct 2.5pct 1pct critical values 0.347 0.463 0.574 0.739 Description: Mon Mar 04 18:08:46 2013 by user: Jimmy
J'ai pourtant essayé de le faire avec les fonctions apply, sapply, lapply, mapply, etc. Mais à chaque fois j'ai des messages d'erreur.
Par exemple celui-ci :
J'ai essayé avec plein d'autres syntaxes mais j'ai toujours des problèmes liés sans doute à cette syntaxe (urkpssTest n'est pas une fonction quand je fais comme dans les exemples de manuels et que je ne note pas le nom de la variable au sein de la fonction urkpssTest, etc).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 apply(mequity, 2, urkpssTest(mequity [ACELtd:XLGroupPLC], use.lag = 13, type = "mu", doplot = TRUE)) Erreur dans res[-c((n - x + 1) :n) ] : les indices négatifs ne peuvent être mélangés qu'à des 0 De plus : Message d'avis : 1 : In ACELtd:XLGroupPLC : l'expression numérique a 506 éléments : seul le premier est utilisé 2 : In ACELtd:XLGroupPLC : l'expression numérique a 506 éléments : seul le premier est utilisé
Enfin à la fin de ces tests j'aimerais pouvoir extraire les résultats sur un fichier excel (par exemple un tableau de résultats par worksheet) mais j'ai du mal a conceptualiser comment je devrai m'y prendre étant donné que si je ne me trompe pas les tableau de résultat des tests ne sont pas considérés comme des objets dans R (enfin pas sûr de ça..mais si c'est le cas pourriez vous me dire quel est cet objet ou comment le nommer).
J'espère que j'ai été assez clair car malheureusement je ne maîtrise pas parfaitement le langage des informaticiens. Dans le cas contraire, n'hésitez pas à me le signaler.
Je remercie d'avance toute personne susceptible de m'aider car en effet, elle soulagera grandement mes neurones soumis à rude épreuve ces derniers temps.
J'espère ne pas avoir raté de posts qui pourraient m'aider sur le sujet mais j'ai déjà parcouru pas mal le site et n'ai rien trouvé. De plus à chaque fois que je pense trouver une solution grâce à la résolution du problème de quelqu'un d'autre et que j'essaye de l'appliquer de nouveaux problèmes apparaissent ^^.
Cordialement,
Jimmy
Partager