63 votes

Quel est l'axe des y dans le distplot de la mer ?

J'ai des données distribuées géométriquement. Quand je veux y jeter un coup d'oeil, j'utilise

sns.distplot(data, kde=False, norm_hist=True, bins=100)

qui résulte est une image :

Plot 1a

Cependant, la hauteur des bacs n'est pas égale à 1, ce qui signifie que l'axe des ordonnées ne montre pas la probabilité, mais quelque chose de différent. Si à la place nous utilisons

weights = np.ones_like(np.array(data))/float(len(np.array(data)))
plt.hist(data, weights=weights, bins = 100)

l'axe des y indique la probabilité, la somme des hauteurs des bacs étant égale à 1 :

Plot 1b

On peut le voir plus clairement ici : supposons que nous ayons une liste

l = [1, 3, 2, 1, 3]

Nous avons deux 1, deux 3 et un 2, donc leurs probabilités respectives sont 2/5, 2/5 et 1/5. Lorsque nous utilisons le histplot de Seaborn avec 3 bins :

sns.distplot(l, kde=False, norm_hist=True, bins=3)

on obtient :

Plot 2a

Comme vous pouvez le voir, la somme de la première et de la troisième case est de 0,6+0,6=1,2, ce qui est déjà supérieur à 1. L'axe des y n'est donc pas une probabilité. Lorsque nous utilisons

weights = np.ones_like(np.array(l))/float(len(np.array(l)))
plt.hist(l, weights=weights, bins = 3)

on obtient :

enter image description here

et l'axe des y est la probabilité, puisque 0,4+0,4+0,2=1 comme prévu.

Le nombre de bacs dans ces deux cas est le même pour les deux méthodes utilisées dans chaque cas : 100 bins pour des données géométriquement distribuées, 3 bins pour un petit tableau l avec 3 valeurs possibles. La quantité de bins n'est donc pas le problème.

Ma question est la suivante : Dans le distplot de Seaborn appelé avec norm_hist=True, quelle est la signification de l'axe y ?

30voto

IonicSolutions Points 1603

De la documentation :

norm_hist : bool, facultatif

Si Vrai, la hauteur de l'histogramme montre une densité plutôt qu'un nombre. Ceci est implicite si une densité KDE ou ajustée est tracée.

Vous devez donc également tenir compte de la largeur de vos cases, c'est-à-dire calculer l'aire sous la courbe et pas seulement la somme des hauteurs des cases.

5 votes

Comme je m'apprêtais à écrire la même chose, voici les chiffres du deuxième exemple : La largeur du bac est de l=(3-1)/3=0.6666... et la somme sur les zones des bins de l'histogramme est de s=(0.6+0.3+0.6)*l=1 Donc, dans ce sens, la normalisation est correcte.

9 votes

@IonicSolutions merci, j'ai lu la documentation avant mais je n'ai jamais compris ce que cela signifie. Il est étrange cependant que seaborn ou matplotlib ne fournissent pas un tracé prêt à l'emploi "valeur x vs probabilité" où chaque case est une valeur distincte et l'axe y mesure la probabilité de cette valeur, toutes les probabilités étant additionnées à 1. Ce serait un tracé très utile, devons-nous vraiment le faire manuellement comme je l'ai fait ici ?

0 votes

@MisterTwister ouvrir une nouvelle question

21voto

Prasann Barot Points 301

L'axe des x représente la valeur de la variable, comme dans un histogramme, mais que représente exactement l'axe des y ?

ANS-> L'axe des y dans un graphique de densité est la fonction de densité de probabilité pour l'estimation de la densité par noyau. Cependant, nous devons prendre soin de préciser qu'il s'agit d'une densité de probabilité et non d'une probabilité. La différence est que la densité de probabilité représente la probabilité par unité sur l'axe des x. Pour convertir en une probabilité réelle, nous devons trouver l'aire sous la courbe pour un intervalle spécifique sur l'axe des x. De manière quelque peu déroutante, étant donné qu'il s'agit d'une densité de probabilité et non d'une probabilité, l'axe des y peut prendre des valeurs supérieures à un. La seule exigence du graphique de densité est que l'aire totale sous la courbe soit égale à un. J'ai généralement tendance à considérer l'axe des y d'un diagramme de densité comme une valeur uniquement pour les comparaisons relatives entre différentes catégories.

de la référence de https://towardsdatascience.com/histograms-and-density-plots-in-python-f6bda88f5ac0

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X