Comment détecter les outliers avec R

outliers avec R

Table des matières:

  • 1. C’est quoi un outlier ?
  • 2. Détection des outliers par boxplots
    • 2.1 Réalisation des boxplots
    • 2.2 Règles d’interprétation des boxplots
    • 2.3 Récupération des valeurs des outliers
    • 2.4 Récupérer l’indice des outliers
    • 2.5. Juxtaposer les observations sur les boxplots
  • 3.Les autres méthodes de détection univariées
    • 3.1 Méthode basée sur les percentiles
    • 3.2 La méthode de Hampel
    • 3.3 Le test statistique de Grubbs
  • 4. Détection des outliers sur les résidus
  • 5. Que faire des outliers ?
  • 6. Pour aller plus loin
  • 7. Le code des règles de décision du boxplot
  • Conclusion

1. C’est quoi un outlier ?

Un outlier, ou donnée aberrante est “une valeur ou une observation qui est « distante » des autres observations effectuées sur le même phénomène, c’est-à-dire qu’elle contraste grandement avec les valeurs « normalement » mesurées. Une donnée aberrante peut être due à la variabilité inhérente au phénomène observé ou bien elle peut aussi indiquer une erreur expérimentale. Les dernières sont parfois exclues de la série de données”.(wikipedia)

2. Détection des outliers par boxplots ?

Une méthode classiquement employée pour détecter les outliers, consiste à réaliser un boxplot. On parle alors de méthode de détection univariée car elle ne concerne qu’une seule dimension, ou variable.

2.1 Réalisation des boxplots

Voici comment réaliser des boxplots avec le package ggplot2. Je prends ici comme exemple les données “mpg” contenues dans le package “ggplot2”, et je m’intéresse à la variable “hwy” (Highway miles per gallon) en fonction du type de véhicule (variable class).

 

outlier avec R

Sur cette visualisation des données, les outliers sont représentés sous forme de points. Ils correspondent à des observations dont les valeurs sont :

  • supérieures à la valeur du 3ème quartile plus 1.5 fois l’intervalle inter-quartile,
  • ou inférieures à la valeur du 1er quartile moins 1.5 fois l’intervalle inter-quartile.

2.1 Règle d’interprétation des boxplots

Pour celles et ceux qui ne sont pas très familiers avec les boxplots, voici un rappel des règles d’interprétation (d’après Laura DeCicco).

interprétation boxplot

2.3 Récupération des valeurs des outliers

Imaginons, par exemple, que je souhaite obtenir les valeurs des observations outliers (concernant la variable hwy), correspondant aux voitures de type SUV (le boxplot rose sur grap du paragraphe 2.1). Pour cela, j’utilise la fonction boxplot.stats() :

 

 

 2.4 Récupérer l’indice des outliers

Il peut être intéressant de connaître sur quelles lignes du jeu de données se trouvent les outliers. Pour cela, on peut garder les valeurs outliers dans un objet, puis l’utiliser en argument de la fonction which(), comme ceci :

 

Pour vérifier, on peut afficher les lignes correspondant à outlier_idx:

 

2.5. Juxtaposer les observations sur les boxplots

Lorsque je réalise un boxplot, j’ai pour habitude de faire également figurer les observations, parce que ça permet de se faire une meilleure idée du nombre de données et de leur répartition. Pour cela, j’utilise la couche geom_jitter().

Remarque : L’argument width de la fonction geom_jitter() permet de gérer la largeur de répartition des points à l’intérieur du boxplot.

 

boxplot outlier avec R

 

Le problème de ce type de boxplot, c’est que les outliers sont représentés deux fois: une fois en tant qu’observation et une fois en tant qu’outlier (les points sont plus clairs, ils sont particulièrement visibles dans la partie supérieure du boxplot rose).

Pour éviter cette double représentation, j’utilise l’argument outlier.shape=NA, ce qui permet de ne pas afficher la version outlier :

 

boxplot outlier avec ggplot2

A présent, les outliers sont simplement tous les points au delà des traits verticaux de part et d’autre de chaque boite.

3.Les autres méthodes de détection univariées

3.1 Méthode basée sur les percentiles

Il existe d’autres méthodes de détection des outliers. L’une d’elles consiste à considérer comme outlier les données se situant à l’extérieur de l’intervalle constituté par les percentiles 2.5 et 97.5 par exemple, ou encore par les percentiles 1 et 99.

 

On peut obtenir les indices des lignes des outliers comme ceci:

 

Puis leur valeur :

 

3.2 La méthode de Hampel

Une autre méthode, dite de Hampel, consiste à considérer comme outliers les valeurs en dehors de l’intervalle constitué par la médiane, plus ou moins 3 déviation absolue de médiane :

$$I=[median – 3\;\ast mad \;;\;median + 3\;\ast mad ] $$

Avec $$mad = \text{Median Absolute Deviation} $$

et $$mad=median\;(|y_{i} – \tilde{y} |)$$

et $$ \tilde{y} = median(y) $$

Parfois, une autre valeur que 3 est employée pour calculer l’intervalle.

Voici comment constituer l’intervalle selon la méthode de Hampel.

 

Il est ensuite facile d’obtenir l’indice des lignes contenant les outliers :

 

Puis leur valeur :

 

3.3 Le test statistique de Grubbs

Le test statistique de Grubbs permet de tester si la valeur la plus élevée est un outlier. Son hypothèse nulle spécifie que la valeur la plus élevée n’est pas un outlier, alors que son hypothèse alternative spécifie que la valeur la plus élevée est un outlier. Si la p-value du test est inférieure au seuil de significativité choisi (en général 0.05) alors on concluera que la valeur la plus élevée est outlier. Pour réaliser ce test avec R, on utilise la fonction grubbs.test() du package “outliers” :

 

Ici la p-value est proche du seuil de significativité, j’aurais tendance à considérer la valeur la plus haute (27) comme étant un outlier.

Il est possible de tester le caractère outlier de la plus faible valeur en utilisant l’argument opposite=TRUE :

 

Ici, la plus faible valeur (12) n’est pas considérée comme un outlier.

 

4. Détection des outliers sur les résidus

Dans le cadre d’une régression, il est possible de mettre en évidence des outliers sur les résidus, en employant la fonction outlierTest() du package “car”. Je réalise ici une régression linéaire simple de la variable “hwy” (highway miles per gallon) en fonction de la variable “displ” (engine displacement, in litres) :

 

outliers sur résidus

 

Les plots des distances de cook  permettent déjà d’identifier certains points outliers, ici les données 51, 53, et 49.

 

distance de cook

 

 

Ici, la p-value ajustée par la méthode de Bonferonni est très éloignée du seuil de 0.05. Le résidus le plus élevé, ne peut donc pas être considéré comme outlier. Pour vérifier quel est l’indice du résidu le plus élevé, on peut utiliser la commande suivante :

 

5. Que faire des outliers ?

En premier lieu, les données détectées comme outliers doivent être vérifiées.

Pour la suite, il n’y a pas de réponse unique à cette question !

Dans certains domaines, comme en génomique ou protéomique, il n’est pas rare de supprimer les outliers du jeu de données, car ces données extrêmes sont considérées comme issues d’un processus qui a dysfonctionné.

Dans d’autres domaines, au contraire, ces données extrêmes sont conservées, mais les analyses statistiques sont conduites avec et sans, afin d’évaluer leur impact sur les résultats, voir un exemple dans le paragraphe 7 de cet article .

 

6. Pour aller plus loin

Vous trouverez d’autres méthodes d’identification des outliers dans le chapitre 7 du livre “R and Data Mining: Examples and Case Studies“.

Le package “Outliers” contient également plusieurs fonctions dédiées à la détection et à la gestion des outliers.

 

7 Le code des règles de décision du boxplot

J’ai adapté le code original développé par Laura DeCicco et disponible là.

 

Conclusion

Et vous, quelle méthode utilisez vous pour détecter les outliers ? Et comment les gérer vous dans la suite de vos analyses statistiques ? En attendant, si cet article vous a plus, partagez le 😉

Credits photos : geralt

 

Retrouvez ici d’autres articles pratico pratiques :

 

Partager l'article
  •  
  •  
  •  
  •  
  •  
    13
    Partages
  • 13
  •  
  •  
  •  
  •  

4 commentaires

  1. Basso Répondre

    Bonjour Claire, très intéressant l’article, il va nous être très utile car c’est notre prochain objectif : valider les données !
    Merci et à bientôt
    Miriam BASSO

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Miriam, ravie que cet article vous aide. Bonne continuation !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *