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

MATLAB Discussion :

Index et ajustement d'une série


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut Index et ajustement d'une série
    Bonjour,

    J'ai une petite problématique d'ajustement d'une série...

    J'ai une série d'indice (une date par exemple) et une serie de prix associés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xSmallDates = [11;12;13;14;15;16;17;18;19] ;
    xSmallPrices = [140;142;144;122;123;125;105;106;107];
    et une serie de dates d'ajustement avec les facteurs associés....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xSmallDivDates = [14;17] ;
    xSmallDiv = [20;21] ;
    Je dois "dilater" les deux xSmallDiv pour obtenir xSmallDivDilated (une peu comme une interpolation, mais sans les valeurs interpolées):
    11 0
    12 0
    13 0
    14 20
    15 0
    16 0
    17 21
    18 0
    19 0

    puis (un cumsum partant du bas dans l'esprit de flipud(cumsum(flipud(-xSmallDivDilated))) ; mais avec un décalage)
    11 -41
    12 -41
    13 -41
    14 -21
    15 -21
    16 -21
    17 0
    18 0
    19 0

    à sommer avec xSmallPrices pour avoir
    99
    101
    103
    101
    102
    104
    105
    106
    107

    (le dernier prix de la série doit être le même que celui de la serie d'origine)

    ... en fait, j'ai un petit peu de mal avec les premières étapes pour les indexations et la notation vectorielle. Si quelqu'un peut m'éclairer, je le remercie par avance !

    (en fait, j'ai également le risque que l'index de xSmallDivDates sorte du range de celui de xSmallDates, par exemple
    xSmallDivDates = [8;14;17] ;
    xSmallDiv = [23;20;21] ;

    et dans ce cas là, la premère ligne de doit pas rentrer dans le calcul.)

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Pour l'instant je fais comme ça, mais je ne trouve pas ça optimal.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    xSmallDivDilated = zeros(size(xSmallPrices)) ;
     
    [xVal, idxA, idxB]=intersect(xSmallDivDates, xSmallDates) ;
    xSmallDivDilated(idxB)= xSmallDiv(idxA);
     
    xDecal = xSmallDivDilated([2:end 1]);
    xDivOffset = flipud(cumsum(flipud(-xDecal)));
    xSmallPricesAdjusted = xSmallPrices + xDivOffset ;

    Any suggestion ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Dans le cas simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    idx = ismember(xSmallDates,xSmallDivDates);
    xSmallDates(idx,2) = xSmallDiv;
    xSmallDates(end-1:-1:1,2)=cumsum(-xSmallDates(end:-1:2,2));
    xSmallPrices=xSmallPrices+xSmallDates(:,2)
    Mais cette solution ne marche pas dans le second cas plus complexe

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Bonjour et merci.
    En fait ma méthode fonctionne pour le cas où l'indice xSmallDates sort de l'autre range, mais il est vrai que le double flipud risque de ralentir pas mal si l'on a de grandes matrices.

    Après les tests, je me suis rendu compte que les données à la base ne sont pas propres : j'ai différents ensembles de dates (avec des décalages d'un jour), et quelque soit le choix il y a toujours une ou deux dates qui posent un problème avec un décalage qui se fait un jour trop tôt ou un jour trop tard...

    Par exemple, la série d'origine est la suivante :



    Le graphe bleu est la série non ajustée (il y a un décrochement à peu près en décembre de chaque année) et le rouge la version ajustée... il reste des pics (qui sont des aller retour) quel que soit la méthode.





    Est-ce qu'il y aurait une astuce simple (et vectorielle) pour virer ces points extrèmes (quitte à les remplacer par un interpolation entre les deux points qui encadrent les points retirés) ?
    Images attachées Images attachées    

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    N'est-il pas possible d'utiliser DIFF sur la série de données et de vérifier que les différences obtenues entre deux points, ne dépassent pas un certain seuil ?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 37
    Par défaut
    Si si, mais j'essaie de toujours chercher des solutions vetorisées

Discussions similaires

  1. Désigner un identifiant/index pour des éléments d'une série
    Par OSryx dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 28/09/2010, 13h47
  2. Réponses: 7
    Dernier message: 03/12/2004, 10h15
  3. Réponses: 4
    Dernier message: 16/03/2004, 14h16
  4. Compression d'une série d'images jpeg
    Par Tchello dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2003, 19h59
  5. Créer une série dans un chart
    Par cyrose dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/11/2002, 11h37

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