Analyse descriptive des variables catégorielles

 Il y quelques temps, j’ai publié un article sur l’analyse descriptive des variables numériques.

Pour ne pas laisser en reste les variables descriptives, je vais vous montrer, dans ce post, quelques fonctions R qui permettent de réaliser facilement une analyse descriptive de ce type de variable.

Plus précisément, je vais vous parler de fonctions qui permettent de:

  1. manipuler très simplement les modalités (ou levels) de ces variables,
  2. calculer facilement les pourcentages d’observations des différentes modalités, ainsi que leurs intervalles de confiance,
  3. calculer les pourcentages d’observations, et leurs intervalles de confiance, lorsque deux variables catégorielles sont combinées.

 

Pour illustrer cet article, je vais utiliser le jeu de données Melanoma, du package MASS. Ce jeu de données n’est pas des plus drôle, puisque il concerne des patients atteints de Mélanome malin, mais il a l’avantage de comporter 3 variables catégorielles (qui ont 2 modalités pour deux d’entre elles, et 3 modalités pour la dernière):

  1. sex :
    • 1 pour les hommes,
    • 0 pour les femmes.
  2. ulcer :
    • 1 présent,
    • 2 absent.
  3. status :
    • 1 si le patient est décédé des suites du Melanome,
    • 2 s’il est vivant,
    • 3 s’il est décédé d’une auter cause).

 

1. Manipulation des modalités des variables catégorielles

1.1 La fonction as.factor

Dans R, les variables catégorielles sont des objets de type factor.Or, si on affiche la structure des données Melanoma avec la fonction str, on s’aperçoit que les variables status, sex et ulcer sont considérées comme des variables numériques de type entier (int).

Nous allons donc commencer par les passer en variables catégorielles (factor dans R) à l’aide de la fonction as.factor.

Les 3 variables sont à présent considérées comme des facteurs.

 

1.2. La fonction levels

 

1.2.1 Pour afficher les modalités

Lorsqu’on ne connait pas à l’avance les modalités des variables catégorielles d’un jeu de données, il peut être utile de les afficher. Ces modalités (ou levels) sont affichées dans la sortie de la fonctionstr, mais il est parfois plus pratique d’utiliser la fonction levels, qui n’affichera que cette information.

 

1.2.2 Pour changer les étiquettes des modalités

On peut vouloir changer les étiquettes des modalités afin qu’elles soient plus parlantes. Par exemple, changer les codes 1, 2 et 3 de la variable status en “dcd_Melanome”, “vivant”, “dcd_autres”. Pour cela, on utilise encore la fonction levels.

La fonction table employée permet simplement d’accéder aux nombres d’observations par catégories, et de montrer que seules les étiquettes vont être changées, puisque les nombre d’observations sont identiques.

 

1.2.3 Pour regrouper des modalités

On peut aussi avoir besoin de regrouper certains niveaux entre eux. On pourrait, par exemple, avoir besoin de regrouper les modalités “dcd_Melanome” et “dcd_autres”, pour former un seul niveau “dcd”. Là encore, on utilise la fonction levels.

Les indices 1 et 3 correspondent aux rangs des modalités que l’on souhaite regrouper.

 

1.3 La fonction “ordered”

On peut aussi avoir besoin de changer l’ordre des modalités. C’est souvent le cas dans les représentations graphiques, par exemple lorsqu’on souhaite faire apparaître une certaine modalité en première
position.

Initialement l’ordre des modalités est celui de l’ordre alphabétique. La fonction ordered permet de le changer:

 

2. Calculer les pourcentages et les intervalles de confiance des différentes modalités

2.1 Les fonctions table ou xtabs et sum pour obtenir le nombre d’observations

Avant de calculer les pourcentages, il est souvent utile de connaitre le nombre d’observations par modalité. Les fonctionstable du package base et xtabs du package stats permettent d’obtenir ces informations.

Enfin, la fonction sum permet d’obtenir le nombre total
d’observations.

Il est important de noter que, par défaut, les fonctions table et xtabs ne renvoient pas le nombre de données manquantes. Pour cela il est nécessaire d’employer spécifiquement les arguments useNA="ifany"dans la fonction table, et addNA = TRUE dans la fonction xtabs :

 

2.2 La fonction prop.table pour calculer la fréquence de chaque modalité

Il suffit alors de multiplier par 100 pour obtenir les pourcentages.

2.3 La fonction describe du package “Hmisc”

Cette fonction est très complète puisqu’elle permet d’afficher :

  • le nombre total d’observations
  • le nombre de données manquantes
  • le nombre de modalités
  • le nombre d’observations pour chaque modalité
  • le pourcentage d’observations pour chaque modalité.

La fonction describe peut prendre en argument plusieurs variables catégorielles :

 

2.4 La fonction prop.test pour obtenir l’intervalle de confiance

L’intervalle de confiance est estimé selon une distribution binomiale.Il peut être estimé en utilisant prop.test(obs, nb_tot_obs)$conf.int

Le niveau de confiance peut être modifié par l’argument conf.level de la fonction prop.test.

 

2.5 La fonction binom.confint pour calculer les intervalles de confiance de plusieurs pourcentages

Bien qu’elle soit un tout petit peu plus difficile à utiliser, la fonction binom.confint du package binom est particulièrement utile pour calculer les intervalles de confiance des fréquences de chaque modalité d’une variable catégorielle.

Les intervalles de confiance peuvent être estimés selon 8 méthodes différentes. Pour plus d’infos, consultez la page d’aide :?binom.confint

 

3. Calculer les pourcentages et les intervalles de confiance des combinaisons de deux variables catégorielles

Il s’agit par exemple d’étudier la répartition de la variable status en fonction de la variable sex.

3.1 Les fonctions table ou xtabs pour créer une table de contingence

Les tables de contingence sont simplement des tableaux à double entrées avec le nombre d’observations correspondant à chaque croisement de modalités. Comme précédemment, il peut être utile, dans un premier temps, d’accéder à cette information.

 

3.2 Les fonctions rowSums et colSums

La fonction rowSums permet de calculer la somme des observations par ligne.

Alors que a fonction colSums permet de le faire par colonne.

3.3 La fonction prop.table pour calculer les pourceantges globaux, par ligne , ou par colonne

La fonction prop.table prend en argument une table de contingence. Par défaut, elle calcule les fréquences globales (la somme des fréquences de toutes les modalités = 1).

Employée avec l’argument 1, la fonction calcule les fréquences par ligne (la somme des fréquences de chaque lignes =1).

Enfin, avec l’argument 2, la fonction les calcule par colonne (la somme des fréquences de chaque colonne = 1).

 

3.4 La fonction binom.confint pour calculer les intervalles de confiance

On peut, par exemple, souhaiter calculer les intervalles de confiance des pourcentages d’hommes et de femmes pour chacune des modalités de la variable status. Bien que cela demande quelques manipulations la fonction binom.confint permet d’obtenir assez facilement ces intervalles.

Relativement pratique, non ?

 

J’espère que cet article vous sera utile et qu’il vous aidera à être plus à l’aise et plus efficace pour décrire vos variables catégorielles. S’il vous a plu, n’hésitez pas à le partager !

Dans un prochain post, je vous parlerai des représentations graphiques que l’on peut employer pour visualiser les variables catégorielles.

En attendant, si vous utilisez d’autres fonctions dont je n’ai pas parlé ici, indiquez les moi dans un commentaire.

 

Crédits photos : ColiN00B

 

Retrouvez ici 3 de mes articles les plus consultés:

12 conseils pour organiser efficacement vos données dans un tableur

Comment insérer des références bibliographiques dans un document Rmarkdown?

Comment retrouver sous R une couleur employée avec Excel?

Partager l'article
  •  
  •  
  •  
  •  
  •  
    5
    Partages
  • 5
  •  
  •  
  •  
  •  

2 commentaires

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonsoir Guillaume,
      Merci pour ce commentaire très pertinent. J’ai modifié le texte pour prendre en compte votre remarque.

Laisser un commentaire

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