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 :

Distance entre deux distributions


Sujet :

MATLAB

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut Distance entre deux distributions
    Bonjour tout le monde,

    J'ai trois tableaux de valeurs, j'ai construit une courbe (sous forme d'histogramme battons) pour chacun. en abscisse de 1 à 10 et en ordonnées les valeurs des tableaux.

    ci joint une tableau et la courbe associée

    3
    4
    11
    30
    76
    99
    134
    175
    149
    44
    Nom : courbe.JPG
Affichages : 1062
Taille : 13,2 Ko

    Je voudrais calculer la distance entre ces courbes avec matlab. y a t il une fonction qui fait ça.

    Merci d'avance

  2. #2
    Modérateur

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Août 2014
    Messages
    1 295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2014
    Messages : 1 295
    Points : 2 385
    Points
    2 385
    Par défaut
    Bonjour,

    Peux tu préciser ce que tu entends par "distance entre ces courbes" ?
    Si vous cherchez des réponses sur ce forum il faudra avant tout expliquer clairement votre problème et exposer la démarche que vous avez entreprise pour le résoudre. Fournissez une base de travail et de réflexion à vos interlocuteurs!

  3. #3
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Si j'ai bien compris tu cherches comparer ta distribution "expérimentale" avec une distribution théorique.

    Vu la forme de ton histogramme, tu devrais pouvoir décrire tes données avec une distribution de Poisson

    Ensuite pour déterminer l'écart entre ta distribution théorique et ta distribution expérimental, je conseille de faire un test du chi2.

    Avec ces deux liens tu devrais pouvoir écrire un programme sans trop de difficulté.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Oui Beltharion, c'est exactement ce que je voudrais faire, tu as bien compris mon problème.

    Bonne idée pour le test chi2, mais par contre j'ai deux question à propos de ça

    1) Dans le cas ou mes valeurs contiennent des zéros, la division devient impossible (zeros dans les deux courbes à comparer)

    2) Est ce qu'il y a une fonction Excel ou Matlab qui calcule directement ça?

    Est ce que c'est bien chi2gof? si c'est le cas, comment la distance peut etre calculée, alors que la fonction prend en parametre une seule distribution?

    Merci

  5. #5
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    1) En effet, le test du chi2 ne fonctionne que si ta distribution théorique ne contient pas de 0. Si tu regardes la définition théorique de la plupart des distributions, elles sont conçues de façon à ce que la distribution converge vers 0 sans toute fois l'attendre strictement. Cela suppose que l’occurrence d'un événement est toujours strictement supérieur à 0. Vu la définition du chi2, si dans ta distribution expérimentale tu as une occurrence strictement égale à 0 alors chi2=1. Donc tout va bien de ce côté là.

    2) Je pense qu'avec la fonction chi2gof tu dois pouvoir t'en sortir. Cependant, il faut que tritures les arguments de la fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    expectedCounts=ta distribution théorique
    [h,p,st] = chi2gof(x,'expected',expectedCounts)
    Sinon, rien ne t'empêche de faire le calcul toi même avec une boucle.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Merci Beltharion pour tes explications

    Je ne comprend pas comment cette fonction pourrait calculer la distance et c'est quoi le x dans ce cas?

    Pour etre plus claire, je met deux tableaux pour les quelles je voulais calculer la distances entre eux:

    3
    4
    11
    30
    76
    99
    134
    175
    149
    44


    0
    0
    2
    0
    5
    5
    16
    22
    31
    20
    L'abscisse est de 1 à 10 bien sur (comme présenté dans la figure de mon premier message.

    Expected et expectedCounts qu'est ce qu'ils représentent?

    Merci pour votre aide

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    J'ai testé cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [h,p,st] = chi2gof(t1,'expected',t2)
    et j'ai eu ce résultat

    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
    h =
     
         1
     
     
    p =
     
      3.7004e-017
     
     
    st = 
     
        chi2stat: 86.4706
              df: 5
           edges: [3.0000 89.0000 106.2000 123.4000 140.6000 157.8000 175.0000]
               O: [6 1 0 1 1 1]
               E: [7 5 16 22 31 20]
    Une explication?

  8. #8
    Membre habitué
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2014
    Messages
    109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 109
    Points : 151
    Points
    151
    Par défaut
    Au vu de ton résultat, le test a fonctionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [h,p,st] = chi2gof(x,'expected',expectedCounts)
    1) Expected : argument permettant de préciser que tu connais le vecteur contenant les valeurs attendues
    expectedCounts : c'est un vecteur. Il contient les valeurs attendues

    2) h=1 ou 0 : Je n'ai pas tout à fait compris la signification de cette variable. Elle a un rapport avec l'hypothèse nulle.

    3) p : probalilité d'occurence.

    4) st : test statistique contenant le test du chi2.

    Quand tu écris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [h,p,st] = chi2gof(t1,'expected',t2)
    Tu compares t1 à la valeur attendue t2

    Le fait que p soit si basse et que le chi2 soit élevé impliquent que la comparaison n'est pas bonne.

    Si tu souhaites utiliser une distribution théorique tu peux utiliser la fonction fitdist. Je te renvoie vers l'aide de matlab concernant la fonction chi2gof.


    Pour finir je ne suis pas sûr que nous mettons la même définition derrière l'expression "distance entre deux distribution". Je t'ai renvoyé vers le test du chi2 parce que j'avais l'impression que tu voulais comparer ta distribution à une distribution théorique type poisson, gauss...
    Mais en voyant tes vecteurs t1 et t2, qui sont très différent, je me dis que tu souhaites simplement comparer les occurrences entre deux situations. Dans ce cas le test du chi2 n'est pas la bonne solution.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 87
    Points : 59
    Points
    59
    Par défaut
    Merci Beltharion pour toutes ces explications

  10. #10
    Membre habitué
    Profil pro
    Doctorante
    Inscrit en
    Mai 2012
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Doctorante

    Informations forums :
    Inscription : Mai 2012
    Messages : 130
    Points : 197
    Points
    197
    Par défaut
    Le test du chi2 est une bonne idée en effet.
    Selon ce que représentent tes données, et en particulier dans le cas où on a affaire à des histogrammes, on peut également utiliser la distance de Bhattacharyya qui mesure la distance entre 2 distributions de probabilité discrètes (ce qui peut être assimilable à des histogrammes normalisés). Juste pour te donner une possibilité supplémentaire de comparaison

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. distance entre deux ville à partir de longitude/latitude
    Par sami_c dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 09/02/2007, 20h57
  2. Distance entre deux pixels
    Par bahiatoon dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/01/2007, 10h47
  3. calcul distance entre deux villes
    Par alexfrei04 dans le forum Access
    Réponses: 2
    Dernier message: 08/01/2007, 21h49
  4. [Base de données Spatial] Distance entre deux points
    Par Pumpkins dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/11/2006, 12h18
  5. Calcul de distance entre deux points en WGS84
    Par marieR dans le forum Langage
    Réponses: 5
    Dernier message: 03/08/2006, 17h07

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