Évaluation de la distribution approximative des données basée sur un histogramme


111

Supposons que je veuille voir si mes données sont exponentielles en fonction d'un histogramme (c'est-à-dire asymétriques à droite).

Selon la façon dont je regroupe ou classe les données, je peux obtenir des histogrammes très différents.

Un ensemble d'histogrammes semblera indiquer que les données sont exponentielles. Un autre ensemble fera croire que les données ne sont pas exponentielles. Comment faire pour déterminer les distributions à partir d'histogrammes bien définis?


20
Pourquoi ne pas oublier les histogrammes, car les problèmes que vous décrivez sont bien établis, et envisager des outils alternatifs tels que les tracés qq et les tests de qualité de l'ajustement?
whuber

Réponses:


163

La difficulté d'utiliser des histogrammes pour déduire une forme

Bien que les histogrammes soient souvent pratiques et parfois utiles, ils peuvent être trompeurs. Leur apparence peut beaucoup changer avec les changements d’emplacement des limites des casiers.

Ce problème est connu depuis longtemps *, mais peut-être pas aussi largement qu'il devrait l'être - on le voit rarement mentionné dans les discussions au niveau élémentaire (bien qu'il y ait des exceptions).

* Paul Rubin [1], par exemple, l’exprime ainsi: " Il est bien connu que changer les points de terminaison dans un histogramme peut modifier considérablement son apparence ". .

Je pense que c'est une question qui devrait être plus largement discutée lors de l'introduction d'histogrammes. Je vais donner quelques exemples et discussion.

Pourquoi vous devriez vous garder de vous fier à un seul histogramme d'un ensemble de données

Jetez un coup d'œil à ces quatre histogrammes:

Quatre histogrammes

C'est quatre histogrammes très différents.

Si vous collez les données suivantes dans (j'utilise R ici):

Annie <- c(3.15,5.46,3.28,4.2,1.98,2.28,3.12,4.1,3.42,3.91,2.06,5.53,
5.19,2.39,1.88,3.43,5.51,2.54,3.64,4.33,4.85,5.56,1.89,4.84,5.74,3.22,
5.52,1.84,4.31,2.01,4.01,5.31,2.56,5.11,2.58,4.43,4.96,1.9,5.6,1.92)
Brian <- c(2.9, 5.21, 3.03, 3.95, 1.73, 2.03, 2.87, 3.85, 3.17, 3.66, 
1.81, 5.28, 4.94, 2.14, 1.63, 3.18, 5.26, 2.29, 3.39, 4.08, 4.6, 
5.31, 1.64, 4.59, 5.49, 2.97, 5.27, 1.59, 4.06, 1.76, 3.76, 5.06, 
2.31, 4.86, 2.33, 4.18, 4.71, 1.65, 5.35, 1.67)
Chris <- c(2.65, 4.96, 2.78, 3.7, 1.48, 1.78, 2.62, 3.6, 2.92, 3.41, 1.56, 
5.03, 4.69, 1.89, 1.38, 2.93, 5.01, 2.04, 3.14, 3.83, 4.35, 5.06, 
1.39, 4.34, 5.24, 2.72, 5.02, 1.34, 3.81, 1.51, 3.51, 4.81, 2.06, 
4.61, 2.08, 3.93, 4.46, 1.4, 5.1, 1.42)
Zoe <- c(2.4, 4.71, 2.53, 3.45, 1.23, 1.53, 2.37, 3.35, 2.67, 3.16, 
1.31, 4.78, 4.44, 1.64, 1.13, 2.68, 4.76, 1.79, 2.89, 3.58, 4.1, 
4.81, 1.14, 4.09, 4.99, 2.47, 4.77, 1.09, 3.56, 1.26, 3.26, 4.56, 
1.81, 4.36, 1.83, 3.68, 4.21, 1.15, 4.85, 1.17)

Ensuite, vous pouvez les générer vous-même:

opar<-par()
par(mfrow=c(2,2))
hist(Annie,breaks=1:6,main="Annie",xlab="V1",col="lightblue")
hist(Brian,breaks=1:6,main="Brian",xlab="V2",col="lightblue")
hist(Chris,breaks=1:6,main="Chris",xlab="V3",col="lightblue")
hist(Zoe,breaks=1:6,main="Zoe",xlab="V4",col="lightblue")
par(opar)

Maintenant, regardez ce graphique à bandes:

x<-c(Annie,Brian,Chris,Zoe)
g<-rep(c('A','B','C','Z'),each=40)
stripchart(x~g,pch='|')
abline(v=(5:23)/4,col=8,lty=3)
abline(v=(2:5),col=6,lty=3)

4 cartes de bande

(S'il est toujours pas évident, voir ce qui se passe lorsque vous soustrayez les données d'Annie de chaque série: head(matrix(x-Annie,nrow=40)))

Les données ont simplement été décalées de 0,25 à chaque fois.

Pourtant, les impressions tirées des histogrammes - asymétrie droite, uniforme, asymétrie gauche et bimodal - étaient tout à fait différentes. Notre impression a été entièrement régie par l'emplacement de la première origine de la corbeille par rapport au minimum.

Donc, pas seulement «exponentielle» contre «pas vraiment exponentielle», mais «droite asymétrique» contre «gauche asymétrique» ou «bimodal» vs «uniforme» simplement en se déplaçant où vos bacs commencent.


Edit: Si vous modifiez la largeur de bin, vous pouvez obtenir des choses comme celles-ci:

Skew vs Bell

Il s'agit des mêmes 34 observations dans les deux cas, juste différents points d'arrêt, l'un avec binwidth et l'autre avec binwidth .0.810.8

x <- c(1.03, 1.24, 1.47, 1.52, 1.92, 1.93, 1.94, 1.95, 1.96, 1.97, 1.98, 
  1.99, 2.72, 2.75, 2.78, 2.81, 2.84, 2.87, 2.9, 2.93, 2.96, 2.99, 3.6, 
  3.64, 3.66, 3.72, 3.77, 3.88, 3.91, 4.14, 4.54, 4.77, 4.81, 5.62)
hist(x,breaks=seq(0.3,6.7,by=0.8),xlim=c(0,6.7),col="green3",freq=FALSE)
hist(x,breaks=0:8,col="aquamarine",freq=FALSE)

Nifty, hein?

Oui, ces données ont été générées délibérément pour le faire ... mais la leçon est claire: ce que vous pensez voir dans un histogramme peut ne pas donner une impression particulièrement précise des données.

Que pouvons-nous faire?

Les histogrammes sont largement utilisés, souvent faciles à obtenir et parfois attendus. Que pouvons-nous faire pour éviter ou atténuer de tels problèmes?

Comme Nick Cox l'a souligné dans un commentaire à une question connexe : La règle de base devrait toujours être que les détails qui résistent aux variations de la largeur et de l'origine de la corbeille sont vraisemblables; les détails fragiles sont susceptibles d'être fallacieux ou triviaux .

Au minimum, vous devez toujours créer des histogrammes avec plusieurs largeurs de bin ou origines de bin différentes, ou de préférence les deux.

Vous pouvez également vérifier une estimation de la densité du noyau avec une largeur de bande pas trop large.

Une autre approche permettant de réduire le caractère arbitraire des histogrammes est celle des histogrammes décalés ,

Histogramme décalé moyen

(c’est l’une des données les plus récentes), mais si vous voulez y arriver, je pense que vous pourriez aussi bien utiliser une estimation de la densité du noyau.

Si je fais un histogramme (je les utilise malgré le fait que je suis très conscient du problème), je préfère presque toujours utiliser beaucoup plus de bacs que les programmes par défaut ont tendance à donner et très souvent j'aime faire plusieurs histogrammes avec des largeurs de bacs variables (et, parfois, origine). Si leur impression est raisonnablement cohérente, vous ne rencontrerez probablement pas ce problème. Sinon, essayez de regarder de plus près, essayez peut-être une estimation de la densité du noyau, un CDF empirique, un graphique QQ ou quelque chose de ce genre. similaire.

Bien que les histogrammes puissent parfois être trompeurs, les boîtes à moustaches sont encore plus sujettes à de tels problèmes; avec une boîte à moustaches, vous n'avez même pas la possibilité de dire "utilisez plus de bacs". Voir les quatre ensembles de données très différents de cet article , tous dotés de boîtes à moustaches identiques et symétriques, même si l’un des ensembles de données est plutôt asymétrique.

[1]: Rubin, Paul (2014) "Abus d'histogramme!",
Article de blog, OU dans un monde OB , 23 janvier 2014
lien ... (lien alternatif)


1
Pratiquement tous les graphes de données de bacs de nécessité comme celui-ci. Les bacs sont juste assez petits (la largeur d'un pixel le long de l'axe) pour que ça n'ait pas d'importance?
AJMansfield

1
@AJMansfield C'est un peu comme si on disait "chaque distribution est discrète" - bien que cela soit littéralement vrai, cela masque le problème en question. Un nombre typique de segments dans un estimateur groupé est beaucoup plus petit qu'un nombre typique de pixels ... et avec tous les graphiques utilisant l'anti-aliasing, le nombre de pixels "effectifs" est plus grand (en ce sens qu'il est potentiellement possible de distinguer différences de positions entre pixels)
Glen_b le

2
Le problème fondamental est que les histogrammes dépendent fortement de la taille de la corbeille. Il est difficile de déterminer ceci a priori.

29

Un tracé de densité de noyau ou de journal de connexion peut être une meilleure option par rapport à un histogramme. Certaines méthodes peuvent encore être définies avec ces méthodes, mais elles sont moins instables que les histogrammes. Il y a aussi des qqplots. Un bon outil pour voir si les données sont assez proches d'une distribution théorique est détaillé dans:

 Buja, A., Cook, D. Hofmann, H., Lawrence, M. Lee, E.-K., Swayne,
 D.F and Wickham, H. (2009) Statistical Inference for exploratory
 data analysis and model diagnostics Phil. Trans. R. Soc. A 2009
 367, 4361-4383 doi: 10.1098/rsta.2009.0120

La version abrégée de l'idée (lisez toujours l'article pour plus de détails) est que vous générez des données à partir de la distribution nulle et créez plusieurs tracés dont l'un est constitué des données d'origine / réelles et le reste est simulé à partir de la distribution théorique. Vous présentez ensuite les parcelles à quelqu'un (éventuellement vous-même) qui n'a pas vu les données d'origine et vous voyez s'il peut sélectionner les données réelles. S'ils ne peuvent pas identifier les données réelles, vous n'avez aucune preuve contre le null.

La vis.testfonction du package TeachingDemos pour R aide à implémenter une forme de ce test.

Voici un exemple rapide. L'un des graphiques ci-dessous représente 25 points générés à partir d'une distribution à 10 degrés de liberté, les 8 autres sont générés à partir d'une distribution normale avec la même moyenne et la même variance.

entrez la description de l'image ici

La vis.testfonction a créé ce graphe, puis invite l'utilisateur à choisir celui qui, selon lui, est différent, puis répète le processus 2 fois de plus (3 au total).


@ ScottStafford, j'ai ajouté une copie de l'intrigue ci-dessus. Celui-ci utilise qqtrots mais la fonction générera également des histogrammes ou des tracés de densité pourraient être programmés.
Greg Snow

28

Les diagrammes de distribution cumulatifs [ MATLAB , R ] - dans lesquels vous tracez la fraction des valeurs de données inférieures ou égales à une plage de valeurs - constituent de loin le meilleur moyen d'examiner les distributions de données empiriques. Voici, par exemple, les fichiers ECDF de ces données , produits en R:

Alice, Brian, Chris et les complots ECDF de Zoe

Ceci peut être généré avec l'entrée R suivante (avec les données ci-dessus):

plot(ecdf(Annie),xlim=c(min(Zoe),max(Annie)),col="red",main="ECDFs")
lines(ecdf(Brian),col="blue")
lines(ecdf(Chris),col="green")
lines(ecdf(Zoe),col="orange")

Comme vous pouvez le constater, il est évident que ces quatre distributions sont simplement des traductions l'une de l'autre. En général, les avantages des bases de données électroniques de développement pour la visualisation des distributions empiriques des données sont les suivants:

  1. Elles présentent simplement les données telles qu'elles se produisent réellement, sans aucune transformation autre que l'accumulation. Il est donc impossible de vous tromper accidentellement, comme c'est le cas avec les histogrammes et les estimations de la densité du noyau, en raison de la manière dont vous traitez les données.
  2. Ils donnent une idée claire de la distribution des données puisque chaque point est mis en mémoire tampon par toutes les données avant et après. Comparez cela avec les visualisations de densité non cumulatives, où la précision de chaque densité est naturellement non tamponnée et doit donc être estimée soit par binning (histogrammes), soit par lissage (KDE).
  3. Ils fonctionnent aussi bien indépendamment du fait que les données suivent une distribution paramétrique intéressante, un mélange ou une distribution non paramétrique compliquée.

La seule astuce consiste à apprendre à lire correctement les FDCE: les zones à faible pente présentent une répartition clairsemée, les zones à forte pente une répartition dense. Une fois que vous avez appris à les lire, cependant, ils constituent un outil formidable pour examiner les distributions de données empiriques.


Existe-t-il une documentation disponible pour lire les CDF? Par exemple, si ma distribution cdf comme celle que vous avez montrée ci-dessus, comment pouvons-nous classer \ guesstimate dans une distribution
chisquare

2

Suggestion: En général, les histogrammes n'affichent que les données de l'axe des abscisses qui se sont produites au centre de la corbeille et omettent les mesures d'emplacement des abscisses d'une précision supérieure. L'effet sur les dérivés d'ajustement peut être assez important. Prenons un exemple trivial. Supposons que nous prenions la dérivation classique d'un delta de Dirac mais que nous la modifions de manière à commencer par une distribution de Cauchy à un emplacement médian arbitraire avec une échelle finie (demi-maximum de largeur totale). Ensuite, nous prenons la limite lorsque l’échelle va à zéro. Si nous utilisons la définition classique d'un histogramme et que nous ne modifions pas la taille des groupes, nous ne capturerons ni l'emplacement ni l'échelle. Si, toutefois, nous utilisons un emplacement médian dans des emplacements de même largeur fixe, nous capturerons toujours cet emplacement, sinon l'échelle si l'échelle est petite par rapport à la largeur de l'emplacement.

Pour ajuster les valeurs où les données sont asymétriques, l’utilisation de points médians de casiers fixes décale l’axe des abscisses de l’ensemble du segment de la courbe dans cette région, ce qui, je crois, est lié à la question ci-dessus.

ÉTAPE 1 histo drôleVoici une quasi-solution. J'ai utilisén=8dans chaque catégorie d’histogramme, et les affiche seulement comme valeur moyenne de l’axe x de chaque groupe. Étant donné que chaque groupe d’histogrammes a une valeur de 8, toutes les distributions ont l’air uniforme et il a fallu les décaler verticalement pour les afficher. L'affichage n'est pas la bonne réponse, mais ce n'est pas sans information. Cela nous indique correctement qu'il existe un décalage de l'axe des x entre les groupes. Cela nous indique également que la distribution réelle semble légèrement en forme de U. Pourquoi? Notez que la distance entre les valeurs moyennes est plus éloignée dans les centres et plus proche aux bords. Donc, pour que cela soit mieux représenté, nous devrions emprunter des échantillons entiers et des fractions de chaque échantillon de limite de case pour rendre toutes les valeurs de case moyennes sur l'axe des x équidistantes. Corriger cela et l'afficher correctement nécessiterait un peu de programmation. Mais, ce peut être simplement un moyen de créer des histogrammes pour qu'ils affichent les données sous-jacentes dans un format logique. La forme changera quand même si nous modifions le nombre total de bacs couvrant la plage de données, mais l’idée est de résoudre certains des problèmes créés par le binning de façon arbitraire.

ÉTAPE 2 Commençons donc par emprunter entre les bacs pour essayer de répartir les moyens plus équitablement.entrez la description de l'image ici

Nous pouvons maintenant voir que la forme des histogrammes commence à émerger. Mais la différence entre les moyennes n'est pas parfaite car nous n'avons qu'un nombre entier d'échantillons à permuter entre les bacs. Pour supprimer la restriction des valeurs entières sur l'axe des ordonnées et terminer le processus de création de valeurs moyennes sur l'axe des abscisses équidistantes, nous devons commencer à partager des fractions d'un échantillon entre les bacs.

Étape 3 Le partage des valeurs et des parties de valeurs. histo3

Comme on peut le constater, le partage de parties d'une valeur à une limite de corbeille peut améliorer l'uniformité de la distance entre les valeurs moyennes. J'ai réussi à faire cela à trois décimales près avec les données fournies. Cependant, je ne pense pas que l'on puisse rendre la distance entre les valeurs moyennes identique en général, car la grossièreté des données ne le permet pas.

On peut toutefois faire d'autres choses, comme utiliser l' estimation de la densité du noyau .

Nous voyons ici les données d'Annie comme une densité de noyau liée utilisant des lissages gaussiens de 0,1, 0,2 et 0,4. Les autres sujets auront déplacé des fonctions du même type, à condition que l'un d'eux fasse la même chose que moi, à savoir utiliser les limites inférieure et supérieure de chaque ensemble de données. Ainsi, il ne s'agit plus d'un histogramme, mais d'un fichier PDF, qui remplit le même rôle qu'un histogramme sans certaines des verrues.

noisette

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.