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 RDans 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://delladata.fr/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 à présent disponible sur CRAN. Il suffit donc de l’installer depuis l’outil d’importation des packages, qui se situe dans la fenêtre en bas à droite de RStudio, puis d’utiliser la commande suivante :library(skimr)

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 RLes 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://delladata.fr/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: %&gt;%.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 RUne 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, ou vous a été utile, et si vous le souhaitez, vous pouvez soutenir ce blog en faisant un don sur sa page Tipeee 🙏👉 Cliquez ici pour soutenir le blog Statistiques et Logiciel RCrédits photos : Dan Hutcheson.

Poursuivez votre lecture

4 réponses

  1. Bonjour,
    Merci encore pour vos fiches synthétiques qui me permettent de découvrir de nouveaux package.
    Je cherchais un package me permettant de décrire facilement un data frame globalement, puis selon un facteur binaire (comme “H”/”F”).
    La fonction skim me retourne seulement le nombre de lignes et colonnes, le nb de var numériques ou de factor. Peut être parce que j’ai des données manquantes sur de nombreuses lignes. Avec Hmisc j’obtiens des résultats plus utiles (mais moins agréables).
    Merci encore de partager vos découvertes

  2. Salut!
    j’ai beaucoup apprécié ce package. Il nous donne une vue large notamment sur la description de nos variables. Sinon le package “Hmisc” aussi n’est pas mal, je l’utilise bien aussi.
    Merci encore pour le partage.

    1. Bonjour Kevin,
      Merci pour votre commentaire. J’utilise aussi régulièrement le package Hmisc, notamment la fonction describe(). J’apprécie l’affichage des 5 plus faibles et 5 plus fortes valeurs.
      Bonne continuation

Laisser un commentaire

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

Bonjour !

vous venez souvent ?

Identifiez-vous pour avoir accès à toutes les fontionnalités !

Aide mémoire off'R ;)

Enregistrez vous pour recevoir gratuitement mes fiches “aide mémoire” (ou cheat sheets) qui vous permettront de réaliser facilement les principales analyses biostatistiques avec le logiciel R et pour être informés des mises à jour du site.