Équivalent boxplot pour les distributions à queue lourde?


13

Pour les données distribuées approximativement normalement, les boîtes à moustaches sont un excellent moyen de visualiser rapidement la médiane et la répartition des données, ainsi que la présence de valeurs aberrantes.

Cependant, pour les distributions plus lourdes, de nombreux points sont indiqués comme des valeurs aberrantes, car les valeurs aberrantes sont définies comme étant en dehors du facteur fixe de l'IQR, et cela se produit bien sûr beaucoup plus fréquemment avec les distributions à queue lourde.

Alors, qu'est-ce que les gens utilisent pour visualiser ce type de données? Y a-t-il quelque chose de plus adapté? J'utilise ggplot sur R, si cela importe.


1
Les échantillons provenant de distributions à queue lourde ont tendance à avoir une gamme énorme par rapport aux 50% moyens. Que voulez-vous faire à ce sujet?
Glen_b -Reinstate Monica

7
Plusieurs threads pertinents déjà, par exemple, stats.stackexchange.com/questions/13086/… La réponse courte comprend d'abord la transformation! histogrammes; tracés quantiles de divers types; parcelles de bande de différents types.
Nick Cox

@Glen_b: c'est précisément mon problème, cela rend les boxplots illisibles.
static_rtti

2
Le truc, c'est qu'il y a plus d'une chose qui pourrait être faite ... alors que voulez- vous qu'il fasse?
Glen_b -Reinstate Monica

2
Il convient peut-être de noter que la plupart du monde statistique connaît les boîtes à moustaches de leur dénomination et de leur (ré) introduction par John Tukey dans les années 1970. (Ils ont été utilisés pendant plusieurs décennies plus tôt en climatologie et en géographie.) Mais dans les chapitres ultérieurs de son livre de 1977 sur l'analyse des données exploratoires (Reading, MA: Addison-Wesley), il a des idées très différentes sur la gestion des distributions à queue lourde. Il semble que personne ne s'en soit emparé. Mais les graphiques quantiles sont dans un esprit similaire.
Nick Cox

Réponses:


8

Le problème central de l'OP semble avoir est qu'ils ont très lourds données tailed - et je ne pense pas que la plupart des réponses actuelles portent réellement sur cette question du tout , donc je fais la promotion de mon commentaire précédent à une réponse.

Si vous souhaitez rester avec des boîtes à moustaches, certaines options sont répertoriées ci-dessous. J'ai créé quelques données dans R qui montrent le problème de base:

 set.seed(seed=7513870)
 x <- rcauchy(80)
 boxplot(x,horizontal=TRUE,boxwex=.7)

boxplot insatisfaisant

La moitié médiane des données est réduite à une minuscule bande de quelques mm de large. Le même problème affecte la plupart des autres suggestions - y compris les parcelles QQ, les graphiques à bandes, les parcelles ruche / chaleur d'abeille et les parcelles violon.

Maintenant, quelques solutions potentielles:

1) transformation ,

Si les journaux ou les inverses produisent une boîte à moustaches lisible, ils peuvent être une très bonne idée, et l'échelle d'origine peut toujours être affichée sur l'axe.

Le gros problème est qu'il n'y a parfois pas de transformation «intuitive». Il y a un problème plus petit qui, bien que les quantiles eux-mêmes se traduisent assez bien par des transformations monotones, les clôtures ne le font pas; si vous venez de tracer les données transformées (comme je l'ai fait ici), les moustaches seront à des valeurs x différentes de celles du tracé d'origine.

boîte à moustaches des valeurs transformées

Ici, j'ai utilisé un péché hyperbolique inverse (asinh); c'est une sorte de log dans les queues et similaire à linéaire près de zéro, mais les gens ne le trouvent généralement pas une transformation intuitive, donc en général je ne recommanderais pas cette option à moins qu'une transformation assez intuitive comme log soit évidente. Code pour cela:

xlab <- c(-60,-20,-10,-5,-2,-1,0,1,2,5,10,20,40)
boxplot(asinh(x),horizontal=TRUE,boxwex=.7,axes=FALSE,frame.plot=TRUE)
axis(1,at=asinh(xlab),labels=xlab)

2) les ruptures d'échelle - prenez des valeurs extrêmes et compressez-les dans des fenêtres étroites à chaque extrémité avec une échelle beaucoup plus compressée qu'au centre. Je recommande fortement une pause complète sur toute l'échelle si vous faites cela.

boxplot avec des sauts d'échelle

opar <- par()
layout(matrix(1:3,nr=1,nc=3),heights=c(1,1,1),widths=c(1,6,1))
par(oma = c(5,4,0,0) + 0.1,mar = c(0,0,1,1) + 0.1)
stripchart(x[x< -4],pch=1,cex=1,xlim=c(-80,-5))
boxplot(x[abs(x)<4],horizontal=TRUE,ylim=c(-4,4),at=0,boxwex=.7,cex=1)
stripchart(x[x> 4],pch=1,cex=1,xlim=c(5,80))
par(opar)

3) le rognage des valeurs extrêmes (que je ne conseillerais pas normalement sans l'indiquer très clairement, mais il ressemble à l'intrigue suivante, sans les "<5" et "2>" à chaque extrémité), et

4) ce que j'appellerai des "flèches" extrêmement aberrantes - similaires au découpage, mais avec le nombre de valeurs ajustées indiqué à chaque extrémité

boxplot avec le nombre et les flèches pointant vers les valeurs extrêmes

xout <- boxplot(x,range=3,horizontal=TRUE)$out
xin <- x[!(x %in% xout)]
noutl <- sum(xout<median(x))
nouth <- sum(xout>median(x))
boxplot(xin,horizontal=TRUE,ylim=c(min(xin)*1.15,max(xin)*1.15))
text(x=max(xin)*1.17,y=1,labels=paste0(as.character(nouth)," >"))
text(x=min(xin)*1.17,y=1,labels=paste0("< ",as.character(noutl)))

Merci d'avoir pris le temps d'écrire ceci! C'est exactement le genre de réponse que j'attendais. Il ne me reste plus qu'à découvrir comment implémenter ces tracés avec R :)
static_rtti

1
Un code est là maintenant. Je n'ai pas donné de code pour 3) car c'est une version plus simple de 4); vous devriez pouvoir l'obtenir en coupant les lignes de cela.
Glen_b -Reinstate Monica

Soit dit en passant, la plupart de ces idées fonctionnent également avec les autres grands affichages suggérés ici - les diagrammes à bandes tremblantes et les parcelles de la ruche / de la ruche et les parcelles de violon et autres.
Glen_b -Reinstate Monica

Merci encore. Je suis sûr que cette réponse sera utile à beaucoup de gens.
static_rtti

Je suis d'accord, cela répond à la question beaucoup mieux que ma réponse. Bon produit.
TooTone

4

Personnellement, j'aime utiliser un stripplot avec gigue au moins pour avoir une idée des données. L'intrigue ci-dessous est avec un réseau en R (désolé pas ggplot2). J'aime ces intrigues car elles sont très faciles à interpréter. Comme vous le dites, l'une des raisons à cela est qu'il n'y a pas de transformation.

df <- data.frame(y1 = c(rnorm(100),-4:4), y2 = c(rnorm(100),-5:3), y3 = c(rnorm(100),-3:5))
df2 <- stack(df)
library(lattice)
stripplot(df2$values ~ df2$ind, jitter=T)

entrez la description de l'image ici

Le package beeswarm offre une excellente alternative au stripplot (merci à @January pour la suggestion).

beeswarm(df2$values ~ df2$ind)

entrez la description de l'image ici

Avec vos données, comme elles sont distribuées approximativement normalement, une autre chose à essayer pourrait être un qqplot, qqnorm dans ce cas.

par(mfrow=c(1,3))
for(i in 1:3) { qqnorm(df[,i]); abline(c(0,0),1,col="red") }

entrez la description de l'image ici


2
J'aime aussi les stripplots, mais la question est explicitement de savoir quoi faire avec les distributions à queue lourde.
Nick Cox

1
Le fait est que le conseil à utiliser, par exemple qqnorm, ne correspond pas à la question. D'autres types de graphiques quantile-quantile pourraient, je suis d'accord, être une très bonne idée, comme je l'ai mentionné plus tôt.
Nick Cox

1
Encore mieux que les stripplots de R sont les tracés du beeswarmpackage.
janvier

1
@Janvier Oui, c'est plutôt cool, je l'ajoute à ma réponse (si vous vous opposez, dites-le).
TooTone

1
Ma réponse a été publiée sur stats.stackexchange.com/questions/13086 , que je considère comme une version (sans conséquence plus étroite) de cette question. Je l'ai résumé comme «ne changez pas l'algorithme boxplot: ré-exprimez les données à la place». Le problème évoqué par le terme «adapté» dans cette question est traité par les techniques standard d'analyse exploratoire des données pour trouver des ré-expressions utiles des variables.
whuber

2

Vous pouvez vous en tenir aux boxplots. Il existe différentes possibilités pour définir des moustaches. Selon l'épaisseur de la queue, le nombre d'échantillons et la tolérance aux valeurs aberrantes, vous pouvez choisir deux quantiles plus ou moins extrêmes. Compte tenu de votre problème, j'éviterais les moustaches définies via l'IQR.
À moins bien sûr que vous ne souhaitiez transformer vos données, ce qui dans ce cas rend la compréhension plus difficile.


1
La dernière phrase n'est pas trop qualifiée pour passer sans commentaire. La transformation n'est pas une panacée, mais la transformation de données très asymétriques ne facilite pas la compréhension. Si les données sont toutes positives, vous pouvez au moins essayer d'utiliser une échelle racine, logarithmique ou réciproque. Si cela n'aide vraiment pas, reculez.
Nick Cox

À quelles difficultés de compréhension des données asymétriques faites-vous référence? Ceux avec des moustaches dépendantes de l'IQR? C'est un problème même avec des queues légères. Et ne parlons-nous pas de queues lourdes, indépendamment de l'asymétrie? Les transformations allégeant les queues donnent sûrement des boxplots plus réguliers, mais ajoutent une couche d'interprétation, échangeant la compréhension pour le confort. Mais on peut appeler cela une fonctionnalité s'il le souhaite.
Quartz

2
Les transformations aident souvent: c'est ma ligne de fond. Un statisticien qui n'a pas appris que beaucoup de choses semblent plus claires à l'échelle logarithmique (en particulier) manque sérieusement l'un des trucs les plus anciens et les plus efficaces qui soit. Vous sembliez nier cela; J'espère que je vous ai mal lu.
Nick Cox

1
Je ne suis pas d'accord. Je transforme tout le temps des données très biaisées et mon expérience est que c'est bien plus qu'une question d'esthétique. Cela fonctionne souvent. Un statisticien anonyme a écrit il y a quelque temps que la lognormale est plus normale que la normale. Il / elle était un peu facétieux mais il y a aussi une vérité importante. (Ce n'est pas que beaucoup d'autres distributions pourraient ne pas être mieux adaptées.)
Nick Cox

1
Je suppose que je dois m'arrêter ici pour laisser les autres juger, mais mon point de vue n'est pas excentrique. La transformation est discutée comme une possibilité sur, par exemple, stats.stackexchange.com/questions/13086/… Je vous suggère de répondre ou de commenter là-bas pour expliquer pourquoi ce conseil n'est pas valable.
Nick Cox

0

Je suppose que cette question concerne la compréhension des données (au lieu de les «gérer» autrement).
Si les données sont lourdes et / ou multimodales, je trouve ces «couches» de ggplot2 très utiles à cette fin: geom_violinet geom_jitter.


3
Pourriez-vous résumer pourquoi des tracés de violon et / ou des points instables seraient utiles avec des distributions à queue lourde?
chl
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.