Les facteurs sont des vecteurs un peu particuliers, facilitant la manipulation de données qualitatives (qu’elles soient numériques ou caractères). En effet, en plus de stocker les différents éléments comme un vecteur classique, il stocke également l’ensemble des différentes modalités possibles dans un attribut accessible via la commande levels
.
Ils forment une classe d’objets et bénéficient de traitements particuliers lors de leur manipulation et lors de l’utilisation de certaines fonctions. Les facteurs peuvent être non ordonnés (homme, femme) ou ordonnés (niveaux de ski).
Création de facteurs
Il existe trois fonctions permettant de créer les facteurs.
Les fonctions factor et as.factor
Ces deux fonctions sont très similaires dans leur utilisation. La première permet de créer un facteur en définissant directement les différents éléments du facteur, l’autre permet de transformer un autre objet en facteur. Dans tous les cas, ces deux fonctions permettent généralement de créer des facteurs non ordonnés.
Exemple pour la fonction factor
:
y <- c("M","F","F","M","F")
y
# [1] "M" "F" "F" "M" "F"
yf <- factor(y)
yf
# [1] M F F M F
# Levels: F M
Il est possible de regarder les attributs de ce yf
.
attributes(yf)
# $levels
# [1] "F" "M"
# $class
# [1] "factor"
levels(yf)
# [1] "F" "M"
nlevels(yf)
# [1] 2
On peut renommer les modalités lors de la construction du facteur :
levels(yf) <- c("Femme","Homme")
yf
# [1] Homme Femme Femme Homme Femme
# Levels: Femme Homme
Et à présent, un exemple avec la fonction as.factor
:
salto <- c(1:5,5:1)
salto
# [1] 1 2 3 4 5 5 4 3 2 1
salto.f <- as.factor(salto)
salto.f
# [1] 1 2 3 4 5 5 4 3 2 1
# Levels: 1 2 3 4 5
La fonction ordered
La fonction ordered
va quant à elle nous permettre de créer des facteurs ordonnés :
niveau <- ordered(c("débutant","débutant","champion",
"champion","moyen","moyen","moyen",
"champion"),
levels=c("débutant","moyen","champion"))
niveau
# [1] débutant débutant champion champion moyen moyen moyen
# [8] champion
# Levels: débutant < moyen < champion
Pour vous affranchir des contraintes liées à l’utilisation des facteurs, vous pouvez à tout moment repasser sur un vecteur classique en utilisant les fonctions correspondantes : as.numeric
pour des numériques, as.character
pour des caractères, etc.
Utiliser des facteurs pour mieux représenter la réalité
Lors de vos analyses statistiques, vous allez être confronté à de nombreuses variables qualitatives codées différemment :
sous forme de vecteurs de caractères (comme des stations météo, etc.) ;
sous forme de vecteurs numériques (comme des CSP où chaque numéro correspond à une catégorie particulière, par exemple 1 : ouvriers ; 2 : cadres ; etc.).
Les facteurs vont nous permettre de mieux faire comprendre à R que nous manipulons des variables qualitatives. Prenons l’exemple d’une variable X
comportant des numériques :
X <- c(rep(10,3),rep(12,2),rep(13,4))
X
# [1] 10 10 10 12 12 13 13 13 13
Déterminer le type de données d’un vecteur
Il existe deux méthodes classiques pour savoir si un objet de type vecteur est une variable quantitative ou une variable qualitative sans afficher la totalité du vecteur. La première consiste à interroger R sur le type :
is.factor(X)
# [1] FALSE
is.numeric(X)
# [1] TRUE
La seconde consiste à effectuer un résumé de la variable ( summary
). Quand il s’agit d’une variable quantitative, le minimum, le maximum, les quartiles et la moyenne sont affichés. Par contre, pour un facteur, le nombre d’observations pour les six premiers niveaux de la variable qualitative est donné :
summary(X)
# Min. 1st Qu. Median Mean 3rd Qu. Max.
# 10.00 10.00 12.00 11.78 13.00 13.00
De manière évidente, il s’agit bien ici d’une variable quantitative.
Le passage en facteur se fait simplement en utilisant la fonction factor
:
Xqual <- factor(X)
Xqual
# [1] 10 10 10 12 12 13 13 13 13
# Levels: 10 12 13
summary(Xqual)
# 10 12 13
# 3 2 4
L’affichage d’un facteur permet clairement de le distinguer d’un numérique par la présence des niveaux (levels
) en fin d’affichage. Il en est de même pour le résumé fourni par summary
.
Conversion d’un facteur en numérique
Le passage de facteur en numérique se fait en deux étapes. On transforme le facteur en vecteur de type caractère, puis on transforme ce dernier en numérique. Si l’on transforme directement le facteur en numérique, les niveaux sont recodés dans l’ordre (le premier niveau sera 1, le deuxième 2, etc.) :
## conversion avec recodage des modalités
as.numeric(Xqual)
# [1] 1 1 1 2 2 3 3 3 3
## conversion sans recodage des modalités : 2 étapes
provisoire <- as.character(Xqual)
provisoire
# [1] "10" "10" "10" "12" "12" "13" "13" "13" "13"
as.numeric(provisoire)
# [1] 10 10 10 12 12 13 13 13 13
En résumé
Le facteur est un objet permettant de représenter au mieux une variable qualitative.
Il permet de garder en mémoire :
l’ensemble des éléments, comme un vecteur ;
les différentes modalités possibles.
Les modalités d’un facteur peuvent être ordonnées ou non.
Il n’est pas possible d’ajouter un élément qui n’est pas défini dans les différentes modalités (levels).
Vous pouvez convertir un vecteur en facteur et inversement, en utilisant les fonctions adéquates.
Dans le prochain chapitre, nous verrons comment créer des matrices avec R.