IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

apply on urkpssTest (urca package)


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut apply on urkpssTest (urca package)
    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.

    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=" ")
    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
    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
    Puis j'ai construit une matrice comme ceci :

    #On construit une matrice avec l'ensemble des variables dans le but d'automatiser les tests par la suite avec une fonction apply

    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)
    J'imagine qu'il y a plus simple mais enfin.. C'est fait c'est fait.

    Après cela j'ai testé la stationnarité des variables individuellement et j'ai obtenu les tableaux de résultats tels que celui-ci:

    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'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.

    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 :

    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é
    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).

    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

  2. #2
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Bonjour,

    Juste une petite idée:
    si tes variables ont le même nombre de ligne, tu peux essayer d'utiliser un data.frame et voir ce que ça donne. Sinon je ne suis pas convaincu de la manière dont tu utilise la fonction apply (tu l'appliquse sur un vecteur et non sur une matrice).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mequity <- data.frame (Inc, AlbertsonsLLC, RioTintoAlcanInc, AlcoaInc, AlltelCorp,....)
    apply (mequiy,2, urkpssTest(x,e.lag = 13, type = "mu", doplot = TRUE))
    NB: Pour ton code, essaye d'utiliser les balises code.

    BC

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut
    Bonjour arm336,

    Tout d'abord je voulais te remercier pour cette réponse et l'aide que tu tentes de m'apporter.

    Le problème c'est que je n'y arrive toujours pas :s.
    En effet, j'utilise la fonction data.frame comme tu le mentionnes et ensuite quand je tente d'appliquer apply voici les réponses que j'obtiens :

    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
    apply(mequity, 2, urkpssTest(x, use.lag = 13, type = "mu"))
    Erreur dans as.vector(x) : objet 'x' introuvable
     
     apply(mequity, 2, urkpssTest(mequity, use.lag = 13, type = "mu"))
    Erreur dans t(res[-c(1:x)]) %*% res[-c((n - x + 1):n)] : 
      nécessite des arguments numériques/complexes matrice/vecteur
    De plus : Message d'avis :
    mean(<data.frame>) is deprecated.
     Use colMeans() or sapply(*, mean) instead.
     
    apply(mequity, 2, urkpssTest(ACELtd:XLGroupPLC, use.lag = 13, type = "mu"))
    Erreur dans res[-c((n - x + 1):n)] : 
      les indices négatifs ne peuvent être mélangés qu'à des 0
    De plus : Messages 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é
    Je t'avouerais que je suis un peu largué, tout ceci est nouveau pour moi et même en lisant les différents manuels que je trouve j'ai du mal à tout conceptualiser. A l'université, dans ma branche (finance), on nous apprend à faire un test pour une série de données etc sans jamais aller en profondeur, comme-ci des recherches dignes de ce nom ne nécessitaient que cela (En bref je suis un peu nul en programmation).

    Brièvement, les variables tels que ACELtd, XLGroup, etc sont des entreprises pour lesquelles j'ai 506 observations temporelles à chaque fois et je voudrais pouvoir appliquer ce test de stationnarité à l'ensemble des entreprises (une par une) de façon automatique.
    J'ai déjà essayé les choses les plus farfelues mais sans succès.

    Le fait est que j'ai fini par abandonner et que j'ai simplement fait copier-coller de la fonction en changeant le nom des variables dans la fonction à chaque fois (c'était assez répétitif je dois dire ^^). Malgré le fait que tout est en ordre j'aurais voulu savoir le faire en une commande afin de comprendre mieux le fonctionnement et pouvoir à l'avenir refaire la même chose dans d'autre études mais ce n'est pas grâve.

    Mais par contre maintenant j'essaye d'extraire les résultats des tests dans Excel (de façon automatique si possible pcq j'ai 1584 tableaux de résultats).

    donc pour illustrer ce que je veux exactement extraire je le met en couleur:

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #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.739Description:
     Mon Mar 04 18:08:46 2013 by user: Jimmy
    
    > urkpssTest(AetnaInc, 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.2682 
      
      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

    Un avis sur comment je pourrais réaliser cela ?
    En tout cas un grand merci d'avoir pris la peine d'essayer de m'aider.

    Cordialement,

    Jimmy

    Ps : que sont les balises code?

  4. #4
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Bonjour,
    Desolé, j'ai fait une erreur de syntaxe.Tu peux essayer ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    mequity <- data.frame (Inc, AlbertsonsLLC, RioTintoAlcanInc, AlcoaInc, AlltelCorp,....)
    apply (mequiy,2, urkpssTest, use.lag = 13, type = "mu", doplot = TRUE)
    Pour l'erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Erreur dans res[-c((n - x + 1):n)]
    je pense que c'est lié à l'argument use.lag=13. Dans un premier temps, essaye sans cet argument pour voir ce que ça donne.

    NB: Pour les balises code, c'est le "symbole #" au dessu sur la barre d'outil

    BC

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2013
    Messages : 3
    Par défaut


    Ca marche et sans erreurs !

    Un très très grand merci en tous cas.

    Il ne me reste plus qu'à trouver comment sortir les outputs dans excels mais je pense que je saurai me débrouiller avec les fonction adéquates, et en faisant une boucle for pour attributes() sans doute.

    Je le re-dis MERCI MERCI MERCI.

Discussions similaires

  1. Architecture appli GWT : création de packages
    Par johndoe5e13 dans le forum GWT et Vaadin
    Réponses: 2
    Dernier message: 05/10/2012, 14h49
  2. Créer un package .deb d'une appli Web-based
    Par goldkey dans le forum Debian
    Réponses: 0
    Dernier message: 10/01/2008, 13h57
  3. Package MSI avec ancienne appli VB6 ayant déjà une install Wise
    Par EMC51 dans le forum Installation, Déploiement et Sécurité
    Réponses: 0
    Dernier message: 23/08/2007, 11h07
  4. Tester l'existence d'un package depuis une appli.net
    Par meuledor dans le forum Oracle
    Réponses: 3
    Dernier message: 27/09/2005, 16h18
  5. [Classpath][packages] problème de lancement de l'appli
    Par gogozep001 dans le forum Général Java
    Réponses: 11
    Dernier message: 19/05/2005, 23h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo