Comment ignorer les valeurs aberrantes dans le boxplot ggplot2? Je ne veux pas simplement qu'ils disparaissent (c.-à-d. Outlier.size = 0), mais je veux qu'ils soient ignorés de telle sorte que l'axe des y est mis à l'échelle pour afficher le 1er / 3ème percentile. Mes valeurs aberrantes font que la "boîte" rétrécit si petit qu'elle est pratiquement une ligne. Existe-t-il des techniques pour gérer cela?
Modifier Voici un exemple:
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom="boxplot")
fivenum()
Faites simplement sur les données pour extraire ce qui, IIRC, est utilisé pour les charnières supérieures et inférieures des boxplots et utilisez cette sortie dans l'scale_y_continuous()
appel que @Ritchie a montré. Cela peut être automatisé très facilement à l'aide des outils fournis par R et ggplot. Si vous devez également inclure les moustaches, envisagez d'utiliserboxplot.stats()
pour obtenir les limites supérieure et inférieure des moustaches et utilisez-les ensuitescale_y_continuous()
.Réponses:
Voici une solution utilisant boxplot.stats
la source
ylim <- c(-0.1, 1000) * 1.05
donne[1] 0.105 1050
. Pour obtenir des limites égales autour de la moyenne que vous pourriez utiliserylim + c(-0.05, 0.05) * diff(ylim) / 2
. Plus joli à mon avis.facet_grid()
. Ensuite, vous avez des boxplots multibrins au lieu d'un. Ainsi, vous n'obtenez pas les bonnes limites.Permet
geom_boxplot(outlier.shape = NA)
de ne pas afficher les valeurs aberrantes etscale_y_continuous(limits = c(lower, upper))
de modifier les limites de l'axe.Un exemple.
En fait, comme Ramnath l'a montré dans sa réponse (et Andrie aussi dans les commentaires), il est plus logique de recadrer les échelles après avoir calculé la statistique, via
coord_cartesian
.(Vous devrez probablement encore utiliser
scale_y_continuous
pour corriger les ruptures d'axe.)la source
coord_cartesian()
ne joue pas bien aveccoord_flip()
, d'après mon expérience, donc je préfèrescale_y_continuous()
.J'ai eu le même problème et j'ai précalculé les valeurs pour Q1, Q2, médiane, ymin, ymax en utilisant
boxplot.stats
:Le résultat est un boxplot sans valeurs aberrantes.
la source
Une idée serait de winsorize les données dans une procédure en deux passes:
exécuter une première passe, apprendre quelles sont les limites, par exemple une coupe à un centile donné, ou un écart-type N au-dessus de la moyenne, ou ...
dans un deuxième passage, définissez les valeurs au-delà de la limite donnée à la valeur de cette limite
Je dois souligner qu'il s'agit d'une méthode désuète qui devrait être dominée par des techniques robustes plus modernes, mais vous la rencontrez toujours beaucoup.
la source
L'option "coef" de la fonction geom_boxplot permet de changer le seuil de valeur aberrante en termes d'intervalle interquartile. Cette option est documentée pour la fonction stat_boxplot. Pour désactiver les valeurs aberrantes (en d'autres termes, elles sont traitées comme des données régulières), on peut au lieu d'utiliser la valeur par défaut de 1,5 spécifier une valeur de coupure très élevée:
la source
Si vous voulez forcer les moustaches à s'étendre aux valeurs max et min, vous pouvez modifier l'
coef
argument. La valeur par défaut pourcoef
est de 1,5 (c'est-à-dire que la longueur par défaut des moustaches est 1,5 fois l'IQR).la source
Ipaper :: geom_boxplot2 est exactement ce que vous voulez.
la source