Utilisez le package skimr en complément du package pastecs pour réaliser vos analyses statistiques descriptives

La semaine dernière j’ai publié unbillet dans lequel j’expliquais comment réaliser concrètement des analyses statistiques descriptives de variables numériques avec le logiciel R.
Dans cet article, je parlais notamment de la fonction stat.desc du package pastecs(https://CRAN.R-project.org/package=pastecs).

Depuis la publication de cet article, j’ai entrepris la réorganisation de mes 1200 et quelques notes [Evernote](https://evernote.com/intl/fr) (parce que c’était franchement le bazar), et je suis tombée sur une note concernant le package skimr qui permet justement de faire des analyses descriptives.

Si la fonction stat.desc du pcakage pastecs fait le job, à quoibon parler de skimr?

Et bien, parce que skimr a de réels atouts. Tout d’abord les paramètres de position et de dispersion des variables numériques et
catégorielles sont fournis sous la forme de deux tables (ou tableaux) distinctes, ce qui facilite grandement la lisibilité. Ensuite, et c’est
mon point préféré, skimr fournit un histogramme de la distribution de chaque variable numérique, intégrée dans la table des résultats :

analyses descriptives logiciel R

Dans l’article de cette semaine, je vais donc vous montrer comment utiliser le package skimr pour réaliser des analyses statistiques descriptives. Et pour ceux qui voudraient comparer les sorties avec celles de la fonction stat.desc de pastesc, ([qui sont
ici])((https://statistique-et-logiciel-r.com/analyses-statistiques-descriptives-de-donnees-numeriques-partie-2/)
je vais utiliser le jeu de données iris (qui je le rappelle est chargé
automatiquement à chaque session R).

1. Installation du package skimr pour réaliser des analyses statistiques descriptives

Le package skimr est encore en développement, mais il est téléchargeable sur GitHub. Pour
télécharger un package sur GitHub depuis RStudio, il est nécessaire, au préalable, d’installer et de charger le package devtools.

Ce package peut être installé à partir de l’outil d’installation de RStudio situé dans la fenêtre en bas à droite. Pour le charger,
utilisez la commande suivante :

library(devtools)

Ensuite, pour installer le package skimr, utilisez les commandes suivantes :

# installation 
devtools::install_github("hadley/pillar")
devtools::install_github("ropenscilabs/skimr")

# chargement
library(skimr)

Comme je l’ai dit précédemment, skimr est encore en phase de développement, et la représentation des distributions des variables
numériques sous la forme d’ un histogramme est problématique avec le système d’exploitation Windows. Mais pas de désespoir inutile ! Il
existe une solution ! Il faut simplement changer le format des paramètres locaux du français vers le Chinois, Japonais ou Coréen, comme
ceci :

Sys.setlocale("LC_CTYPE", "Chinese")

## [1] "Chinese (Simplified)_China.936"

Pour revenir à l’état initial, il suffira d’employer la commande Sys.setlocale("LC_CTYPE", French)

2 La fonction skim

La fonction à utiliser pour réaliser des analyses statistiques descriptives s’appelle skim (comme le nom du package mais sans le r !).

La fonction skim peut uniquement être employée sur un tableau de données appartenant à la classe des data.frame (c’est le type de classe qui est donné par défaut par le logiciel R lorsque vous importez un jeu de données). Et comme d’habitude, ce tableau de données doit être structuré selon le format dit tidy.
Pour rappel, selon ce format :

  1. les variables sont en colonne, et chaque variable mesurée doit correspondre à une seule colonne.
  2. les observations sont en lignes, et si plusieurs observations ont été faites pour une variable donnée, ces observations doivent être sur des lignes différentes.
  3. A l’intersection des lignes et des colonnes se trouvent les valeurs mesurées

Comme mentionné plus haut, la fonction skim fournit deux tableaux de paramètres distincts, l’un pour les variables numériques, l’autre pour
les variables catégorielle. Lorsque les variables analysées sont de type numériques, la fonction skim renvoit les paramètres suivants :

  • var: le nom de la variable considérée
  • missing: le nombre de valeurs manquantes
  • complete: le nombre de valeurs définies (cad non manquantes)
  • n: le nombre de total de valeurs observées (n = missing +
    complete)
  • mean: la moyenne arithmétique des valeurs
  • sd: l’écart type des valeurs
  • min: la valeur minimale des valeurs observées
  • p25: le percentile 25, autrement dit le 1er quartile des valeurs
    observées
  • median: la médiane des valeurs observées
  • p75: le percentile 75, autrement dit le 3ème quartile des valeurs
    observées
  • max: la valeur maximale des valeurs observées
  • hist: la représentation graphique de la distribution des valeurs
    observées.

Lorsque les variables sont de type catégorielle, la fonction skim
renvoit :

  • var: le nom de la variable considérée
  • missing: le nombre de valeurs manquantes
  • complete: le nombre de valeurs définies (cad non manquantes)
  • n_unique: le nombre de modalités de la variables catégorielle
  • top_count: le nombre de lignes pour chaque modalités, aindi que le
    nombre total de données manquantes (NA).
  • ordered: indique par TRUE/FALSE si la variable catégorielle est
    ordonnée ou pas.

3. Exemples d’utilisation

3.1 Sur une jeu de données complet

skim(iris)

analyses statistiques descriptives logiciel R

Les histogrammes des variables Petal.Length et Petal Width n’ont, trés clairement, pas une forme de cloche. Ceci nous inique que ces variables ne sont vraisemblablement pas distribuées selon une loi Normale. La question peut également se poser pour la variable Sepal.Length.

Ce défaut de normalité des distributions est confirmée par les sorties de la fonction stat.desc du package pastecs (https://statistique-et-logiciel-r.com/analyses-statistiques-descriptives-de-donnees-numeriques-partie-2/).
En effet les pvalues des tests de normalité des variables Petal.Length, Petal.Width, et Sepal.Length sont inférieures à 0.05, ce qui signifie un
rejet de l’hypothèse de normalité.

library(pastecs)
stat.desc(iris)

##              Sepal.Length  Sepal.Width Petal.Length  Petal.Width Species
## nbr.val      150.00000000 150.00000000  150.0000000 150.00000000      NA
## nbr.null       0.00000000   0.00000000    0.0000000   0.00000000      NA
## nbr.na         0.00000000   0.00000000    0.0000000   0.00000000      NA
## min            4.30000000   2.00000000    1.0000000   0.10000000      NA
## max            7.90000000   4.40000000    6.9000000   2.50000000      NA
## range          3.60000000   2.40000000    5.9000000   2.40000000      NA
## sum          876.50000000 458.60000000  563.7000000 179.90000000      NA
## median         5.80000000   3.00000000    4.3500000   1.30000000      NA
## mean           5.84333333   3.05733333    3.7580000   1.19933333      NA
## SE.mean        0.06761132   0.03558833    0.1441360   0.06223645      NA
## CI.mean.0.95   0.13360085   0.07032302    0.2848146   0.12298004      NA
## var            0.68569351   0.18997942    3.1162779   0.58100626      NA
## std.dev        0.82806613   0.43586628    1.7652982   0.76223767      NA
## coef.var       0.14171126   0.14256420    0.4697441   0.63555114      NA

3.2 Sur une variable spécifique d’un jeu de données

Bien que l’argument de la fonction skim doive être un tableau de données de classe data.frame, il est possible d’obtenir une analyse descriptive sur une seule variable, en employant la fonction as.data.frame(variable). Par exemple, pour obtenir les paramètres de position et de dispersion uniquement sur la variable Sepal.Length :

skim(data.frame(iris$Sepal.Length))  

analyses statistiques descriptives logiciel R

3.3 Par sous groupes

Le package skimr et donc la fonction skim sont “tidyverse compatibles”. Tidyverse est un ensemble de packages développés par Hadley Whickam, et qui partagent tous la même philosophie d’utilisation et de syntaxe. Un des grand principes du tidyverse est d’enchaîner les commandes avec un chaînon (pipe en anglais), qui en syntaxe R s’écrit: %>%.

Pour plus d’infos sur le tidyverse : https://juba.github.io/tidyverse/

Pour obtenir une analyse statistique déscriptive par groupe avec skim,
il suffit donc :

  1. de grouper les données tel qu’on le souhaite, en utilisant les commandes du package dplyr qui appartient au tidyverse
  2. d’ajouter un chainon aux commandes
  3. d’inclure une analyse descriptive via la fonction skim

Imaginons que l’on souhaite, à présent, réaliser une analyses statistique descriptive de toutes les variables du jeu de données iris, non pas pour toutes les lignes du jeu de données, mais distinctement pour chaque espèce (autrement dit, pour chaque modalité de la variable Species). Dans ce cas, il faut évidemment installer et charger le package tidyverse au préalable.

require(tidyverse)

iris %>%
  group_by(Species) %>%
  skim()

analyses statistiques descriptives logiciel R

Une nouvelle variable Species a été créée à gauche dans le tableau de sortie de la fonction skim, et des lignes ont donc été ajoutées.

4. CONCLUSION

Je trouve ce package skimr vraiment intéressant pour plusieurs raisons:

  1. parce les paramètres de position et de dispersion calculés par la fonction skim sont tous judicieux, du moins c’est ceux qui me sont
    généralement utiles

  2. parce que l’histogramme permet de se faire rapidement une idée sur la présence d’un éventuel défaut de normalité dans la distribution
    des différentes variables étudiées. Et que de mon point de vu un graph est bien plus parlant qu’une pvalue. Savoir qu’on est en
    présence d’un défaut de normalité permet notamment de choisir d’appliquer une procédure bootstrap pour estimer l’intervalle de
    confiance d’une moyenne, plut^^ot qu’une approche par une distribution de Student.

Bien que la fonction skim soit moins complète que la fonction stat.desc du package pastecs, je pense que je vais l’intégrer à mes
routines d’analyses, et donc utiliser ces deux fonctions de façon complémentaires.

Et vous, que pensez vous de ce package ? Est ce que je vous ai convaincu de son utilité ? Est ce que vous allez l’intégrer dans vos routines ?

Si cet article vous a plu, n’oubliez pas de le partager. En attendant, je vous souhaite une excellente semaine.

Crédits photos : Dan Hutcheson.

Partager l'article
  •  
  •  
  •  
  •  
  •  
    1
    Partage
  • 1
  •  
  •  

Laisser un commentaire

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