L'objectif de ce package est de regrouper des fonctions et méthodes qui permettent de décrire un jeu de données.
Ce package s'appuit :
base::
de R pour la partie statistique.ggplot2::
pour la partie graphique.rmarkdown::
pour le reporting.Pour installer le package, il faut avoir au prélable installé devtools
.
Une fois fait, le pakage s'installe grace à la fonction devtools::install_github()
.
# install.packages("devtools") devtools::install_github("rgriffier/statsBordeaux")
Le package n'étant pas hébergé sur le CRAN, la mise à jour du package ne peut pas se faire à partir de la fonction classique update.packages()
. Pour le mettre à jour, vous devez utiliser la fonction statsBordeaux::updateStatsBordeaux()
.
statsBordeaux::updateStatsBordeaux()
library(statsBordeaux, warn.conflicts = FALSE) library(dplyr) ## tableaux de sortie en français options(lang.value = 'FR')
Ce tutoriel se base sur le dataset mtcars
inclu dans R.
Dans ce jeu de données, les variables qualitatives (vs
et am
) sont codées en 0/1.
## chargement du jeu de donnée data(mtcars) ## affichage de la structure du data.frame str(mtcars)
Pour les variables qualitatives, on charge un data.frame de 3 colonnes :
- Variable
: nom de la variable, tel que renseigné dans le dataset.
- Modality
: nombre représentant la modalité, tel que renseigné dans le dataset.
- Label
: label de la modalité, tel que souhaité pour le rendu des résultats.
## création du data.frame contenant les labels des différentes modalitées des variables qualitatives var_QL <- data.frame(Variable = c("vs", "vs", "am", "am"), Modality = c(0, 1, 0, 1), Label = c("V-shaped", "Straight", "Automatic", "Manual")) var_QL
On vérifie que le data.frame du jeux de données ne contient que des nombre grace à la fonction statsBordeaux::checkNotDigitInDataframe()
.
Dans le cas où la fonction statsBordeaux::checkNotDigitInDataframe()
renvoie FALSE
, il est possible de récupérer un data.frame contenant la position des cellules contenant des éléments non-numériques en ajoutant le paramètre returnError = TRUE
. La position de ces cellules est donnée au format Excel (ex : A2).
## vérification que le jeu de donnée ne contient que des chiffres statsBordeaux::checkNotDigitInDataframe(data = mtcars)
Comme le data.frame d'entrée ne contient que des nombres, il faut labéliser les modalités des variables qualitatives.
On effectue cette labélisation grâce à la fonction statsBordeaux::setLabelToFactorLevels()
à partir du data.frame labels
créé précédemment.
Cette fonction gère à la fois :
labels
en tant que factor
.La fonction vérifie que les variables du fichier des labels sont bien dans le data.frame des données. Le cas échant, elle retourne une erreur identifiant le ou les variables présentes dans le data.frame des labels mais absente du data.frame des données.
## association à chaque modalité des variables qualitatives du label correspondant et conversion de ces variables en factor labelledData <- statsBordeaux::setLabelToFactorLevels(mtcars, var_QL) head(labelledData)
Il est possible d'associer à chaque variable du data.frame contenant le jeu de donnée un label (afin d'améliorer la sortie des résultats) grace à la fonction statsBordeaux::setLabelToVariable()
.
Le label des variables est contenu dans un attribut var_label
.
## création du data.frame contenant le label de chaques variables var_label <- data.frame(Variable = c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), Label = c("Miles/(US) gallon", "Number of cylinders", "Displacement (cu.in.)", "Gross horsepower ", "Rear axle ratio", "Weight (1000 lbs)", "1/4 mile time", "Engine", "Transmission", "Number of forward gears", "Number of carburetors")) ## labélisation des variables du data.frame labelledData <- statsBordeaux::setLabelToVariable(data = labelledData, varLabel = var_label) ## fonction pour récupérer les labels d'un data.frame labellisé statsBordeaux::getVarLabel(data = labelledData)
Il est également possible de labéliser une variable avec la fonction statsBordeaux::addLabelToVariable()
.
## labélisation manuelle d'une variable créé avec dplyr labelledData <- labelledData %>% dplyr::mutate(wt_kg = wt/0.4536) %>% statsBordeaux::addLabelToVariable(wt_kg = 'Weight (1000 Kg)') ## fonction pour récupérer les labels d'un data.frame labellisé statsBordeaux::getVarLabel(data = labelledData)
On vérifie la structure du data.frame contenant le dataset.
Toutes les variables à analyser doivent être de classe numeric
(integer
ou double
) ou de classe factor
.
## description des méta-données list_variableFormat <- statsBordeaux::describeMetadata(data = labelledData) list_variableFormat
%>%
La fonction statsBordeaux::describeDataFrame()
permet de décrire les variables qualitatives et quantitatives d'un data.frame. Elle peut s'utiliser avec les pipes %>%
(package dplyr
).
# chargement de dplyr library(dplyr) # statistique descriptive sur l'ensemble du data.frame description <- labelledData %>% statsBordeaux::describeDataFrame() description[c(1:5, 36:39), ]
De la même manière, il est possible de réaliser une description graphique des données avec la fonction statsBordeaux::getGraphicalDescription()
# statistique graphique sur l'ensemble du data.frame graphicDescription <- labelledData %>% statsBordeaux::getGraphicalDescription() ## Variable quantitative : BOX PLOT graphicDescription[[1]] ## Variable qualitative : BAR PLOT graphicDescription[[8]]
On créé un tableau de sortie vierge à partir de la fonction statsBordeaux::createOutput()
. C'est ce dernier qui va contenir la description de nos variables.
On réalise les statistiques descriptives des données avec les fonctions statsBordeaux::statsQT()
et statsBordeaux::statsQL()
(en fonction de la nature quantitative ou qualitative de la variable à décrire).
## création du tableau de sortie vierge description <- statsBordeaux::createOutput() ## boucle qui va traiter chaque colonne du data.frame les unes après les autres for(i in 1:ncol(labelledData)){ # cas où la colonne en cours est de type quantitative if(is.numeric(labelledData[, i])){ description <- statsBordeaux::statsQT(output = description, data = labelledData, variable = colnames(labelledData)[i]) } # cas où la colonne en cours est de type qualitative else if(is.factor(labelledData[, i])){ description <- statsBordeaux::statsQL(output = description, data = labelledData, variable = colnames(labelledData)[i]) } # autre cas non pris en charge else { print(paste0("Variable '", colnames(labelledData[i]), "' non décrite (", class(labelledData[, i]), ")")) } } head(description, n = 5)
%>%
La fonction statsBordeaux::describeDataFrame()
permet également de réaliser les statistiques en fonction d'unevariable qualitative de groupe. Il suffit pour celà de renseigner le paramètre group
.
On peut dans ce cas rajouter le paramètre all = TRUE
afin afficher en plus une description globale des variables.
# statistique comparative sur l'ensemble du data.frame comp <- labelledData %>% statsBordeaux::describeDataFrame(group = "vs", all = TRUE) comp[c(1:5, 36:39), ]
De la même manière, il est possible de réaliser une description graphique des données en fonction d'une variable qualitative de groupe en rajoutant le paramètre group
à la fonction statsBordeaux::getGraphicalDescription()
# statistique graphique sur l'ensemble du data.frame graphicDescription <- labelledData %>% statsBordeaux::getGraphicalDescription(group = "vs") ## Variable quantitative : BOX PLOT graphicDescription[[1]] ## Variable qualitative : BAR PLOT graphicDescription[[9]]
On réalise les statistiques descriptives des données en fonction d'une variable qualitative de comparaison en rajoutant un paramètre group
aux fonction statsBordeaux::statsQL()
et statsBordeaux::statsQT()
.
On peut dans ce cas rajouter le paramètre all = TRUE
afin afficher une description globale des variables.
## création du tableau de sortie vierge comparaison <- statsBordeaux::createOutput() ## on défini la variable de groupe group <- "vs" ## boucle qui va traiter chaque colonne du data.frame les unes après les autres for(i in 1:ncol(labelledData)){ # on ne réalise pas la comparaison de la variable group avec elle-même if(colnames(labelledData)[i] != group){ # cas où la colonne en cours est de type quantitative if(is.numeric(labelledData[, i])){ comparaison <- statsBordeaux::statsQT(output = comparaison, data = labelledData, variable = colnames(labelledData)[i], group = group, all = TRUE) } # cas où la colonne en cours est de type qualitative else if(is.factor(labelledData[, i])){ comparaison <- statsBordeaux::statsQL(output = comparaison, data = labelledData, variable = colnames(labelledData)[i], group = group, all = TRUE) } # autre cas non pris en charge else { print(paste0("Variable '", colnames(labelledData[i]), "' non décrite (", class(labelledData[, i]), ")")) } } } head(comparaison, n = 5)
%>%
On réalise les statistiques comparatives des données en fonction d'une variable qualitative de comparaison en associant au paramètre group
le paramètre p_value = TRUE
dans la fonction statsBordeaux::describeDataFrame()
.
# statistique comparative sur l'ensemble du data.frame comp <- labelledData %>% statsBordeaux::describeDataFrame(group = "vs", p_value = TRUE) comp[c(1:5, 36:39), ]
On réalise les statistiques comparatives des données en fonction d'une variable qualitative de comparaison en associant au paramètre group
le paramètre p_value = TRUE
dans les fonctions statsBordeaux::statsQL()
et statsBordeaux::statsQT()
. Le test réalisé est choisi en fonction des conditions d'application des différents tests.
## création du tableau de sortie vierge statsComparatives <- statsBordeaux::createOutput() ## on défini la variable de groupe group <- "vs" ## boucle qui va traiter chaque colonne du data.frame les unes après les autres for(i in 1:ncol(labelledData)){ # on ne réalise pas la comparaison de la variable group avec elle-même if(colnames(labelledData)[i] != group){ # cas où la colonne en cours est de type quantitative if(is.numeric(labelledData[, i])){ statsComparatives <- statsBordeaux::statsQT(output = statsComparatives, data = labelledData, variable = colnames(labelledData)[i], group = group, p_value = TRUE) } # cas où la colonne en cours est de type qualitative else if(is.factor(labelledData[, i])){ statsComparatives <- statsBordeaux::statsQL(output = statsComparatives, data = labelledData, variable = colnames(labelledData)[i], group = group, p_value = TRUE) } # autre cas non pris en charge else { paste0(colnames(labelledData)[i], " n'a pas été décrite du fait de son type (", class(labelledData[, i]), ")") } } } head(statsComparatives, n = 5)
rmarkdown
Dans un projet R Markdown Knit to HTML
, vous pouvez ajouter facilement un tableau de donnée avec la fonction statsBordeaux::addKable()
. Cette dernière génère un tableau HTML. La gestion des titre et des numéro de tableau se fait au niveau du document et non dans la fonction statsBordeaux::addKable()
.
La génération de .pdf en LaTeX n'est actuellement pas prise en charge.
statsBordeaux::addKable(description)
Il est souvent interessant de s'interesser à la distribution des variables quantitatives afin de connaitre la meilleure façon de les décrire (utilisation de la moyenne ou médiane par exemple) et les test statistiques à appliquer.
La distribution que l'on va le plus souvent vouloir évaluer est la distribution normale.
La fonction statsBordeaux::checkNormality()
permet d'évaluer la normalité d'une variable de manière graphique et à l'aide de deux test statistiques (Kolmogorov-Smirnov ou Shapiro-Wilk).
## évaluation graphique de la distribution de la variable 'mpg' statsBordeaux::checkNormality(data = labelledData, variable = "mpg") ## évaluation graphique et avec un test de Shapiro-Wilk de la distribution de la variable 'mpg' statsBordeaux::checkNormality(data = labelledData, variable = "mpg", p_value = TRUE, method = 'Shapiro') ## évaluation graphique et avec un test de Shapiro-Wilk de la distribution de la variable 'mpg' dans chacun des sous-groupe de 'vs' statsBordeaux::checkNormality(data = labelledData, variable = "mpg", group = "vs", p_value = TRUE, method = 'Shapiro')
La gestion des 'non-applicables' fait intervenir les fonctions statsBordeaux::setNonApp()
et statsBordeaux::manageNotApplicable()
:
statsBordeaux::setNonApp()
permet de taguer les données non applicables en fonction d'une condition.statsBordeaux::manageNotApplicable()
permet de gérer les tags générés à l'étape précédente.df
, un data.frame, contenant le jeu de donnée à décrire.notApplicableChar
, un vecteur de longueur 1 contenant la façon dont sont représentés les 'non-applicables' dans les données.TRUE
signifie que la ligne en cours, pour la variable considérée, doit être comptabilisée.FALSE
signifie que la ligne en cours, pour la variable considérée, ne doit pas être comptabilitée ('non-applicable').data(mtcars) var_QL <- data.frame(Variable = c("vs", "vs", "am", "am"), Modality = c(0, 1, 0, 1), Label = c("V-shaped", "Straight", "Automatic", "Manual")) var_label <- data.frame(Variable = c("mpg", "cyl", "disp", "hp", "drat", "wt", "qsec", "vs", "am", "gear", "carb"), Label = c("Miles/(US) gallon", "Number of cylinders", "Displacement (cu.in.)", "Gross horsepower ", "Rear axle ratio", "Weight (1000 lbs)", "1/4 mile time", "Engine", "Transmission", "Number of forward gears", "Number of carburetors")) ## on créé une colonne qui contient le nombre de vitesse dans le cas d'une transmission manuelle ## en cas de transmission automatique, une donée manquante est attendue, on tague alors la données comme 'NonApp' mtcars <- mtcars %>% dplyr::mutate( nSpeed = c(5, 6, 5, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 6, 6, 6, NA, NA, NA, NA, NA, 5, NA, 6, 5, 6, 6, 5) ) %>% setNonApp('nSpeed', condition = function(.){.$am == 0}) ## on utilise la fonction manageNotApplicable() pour gérer les non-applicable, ## représentés ici par des 'NonApp' applicable <- statsBordeaux::manageNotApplicable(data = mtcars) ## on récupère le data.frame sans les 'non-applicables' mtcars <- applicable[[1]] ## on récupère la liste de vecteurs logiques contenant les lignes qui doivent être analysées. applicable <- applicable[[2]] ## labellisation automatique des variable et des modalités des variables qualitatives labelledData <- statsBordeaux::setLabelToFactorLevels(data = mtcars, var_QL) labelledData <- statsBordeaux::setLabelToVariable(data = labelledData, varLabel = var_label) # labellisation manuelle de la variable créée labelledData <- labelledData %>% dplyr::mutate(nSpeed = dplyr::recode_factor(nSpeed, "5" = "5 vitesses", "6" = "6 vitesses")) %>% statsBordeaux::addLabelToVariable(nSpeed = 'Nombre de vitesses (boite manuelle') ##---------------- descriptionNonAvailable <- labelledData %>% statsBordeaux::describeDataFrame(applicable = applicable) descriptionNonAvailable[c(40:44, 55:57), ]
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.