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 :

Fenêtre glissante : Besoin d'aide


Sujet :

MATLAB

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 12
    Points
    12
    Par défaut Fenêtre glissante : Besoin d'aide
    Bonjour à tous, j'ai un petit soucis, j'ai une série de 2500 observation que j'appel r, je veux la tronquer en 252 observation et donc je souhaite faire une fenêtre glissante de 252 observation, calculer divers statistiques sur ces 252 observations, puis prendre les 252 suivante et calculer les stats et ainsi de suite:


    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
    T=length(r); %compte le nombre d'obversation de la série 
    Stats=zeros(10,10);  %matrice pour les 10 années et les 10 stats descriptives 
    ww= 252; %fênetre de 252 jours qui décale de 252 jours jusqu'a T 
    ws= 252;
     
           for i=ww:ws:T
           subr= r(i-ww+1:i);
           Obs = length(subr);
           mean= mean(subr); 
           max = max(subr);
           min = min(subr);
           Median = median(subr);
           EcartType = std(subr);
           Skweness = skewness(subr);
           Kurtosis = kurtosis(subr);
           Jarque_Berra = jbtest(subr);
     
           Stats = [Obs(end),mean(end),max(end),min(end),Median(end),Ecartype(end),Skewness(end),Kurtosis(end),Jarque_Berra(end)]; %Matrice avec pour chaque année (252 jours) les stats descriptives. 
           end
    Le problème c'est que ça tourne que pour les 252 premiers jours merci d'avance pour votre aide

    En fait il n'y a que OBS qui tourne le reste j'ai ce message d'erreur,:
    "Subscript indices must either be real positive integers or
    logicals."
    Pourtant, j'ai bien 252 valeurs dans Subr et une valeur négative ne dois pas empêcher de calculer la moyenne ?!

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mean= mean(subr); 
    max = max(subr);
    min = min(subr);
    Il ne faut pas nommer tes variables avec le même nom que les noms des fonctions!! sinon comment matlab va savoir si tu parles de la fonction ou de la variable lorsque tu l'utiliseras à nouveau?

    A l'avenir pense à nous donner le message d'erreur complet.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    Merci pour ta réponse, effectivement c'est stupide, j'ai corrigé mais j'ai toujours ce message :

    >> Stats_Descriptives
    Subscript indices must either be real positive integers or
    logicals.

    Error in Stats_Descriptives (line 11)
    maximum = max(subr);
    Pourtant subr ressemble à ça avec 252 valeurs :

    -0,112434851070976
    -0,375678041830824
    -0,425788329329444
    0,195620162815595
    -0,514928478562041
    -0,287898046307217
    0,152287827899480
    -1,08506720228664
    -0,375959339551127
    0,480596363537250
    .
    .
    .

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Points : 7 614
    Points
    7 614
    Par défaut
    Essaie un clear avant de relancer ton programme. Si ça ne marche pas, cela veut dire que tu as toujours une variable nommée max quelque part.
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    C 'était aussi simple que ça !

    Merci beaucoup

    reste plus que le second problème c'est que ma fenêtre glissante, ne glisse pas vraiment et là j'ai eu les valeurs pour les 252 premieres observations

    Je crois en fait que la fenêtre fonctionne mais elle écrase les données à chaque recalcul....

    Pour forcer j'ai fais ça (que avec maximum et ça fonctionne)

    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
    T=length(r);
    Stats=zeros(T,10); 
    maximum=zeros(1,1);
    ww= 252;
    ws= 252;
    
           for i=ww:ws:T
           subr= r(i-ww+1:i);
           Obs = length(subr);
          
           maximum(i,:) = max(subr);
           minimum = min(subr);
           Median = median(subr);
           EcartType = std(subr);
           Skweness = skewness(subr);
           Kurtosis = kurtosis(subr);
           Jarque_Berra = jbtest(subr);
    
           end
    Le problème c'est qu'entre les 252 valeurs j'ai que des 0 et c'est pas très pratique ...

    Savez vous comment compter le nombre de fois que ma boucle est calculée en dehors de la boucle ? car dans la boucle je fais variable = 0; variable = variable + 1 et j'ai le nombre.

    mais je pense qu'en mettant une boucle style k=1:nombredeboucle, et qu'ensuite je mets maximum(k, j'aurais une valeur pour chaque boucle

    Après il y'a la technique de faire MAx=maximum(252:252:2500) je récupère tout dans un vecteur, mais c'est pas très sexy

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2014
    Messages : 30
    Points : 12
    Points
    12
    Par défaut
    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
    T=length(r);
    Stats=zeros(T,10); 
    ww= 252;
    ws= 252;
    LoopCounter = 0;
     
           for i=ww:ws:T
           subr= r(i-ww+1:i);
           Obs(i,:) = length(subr);
     
           maximum(i,:) = max(subr);
           minimum(i,:) = min(subr);
           Median(i,:) = median(subr);
           EcartType(i,:) = std(subr);
           Skweness(i,:) = skewness(subr);
           Kurtosis(i,:) = kurtosis(subr);
           Jarque_Berra(i,:) = jbtest(subr);
           Observation=Obs(ww:ww:T);
           MAX=maximum(ww:ww:T);
           MIN=minimum(ww:ww:T);
           MED=Median(ww:ww:T);
           STD=EcartType(ww:ww:T);
           SKEW=Skweness(ww:ww:T);
           KURT=Kurtosis(ww:ww:T);
           JB=Jarque_Berra(ww:ww:T);
     
           end
           Stats = [Observation, MAX, MIN, MED, STD, SKEW, KURT, JB];
    C'est pas très beau mais ça fonctionne ! Merci pour l'aide !

Discussions similaires

  1. Aide fenêtre glissante
    Par diego45 dans le forum MATLAB
    Réponses: 2
    Dernier message: 14/11/2014, 11h01
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [CR] besoin d'aide sur les formules
    Par GuillaumeDSA dans le forum Formules
    Réponses: 4
    Dernier message: 10/07/2003, 12h19
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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