Introduction aux facteurs avec R
Le langage R offre la possibilité de manipuler des objets très voisins des vecteurs : les facteurs (ou factors, en anglais). Plutôt pratique, jugez-en…
Le principe
Un facteur est un objet qui comprend un nombre déterminé de catégories. C’est le même principe qu’une liste déroulante de tableur : il stocke les modalités observées dans l’échantillon étudié, mais aussi celles qui sont susceptibles de l’être.
R a besoin de savoir distinguer un facteur des autres objets, par exemple pour lui associer des types de graphiques appropriés.
Pour en créer un, on transforme un vecteur.
Facteurs non ordonnés
Soit le vecteur mesvoyages :
mesvoyages <- c('Train', 'Avion', 'Voiture', 'Voiture', 'Avion', 'Avion', 'Car')
# Création du facteur
transports <- factor(mesvoyages)
transports
Affichage :
[1] Train Avion Voiture Voiture Avion Avion Car
Levels: Avion Car Train Voiture
R a compté quatre modalités (Levels)
Soit dit en passant, nous aurions pu économiser une ligne de code :
transports <- factor(c('Train', 'Avion', 'Voiture', 'Voiture', 'Avion', 'Avion', 'Car'))
transports
Dans la fenêtre Environment de RStudio, nous lisons :
Comprenez qu’au premier élément s’applique la modalité 3 (train), au deuxième la modalité 1 (avion), etc.
Précisons que selon les situations, vous pouvez ignorer les valeurs non renseignées (NA) ou les considérer comme une modalité.
1- L’argument levels
Il est possible de modifier l’ordre des modalités et d’en ajouter. Exemple :
transports <- factor(transports, levels = c('Avion', 'Train', 'Bateau', 'Car', 'Voiture'))
Si l’on réalise un graphique, l’ordre est celui que l’on a spécifié et la modalité ajoutée apparaît avec un effectif nul (possibilité de transport par bateau mais aucun voyage n’a été effectué avec ce moyen de transport). Remarquez les caractères microscopiques des graphiques version R de base…
Comment retirer un élément (par exemple l’avion) ?
transports <- factor(transports, levels = c('Train', 'Bateau', 'Car', 'Voiture'))
transports
plot(transports)
Affichage :
[1] Train <NA> Voiture Voiture <NA> <NA> Car
Levels: Train Bateau Car Voiture
Quant au graphique, il apparaît sans la barre Avion mais la modalité NA n’apparaît pas non plus.
2 – La fonction levels
La fonction levels permet de renommer les modalités :
levels(transports) <- c('A','T','B','C','V')
transports
Affichage :
[1] T A V V A A C
Levels: A T B C V
Attention à bien relever l’ordre des modalités avant de se lancer dans cette opération !
Facteurs ordonnés
Nous avons évoqué l’ordre dans lequel pouvaient apparaître les modalités mais il était arbitraire. Il n’en va pas de même si les modalités sont de type « très bien », « moyen » et « mauvais » ou si ce sont les échelons d’une échelle de Likert.
Il faut alors remplacer la fonction factor par la fonction ordered.
Il est d’ailleurs possible d’ordonner un facteur qui ne l’était pas.
Exemple : nous avons laissé notre facteur transports dans cet état : A, T, B, C, V.
transports <- ordered(transports, c('A','B','C','T','V'))
transports
Affichage :
[1] T A V V A A C
Levels: A < B < C < T < V
Notre facteur est désormais ordonné alphabétiquement. C’est dans cet ordre qu’apparaîtront les modalités si nous les représentons graphiquement. Quant à la fenêtre Environment de RStudio (à comparer avec la précédente) …
Depuis un vecteur numérique
Il n’est pas rare que des modalités aient été saisies sous format numérique (par exemple 1 pour Homme et 2 pour Femme). Pour transformer le vecteur en facteur, il faut ajouter les libellés (en l’occurrence Hommes et Femmes ou 1 et 2 en alphanumérique).
# Vecteur numérique
indiv_nombres <- c(2,2,1,1,2)
# Transformation en facteur
indiv_lettres <- factor(indiv_nombres, levels = c(1,2), labels = c('H','F'))
# Affichage
indiv_lettres
Affichage :
[1] F F H H F
Levels: H F
Pour obtenir un facteur ordonné, il faut là aussi remplacer la fonction factor par ordered.