111 votes

Tracé des quantiles à l'aide de SciPy

Comment créer un qq-plot en utilisant Python ?

Supposons que vous disposiez d'un grand ensemble de mesures et que vous utilisiez une fonction de traçage qui prend les valeurs XY en entrée. La fonction doit tracer les quantiles des mesures par rapport aux quantiles correspondants d'une certaine distribution (normale, uniforme...).

Le graphique résultant nous permet alors d'évaluer si notre mesure suit ou non la distribution supposée.

http://en.wikipedia.org/wiki/Quantile-quantile_plot

R et Matlab fournissent tous deux des fonctions prêtes à l'emploi pour cela, mais je me demande quelle serait la méthode la plus propre pour l'implémenter en Python.

129voto

Geoff Points 3621

Mise à jour : Comme les gens l'ont souligné, cette réponse est pas correct . Un probplot est différent d'un diagramme quantile-quantile. Veuillez consulter ces commentaires et les autres réponses avant de commettre une erreur d'interprétation ou de transmission de la relation entre vos distributions.

Je pense que scipy.stats.probplot fera ce que vous voulez. Voir le documentation pour plus de détails.

import numpy as np 
import pylab 
import scipy.stats as stats

measurements = np.random.normal(loc = 20, scale = 5, size=100)   
stats.probplot(measurements, dist="norm", plot=pylab)
pylab.show()

Résultat

enter image description here

70voto

Akavall Points 7357

Utilisation de qqplot de statsmodels.api est une autre option :

Exemple très simple :

import numpy as np
import statsmodels.api as sm
import pylab

test = np.random.normal(0,1, 1000)

sm.qqplot(test, line='45')
pylab.show()

Résultat :

enter image description here

De la documentation et d'autres exemples sont ici

24voto

ccap Points 331

Si vous avez besoin de faire un graphique QQ d'un échantillon par rapport à un autre, statsmodels inclut qqplot_2samples(). Comme Ricky Robinson dans un commentaire ci-dessus, c'est ce que je considère comme un graphique QQ par rapport à un graphique de probabilité qui est un échantillon par rapport à une distribution théorique.

http://statsmodels.sourceforge.net/devel/generated/statsmodels.graphics.gofplots.qqplot_2samples.html

7voto

John Points 1441

J'ai trouvé ça. M

Vous pourriez remplacer np.random.normal avec toute autre distribution de np.random pour comparer les données avec d'autres distributions.

#!/bin/python

import numpy as np

measurements = np.random.normal(loc = 20, scale = 5, size=100000)

def qq_plot(data, sample_size):
    qq = np.ones([sample_size, 2])
    np.random.shuffle(data)
    qq[:, 0] = np.sort(data[0:sample_size])
    qq[:, 1] = np.sort(np.random.normal(size = sample_size))
    return qq

print qq_plot(measurements, 1000)

4voto

user465139 Points 727

Pour ajouter à la confusion qui règne autour des diagrammes Q-Q et des diagrammes de probabilité dans les mondes Python et R, voici ce qu'il faut entendre par l'expression "diagramme Q-Q". Manuel SciPy dit :

" probplot génère un graphique de probabilité, qui ne doit pas être confondu avec avec un graphique Q-Q ou P-P. Statsmodels dispose d'une fonctionnalité plus étendue de ce type, voir statsmodels.api.ProbPlot".

Si vous essayez scipy.stats.probplot vous verrez qu'en effet, il compare un ensemble de données à une distribution théorique. Les graphiques Q-Q, en revanche, comparent deux ensembles de données (échantillons).

R a des fonctions qqnorm , qqplot y qqline . À partir de l'aide R (version 3.6.3) :

qqnorm est une fonction générique dont la méthode par défaut produit un fichier graphique QQ normal des valeurs de y. qqline ajoute une ligne à une "théorique, par défaut normal, qui passe par les quantiles de la probs, par défaut le premier et le troisième quantile. par les quantiles de la probs, par défaut le premier et le troisième quartile.

qqplot produit un graphique QQ de deux ensembles de données.

En bref, les R qqnorm offre la même fonctionnalité que scipy.stats.probplot fournit avec le paramètre par défaut dist=norm . Mais le fait qu'ils l'aient appelé qqnorm et qu'il est censé "produire un tracé QQ normal" peut facilement dérouter les utilisateurs.

Enfin, un mot d'avertissement. Ces graphiques ne remplacent pas les tests statistiques appropriés et ne doivent être utilisés qu'à des fins d'illustration.

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