Ignorer les valeurs aberrantes dans ggplot2 boîte à moustaches
Comment pourrais-je ignorer les valeurs aberrantes dans ggplot2 boîte à moustaches? Je ne voulons pas simplement disparaître (c'est à dire des valeurs aberrantes.taille=0), mais je veux qu'ils soient ignorés, tels que l'axe des échelles de montrer 1er/3e percentile. Mes valeurs aberrantes sont à l'origine de la "boîte" pour réduire de manière de petites de sa pratique, une ligne. Y at-il des techniques pour traiter ce problème?
Modifier
Voici un exemple:
y = c(.01, .02, .03, .04, .05, .06, .07, .08, .09, .5, -.6)
qplot(1, y, geom="boxplot")
- Quelques exemples de données et une reproductibilité exemple sera plus facile de vous aider.
- mon fichier est de 200 meg! Il suffit de prendre un ensemble de données où il y a beaucoup de points de données entre le 1er et le 3ème quantile et quelques valeurs aberrantes (vous avez seulement besoin d'1). Si la valeur aberrante est loin de la 1ère/3ème alors forcément les cases sont va diminuer pour accueillir les valeurs aberrantes
- Oui, c'est ce que j'avais à l'esprit. Un tel jeu de données et l'utilisation dput() pour l'afficher ici avec le ggplot() déclaration que vous utilisez. Aidez-nous à vous aider.
- Si l'échantillon d'un sous-ensemble.
- ok, j'ai posté un exemple
- Ne pouvez-vous pas juste de modifier l'axe des y des limites à "zoom" dans le cadre de l'axe des y vous intéresse?
- Simpson - est-ce la même chose que @Richie Coton de la solution ci-dessous?
- permettez-moi de regarder.... Oh oui, désolé. Il suffit de ne
fivenum()
sur les données pour en extraire ce, IIRC, est utilisé pour le haut et le bas des charnières sur les boxplots et utiliser ce résultat dans lescale_y_continuous()
appel que @Ritchie a montré. Ceci peut être automatisé très facilement à l'aide des outils de R et ggplot fournir. Si vous avez besoin d'inclure les moustaches ainsi, pensez à utiliserboxplot.stats()
pour obtenir les limites supérieure et inférieure pour les moustaches et les utiliser ensuite dansscale_y_continuous()
.
Vous devez vous connecter pour publier un commentaire.
Voici une solution à l'aide d'une boîte à moustaches.statistiques
1.05
multiplicateur sert de zoom un peu moins, et s'attend à ce que vos limites sont une paire avec des signes différents.ylim <- c(-0.1, 1000) * 1.05
donne[1] 0.105 1050
. Pour obtenir l'égalité des limites autour de la moyenne, vous pourriez utiliserylim + c(-0.05, 0.05) * diff(ylim) / 2
. De plus joli à mon avis.facet_grid()
. Ensuite, vous avez multible boxplots au lieu d'un. Ainsi, vous n'avez pas le droit de limites.coord_flip(ylim = ylim1*1.05)
au lieu decoord_cartesian(ylim = ylim1*1.05)
tapply(df$y,list(df$somefactor),function (x) boxplot.stats(x)[['stats']][c(1,5)])
mais il semble qu'à l'heure actuelle il n'y a aucun moyen de définir ylimits individuellement pour les facettes.Utilisation
geom_boxplot(outlier.forme = NA)
pour ne pas afficher les valeurs aberrantes etscale_y_continuous(limite = c(inférieure, supérieure))
pour modifier les limites de l'axe.Un exemple.
En fait, comme Ramnath a montré dans sa réponse (et Andrie trop dans les commentaires), il est plus logique de récolte de la balance après calcul de la statistique, via
coord_cartesian
.(Vous aurez probablement encore besoin d'utiliser
scale_y_continuous
pour fixer l'axe des pauses.)coord_cartesian()
ne joue pas bien aveccoord_flip()
, dans mon expérience, donc je préfèrescale_y_continuous()
.J'ai eu le même problème et précalculées les valeurs de T1, T2, médiane, ymin, ymax à l'aide de
boxplot.stats
:Le résultat est une boîte à moustaches sans valeurs aberrantes.
Une idée serait de winsoriser les données dans une procédure de deux passes:
exécution d'un premier passage, apprendre ce que les limites sont, par exemple, de couper à percentile, ou N écart-type au-dessus de la moyenne, ou de ...
dans une seconde passe, définissez les valeurs au-delà de la donnée liée à la valeur de lié
Je tiens à souligner que c'est un à l'ancienne méthode qui devrait être dominé par les plus moderne des techniques mais vous avez encore trouver beaucoup.
DescTools::Winsorize
,statar::winsorize
,robustHD::winsorize
- je suis tombé sur ceux qui, mais je pense qu'il n'y est plus).La "coef" l'option de la geom_boxplot fonction permet de changer la valeur aberrante de coupure en termes de interquartile des plages. Cette option est documentée pour la fonction stat_boxplot. Pour désactiver les valeurs aberrantes (en d'autres termes, ils sont traités comme des données), on peut au lieu d'utiliser la valeur par défaut de 1,5 spécifier une très haute valeur de coupure:
Si vous voulez forcer les moustaches d'étendre les valeurs max et min, vous pouvez modifier les
coef
argument. La valeur par défaut pourcoef
est de 1,5 (c'est à dire par défaut de la longueur des moustaches à 1,5 fois la IQR).