J'ai des données multivariées sur la beauté par rapport aux âges. Les âges varient de 20 à 40 ans à des intervalles de 2 (20, 22, 24 ... 40), et pour chaque enregistrement de données, ils reçoivent un âge et une cote de beauté de 1 à 5. Lorsque je fais des boîtes à moustaches de ces données (âges sur l'axe X, cotes de beauté sur l'axe Y), il y a des valeurs aberrantes tracées en dehors des moustaches de chaque boîte.
Je souhaite supprimer ces valeurs aberrantes de la trame de données elle-même, mais je ne sais pas comment R calcule les valeurs aberrantes pour ses boîtes à moustaches. Voici un exemple de ce à quoi mes données pourraient ressembler.
r
statistics
outliers
Dan Q
la source
la source
boxplot
fonction renvoie les valeurs aberrantes (parmi d'autres statistiques) de manière invisible. Essayez defoo <- boxplot(...); foo
lire?boxplot
pour comprendre la sortie.Réponses:
OK, vous devriez appliquer quelque chose comme ça à votre ensemble de données. Ne remplacez pas et enregistrez ou vous détruirez vos données! Et, au fait, vous ne devriez (presque) jamais supprimer les valeurs aberrantes de vos données:
Pour le voir en action:
Et encore une fois, vous ne devriez jamais faire cela par vous-même, les valeurs aberrantes sont juste censées être! =)
EDIT: j'ai ajouté
na.rm = TRUE
par défaut.EDIT2:
quantile
fonction supprimée , indice ajouté, donc rendu la fonction plus rapide! =)la source
boxplot
. C'est gérable, et vous devriez alors marquer la réponse de @ Prasad, puisque vous avez répondu à votre question. Si vous souhaitez exclure les valeurs aberrantes à l'aide de la "règle des valeurs aberrantes"q +/- (1.5 * H)
, exécutez donc une analyse, puis utilisez cette fonction. BTW, je l'ai fait à partir de zéro, sans googler, donc il y a une chance que j'ai réinventé la roue avec cette fonction de la mienne ...Personne n'a publié la réponse la plus simple:
Voir aussi ceci: http://www.r-statistics.com/2011/01/how-to-label-all-the-outliers-in-a-boxplot/
la source
result = x[!x %in% boxplot.stats(x)$out]
À utiliser
outline = FALSE
comme option lorsque vous faites la boîte à moustaches (lisez l'aide!).la source
out
etgroup
dans la liste).La fonction boxplot renvoie les valeurs utilisées pour faire le tracé (ce qui est en fait ensuite fait par bxp ():
Je n'ai pas répondu à la question précise à dessein parce que je considère qu'il s'agit d'une erreur statistique de supprimer les «valeurs aberrantes». Je considère qu'il est acceptable de ne pas les tracer dans une boîte à moustaches, mais les supprimer simplement parce qu'ils dépassent un certain nombre d'écarts types ou un certain nombre de largeurs inter-quartiles est une modification systématique et non scientifique du dossier d'observation.
la source
J'ai recherché des packages liés à la suppression des valeurs aberrantes, et j'ai trouvé ce package (appelé étonnamment "outliers"!): Https://cran.r-project.org/web/packages/outliers/outliers.pdf
si vous le parcourez vous voir différentes façons de supprimer les valeurs aberrantes et parmi elles, j'ai trouvé celle qui est la
rm.outlier
plus pratique à utiliser et comme indiqué dans le lien ci-dessus: "Si la valeur aberrante est détectée et confirmée par des tests statistiques, cette fonction peut la supprimer ou la remplacer par la moyenne ou la médiane de l'échantillon" et voici également la partie utilisation de la même source:" Utilisation
Arguments
x un ensemble de données, le plus souvent un vecteur. Si l'argument est une trame de données, la valeur aberrante est supprimée de chaque colonne par sapply. Le même comportement est appliqué par apply lorsque la matrice est donnée.
fill Si la valeur est TRUE, la médiane ou la moyenne est placée au lieu de la valeur aberrante. Sinon, la ou les valeurs aberrantes sont simplement supprimées.
median Si la valeur est TRUE, la médiane est utilisée au lieu de la moyenne dans le remplacement des valeurs aberrantes. opposé si mis à TRUE, donne la valeur opposée (si la plus grande valeur a une différence maximale par rapport à la moyenne, elle donne la plus petite et vice versa) "
la source
Je trouve cela très facile de supprimer les valeurs aberrantes. Dans l'exemple ci-dessus, j'extrais simplement 2 percentile à 98 percentile des valeurs d'attribut.
la source
Ne serait pas:
accomplir cette tâche assez facilement?
la source
En ajoutant à la suggestion de @sefarkas et en utilisant le quantile comme seuil, on pourrait explorer l'option suivante:
Cela supprimera les points points au-delà du 99e quantile. Des précautions doivent être prises comme ce que disait aL3Xa au sujet du maintien des valeurs aberrantes. Il ne doit être supprimé que pour obtenir une autre vue conservatrice des données.
la source
0.91
ou0.99
? commemydata$var < quantile(mydata$var, probs=c(.01, .91))[1])
oumydata$var < quantile(mydata$var, probs=c(.01, .99))[1])
Une façon de faire est
ou
la source
Les valeurs aberrantes sont assez similaires aux pics, de sorte qu'un détecteur de pics peut être utile pour identifier les valeurs aberrantes. La méthode décrite ici a de très bonnes performances en utilisant les scores z. L'animation située en bas de la page illustre la méthode de signalisation des valeurs aberrantes ou des pics.
Les pics ne sont pas toujours les mêmes que les valeurs aberrantes, mais ils sont souvent similaires.
Un exemple est présenté ici: Cet ensemble de données est lu à partir d'un capteur via des communications série. Des erreurs de communication série occasionnelles, des erreurs de capteur ou les deux conduisent à des points de données répétés et clairement erronés. Il n'y a pas de valeur statistique sur ces points. Ce ne sont sans doute pas des valeurs aberrantes, ce sont des erreurs. Le détecteur de pic de score z a pu signaler des points de données parasites et a généré un ensemble de données résultant propre:
la source
Essaye ça. Nourrissez votre variable dans la fonction et enregistrez le o / p dans la variable qui contiendrait les valeurs aberrantes supprimées
la source