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 :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://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 packageskimr
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’appelleskim
(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 :- les variables sont en colonne, et chaque variable mesurée doit correspondre à une seule colonne.
- 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.
- A l’intersection des lignes et des colonnes se trouvent les valeurs mesurées
skim
renvoit les paramètres suivants :var
: le nom de la variable considéréemissing
: le nombre de valeurs manquantescomplete
: 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 valeurssd
: l’écart type des valeursmin
: la valeur minimale des valeurs observéesp25
: le percentile 25, autrement dit le 1er quartile des valeurs observéesmedian
: la médiane des valeurs observéesp75
: le percentile 75, autrement dit le 3ème quartile des valeurs observéesmax
: la valeur maximale des valeurs observéeshist
: la représentation graphique de la distribution des valeurs observées.
skim
renvoit :var
: le nom de la variable considéréemissing
: le nombre de valeurs manquantescomplete
: le nombre de valeurs définies (cad non manquantes)n_unique
: le nombre de modalités de la variables catégorielletop_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)Les histogrammes des variablesPetal.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 fonctionskim
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))3.3 Par sous groupes
Le packageskimr
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 :- de grouper les données tel qu’on le souhaite, en utilisant les commandes du package
dplyr
qui appartient autidyverse
- d’ajouter un chainon aux commandes
- d’inclure une analyse descriptive via la fonction
skim
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()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 packageskimr
vraiment intéressant pour plusieurs raisons:- 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 - 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.
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
Étiqueté description, tutoriel
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
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.
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