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 :

Coefficient de corrélation [Débutant]


Sujet :

MATLAB

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut Coefficient de corrélation
    Bonjour à tous,
    Dans un projet, afin d'exploiter des données, je dois tracer des courbes. Pour améliorer certaines courbes on m'a demandé de tracer en fonction du coefficient de corrélation, je m'explique : je souhaite construire un programme qui permettrait de comparer la valeur de ce coefficient, au fur et à mesure que la courbe se trace, dès que la valeur du coefficient de corrélation passe en dessous de 0.9 on passe à la valeur suivante.

    Je vous remercie par avance pour votre aide,

    respectueusement

    Vincent

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut coefficient de corrélation
    Bonjour à tous,
    Je pense avoir avancé.
    Voici le programme que j'ai tapé pour le moment:

    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
    36
    37
    %% Récupération des valeurs du tableau
     
    val=xlsread('test.xls');
    x=val(:,1);
    y=val(:,2);
     
    %% Initialisation des variables
     
    j=3;
    A=0;
    B=0;
    C=0;
    R=0;
     
    %% Calcul de R 
     
    while R<0.9
        sommex=0;
        sommey=0;
        for i=1:j
            sommex=sommex+x(i);
            sommey=sommey+y(i);
        end
        moyx=sommex/j;
        moyy=sommey/j;
        for i=1:j
            A=A+(x(i)-moyx)+(y(i)-moyy);
            B=B+(x(i)-moyx)^2;
            C=C+(y(i)-moyy)^2;
        end
        R=A^(2)/(B*C);
        j=j+1;
     
        %% Placer le point
     
        plot(x(j),y(j))
    end
    Le problème que je rencontre est que ça ne me trace qu'un seul point.

    Est-ce que quelqu'un voit ce que je pourrai changer ou améliorer ?

    Je vous remercie par avance pour votre aide

    respectueusement

    Vincent

  3. #3
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 880
    Points : 3 426
    Points
    3 426
    Par défaut
    salut

    je te conseilles tout d'abord de définir explicitement la création de ta figure via la fonction figure
    ensuite d'utiliser hold on pour préciser que tous tes plot doivent se superposer et non s'annuler et remplacer

    mais le mieux est surement de construire les vecteurs xr, yr à tracer dans ta boucle puis de les tracer hors de la boucle

    Fabien

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Bonjour la fab,
    tout d'abord un grand merci pour votre aide, ce que vous m'avez conseillé semble bien fonctionner,
    lorsque vous parlez de vecteur, vous pensez à, par exemple xr=(4:3:61) ?
    Parce qu'en faite je dois traiter un tableau de plus 5 millions de données,
    est-ce que les vecteurs sont bien approprié pour cette situation (excuse moi je débute en matlab) ?

    Je vous remercie par avance pour votre aide

    Vincent

  5. #5
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 880
    Points : 3 426
    Points
    3 426
    Par défaut
    lorsque l'on écrit plot(x,y) , x et y sont des vecteurs
    on peut donc faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for i = 1:n
    ...
      plot(x(i),y(i))
    end
    (ce que tu as fait)

    ou alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    xres = [];yres = [];j=0;
    for i = 1:n
    ...
      j = j + 1;
      xres(j) = x(i);
      yres(j) = y(i);
    end
    plot(xres,yres,'b.')
    ca revient au même, c'est juste plus propre
    et ca permet de garder une trace (les vecteurs xres, yres) de ce que l'on a tracer pour d'autres éventuels traitements

  6. #6
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Salut,

    Ce que te conseilles le fab est le meilleur à faire.

    Cependant, tu peux toujours relancer ton application en rajoutant la commande "hold on" entre ton "plot" et ton "end" si tu veux un résultat immédiat.

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Salut,
    Merci pour vos suggestions, je vais travaillé la dessus et je vous dit ce qu'il en est.
    Par curiosité que signifie le " 'b.' " dans le plot(xres,yres,'b.') ?

    Je vous remercie par avance pour votre aide

    Vincent

  8. #8
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Bonjour,

    Ce sont des options que tu peux indiquer à plot : le "b" permet de colorer tes points en "bleu" tandis que le "." permet de ne pas relier tes points entre eux, et de n'afficher que des "points".

    Cordialement,
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Bonjour à tous,
    J'ai suivit vos conseille et effectivement c'est bien mieux,
    Cependant, le programme fonctionne bien, mais il m'affiche cette erreur :

    ??? Attempted to access x(17); index out of bounds because numel(x)=16.
    
    Error in ==> Untitled at 19
    sommex=sommex+x(i);
    D'un coté c'est plutôt logique, vu que mon fichier 'test' ne comporte que 16 valeurs, il ne peut donc pas accéder à la 17ème, mais
    il devrait juste s’arrêter non ?
    Comment remédier à cette erreur ? Faire s'arrêter ma variable à ma valeur limite, c'est à dire 16 ici ?

    Je vous remercie d'avance pour votre aide

    Respectueusement

    Vincent

  10. #10
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 880
    Points : 3 426
    Points
    3 426
    Par défaut
    il doit manquer un numel(mavariable) ou un size(mavariable,1) ou un size(mavariable,2) quelque part dans ta gestion de tes boucles
    peut tu mettre ton code ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Bien sûr, voici :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    %% Récupération des valeurs du tableau
     
    val=xlsread('test.xls');
    x=val(:,1);
    y=val(:,2);
     
    %% Initialisation des variables
     
    A=0;
    B=0;
    C=0;
    R=0;
    j=3;
     
    %% Calcul de R
     
    hold on;
    while R<0.9
    sommex=0;
    sommey=0;
    xres=[];
    yres=[];
    for i=1:j
    sommex=sommex+x(i);
    sommey=sommey+y(i);
    end
    moyx=sommex/j;
    moyy=sommey/j;
    for i=1:j
    A=A+(x(i)-moyx)+(y(i)-moyy);
    B=B+(x(i)-moyx)^2;
    C=C+(y(i)-moyy)^2;
    end
    R=A^(2)/(B*C);
    j=j+1;
    xres(j)=x(i);
    yres(j)=y(i);
     
    %% Placer le point
     
    figure(1)
    plot(xres,yres,'b.')
    end

  12. #12
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Oulalah, sacré bordel ton code...

    1) Utilises la balise [ C O D E ] ..... [ / C O D E ] pour nous montrer tes codes.
    2) Indentes ton code.
    3) Sépares tes calculs, de tes analyses, et de tes affichages : une partie pour les calculs, puis, une fois que tous tes calculs sont terminés, alors ensuite tu analyses ces calculs, puis, une fois l'analyse totalement effectuée, alors là tu as le droit de faire les affichages que tu souhaites.
    4) Vérifies systématiquement que les variables que tu utilises existent (en plus de vérifier que tu ne divises jamais par zéro) : à faire dans calcul, analyse, affichage
    5) L'utilisation des "while" est dangereux, justement parce qu'on ne pense pas à faire la vérification que toutes les variables qu'on utilise existent... Là, à chaque fois que tu fais un passage dans le while, tu incrémentes ton j, or la taille de ton vecteur, comme l'a implicitement dit le fab, est plus petite que la taille que ton programme pense pouvoir utiliser...

    Bref, fais déjà tout ça, tu y verras plus clair.

    ps: malgré tout, c'est du beau boulot pour un débutant
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    D'accord excusez-moi pour ce "bordel", c'est mes premiers jours en matlab.

    Je vais essayer de faire tout ça,

    Merci pour votre aide

    Vincent

  14. #14
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Pour éviter ce problème de taille entre le vecteur et celle que mon programme pense pouvoir utiliser,

    que faudrait -il changer ?
    la façon de récupéré mes valeurs dans mon tableau d'origine ?
    Utiliser un autre système de boucle ?

    Merci d'avance pour votre aide

    Vincent

  15. #15
    Modérateur
    Avatar de le fab
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    1 880
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 880
    Points : 3 426
    Points
    3 426
    Par défaut
    tu peux rajouter une condition de sortie à ton while
    par exemple while R<0.9 || j>numel(x)

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    En mettant j>numel(x) comme vous me le proposez, cela ne fonctionnais plus
    cependant en faisant j<numel(x), tout marche bien et je n'ai plus le message d'erreur

    est-ce normal ?

    Merci pour votre aide

    Vincent

  17. #17
    Membre éclairé
    Homme Profil pro
    Doctorant automatique
    Inscrit en
    Janvier 2012
    Messages
    446
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Doctorant automatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 446
    Points : 719
    Points
    719
    Par défaut
    Désolé si j'ai été un peu abrupt mais lis bien le message en entier : à la fin, j'ai dit que c'était du beau boulot malgré tout !

    Oui, c'est "normal".

    Maintenant, il serait intéressant que tu comprennes pourquoi c'est normal. C'est difficile à expliquer. Le mieux et de l'apprendre par soi-même : c'est plus efficace et tu te l'approprieras bien mieux.

    que faudrait -il changer ?
    la façon de récupéré mes valeurs dans mon tableau d'origine ?
    Utiliser un autre système de boucle ? ==> exactement : utilises 1) une boucle pour tes calculs 2) une boucle pour tes analyses 3) une boucle pour tes affichages ==> de cette manière, tu sépares chacune des étapes, et tu ne fais pas tout en même temps.

    Tu verras d'ailleurs que tu n'auras plus besoin de boucle pour l'affichage quand tu auras fait 1 et/ou 2, et que le premier post de le fab suffisait ... d'ailleurs, si tu te débrouilles bien, tu n'as besoin d'aucune boucle... mais ça, c'est l'étape suivante
    Je ne réponds pas aux MP techniques. Le forum est là pour ça.
    La raison est simple : il est ennuyeux de répondre à une seule personne, alors que la réponse peut servir à tout le monde.
    Conclusion : n'hésitez pas à utiliser le forum pour poser vos questions.
    Matlab 2005 - ver.7.1.0.183 (R14) Service Pack 3

  18. #18
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Aucune boucle?? alors là tu m'intrigues

    construire point par point un graphique, sans faire de boucle pour le moment je ne vois pas trop ^^

    peut-être grâce à des fonctions prédéfinies de matlab ?

  19. #19
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Aucune boucle?? alors là tu m'intrigues
    La force de Matlab est d'avoir la majorité de ses fonctions vectorisée, c'est à dire capable de traiter un vecteur ou une matrice d'un seul coup. Bien sur, il y a une boucle cachée la dessous, mais elle se fait sur les couches basse en C/C++ et donc très vite. De plus, c'est souvent plus lisible pour nous de ne pas avoir à écrire la boucle explicitement.

    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    diffX= diff(rand(1000,5));
    plot(cumsum(0.01*randn(100,1)))
    1er exemple: diff calcule toutes (1ere boucle) les différence entre éléments consécutifs. De plus, elle traite toutes les colonnes d'une coup (2eme boucle cachée imbriquée)
    2eme exemple: cumsum opère comme diff, et plot est capable de dessiner la série d'un coup. (deux boucles successives)

    Bien sur, rien ne t’empêche d'écrire un code non vectorisé plus proche du C, pour le 1er exemple, ca donnerait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    X= rand(1000,5);
    [P,Q]= size(X);
    diffX=nan(P-1,Q); % preallocation
    for q=1:Q
    for p=1:P-1
       diffX(p,q)= X(p+1,q)- X(p,q);
    end
    end
    Mais quelle plaie ! Je dois préallouer, demander les dimensions dans des variables temporaires, écrire les boucles, m’embêter avec les indices... 8 lignes de code alors que la 1ere solution était tellement plus lisible !

  20. #20
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2014
    Messages
    80
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2014
    Messages : 80
    Points : 31
    Points
    31
    Par défaut
    Merci beaucoup VV33D,
    décidément moi qui était content que mon programme fonctionne
    j'ai l'impression que je dois tout changer ^^

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 4 1234 DernièreDernière

Discussions similaires

  1. Coefficient de corrélation intra classe
    Par elvolcano dans le forum SAS STAT
    Réponses: 7
    Dernier message: 25/04/2019, 18h35
  2. Interprétation coefficient de corrélation
    Par Liun971 dans le forum Signal
    Réponses: 2
    Dernier message: 01/07/2008, 09h20
  3. Réponses: 2
    Dernier message: 13/07/2007, 15h59
  4. Coefficient de corrélation exponentielle
    Par Giansolo dans le forum Statistiques, Data Mining et Data Science
    Réponses: 6
    Dernier message: 23/03/2007, 11h58
  5. Coefficient de corrélation
    Par oceanediana dans le forum Access
    Réponses: 7
    Dernier message: 26/07/2006, 08h03

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