Les facteurs avec R

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 :

fenêtre environment

Comprenez qu’au premier élément s’applique la modalité 3 (train), au deuxième la modalité 1 (avion), etc.

Concorde

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…

graphique

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) …

fenêtre

 

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.

 

facteur ordonné