Voici le résumé de mes découvertes dans les domaines des biostatistiques et de l’utilisation de R, entre juillet et septembre 2022.
Pour filtrer des données en fonction de plusieurs modalités d’une variable catégorielle (factor) j’emploie l’opérateur `%in%` ; comme ceci, par exemple, pour filtrer les fleurs des espèces setosa et virginica
library(tidyverse)
seto_virgi <- iris %>%
filter(Species %in% c("setosa", "virginica"))
Eh bien, il est possible de définir l’opérateur inverse %nin%; c’est-à-dire un opérateur qui permet de filtrer ce qui n’est pas ce qui est spécifié ensuite. Par exemple, pour filtrer les fleurs qui ne sont ni des setosa, ni des virginica :
# definition de l'operateur
`%nin%` = Negate(`%in%`)
# utilisation de l'opérateur
versi <- iris %>%
filter(Species %nin% c("setosa", "virginica"))
Merci à Ludovic Degorge pour cette astuce !
Et si vous souhaitez apprendre à manipuler facilement et efficacement vos tableaux de données, j’animerai une formation “Manipulations de données avec R et les packages dplyr, tidyr, et lubridate ” en distanciel vendredi 21 octobre 2022. Le tarif est de 450 euros. Cliquez sur ce lien pour plus d’information (programme et bulletin d’inscription)
J’utilise régulièrement la fonction View()
pour visualiser mes données dans le tableur de R Studio.
Eh bien, on peut aussi utiliser la fonction `View()` sur une fonction, pour voir son code dans un fichier texte qui s’ouvre dans la fenêtre en haut à gauche de RStudio (à côté des scripts). J’ai appris cela grâce à Romain François.
library(funModeling)
View(funModeling::discretize_df)
Remarque : Vous pouvez aussi sélectionner (avec la souris) une fonction sur votre script, puis appuyer sur F2.
Très récemment, j’ai découvert l’article “The case for variable labels in R ” du blog PIPING HOT DATA, qui traite de la gestion des labels (étiquettes) des variables dans R. Les labels sont des étiquettes de données, que l’on peut ajouter au nom des variables pour contenir plus d’information. Je sais que c’est un sujet qui intéresse beaucoup celles et ceux qui travaillent ou qui ont travaillé avec SAS et SPSS.
En résumé, on peut assez facilement ajouter des labels aux variables en employant le package labelled
.
library(labelled)
iris_labelled <- iris %>%
set_variable_labels(
Sepal.Length = "Longueur du sépale en cm",
Sepal.Width = "Largeur du sépale en cm",
Petal.Length = "Longueur du pétale en cm",
Petal.Width = "Largeur du pétale en cm",
Species = "Espèce de l'iris")
View(iris_labelled)
Ces labels sont stockés sous la forme d’atributs :
str(iris_labelled)
## 'data.frame': 150 obs. of 5 variables:
## $ Sepal.Length: num 5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
## ..- attr(*, "label")= chr "Longueur du sépale en cm"
## $ Sepal.Width : num 3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
## ..- attr(*, "label")= chr "Largeur du sépale en cm"
## $ Petal.Length: num 1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
## ..- attr(*, "label")= chr "Longueur du pétale en cm"
## $ Petal.Width : num 0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
## ..- attr(*, "label")= chr "Largeur du pétale en cm"
## $ Species : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...
## ..- attr(*, "label")= chr "Espèce de l'iris"
Pour afficher la correspondance entre les noms des variables et les labels, nous pouvons employer la fonction look_for()
, comme ceci (Merci Benoit Touzot) :
iris_labelled %>%
look_for()
## pos variable label col_type values
## 1 Sepal.Length Longueur du sépale en cm dbl
## 2 Sepal.Width Largeur du sépale en cm dbl
## 3 Petal.Length Longueur du pétale en cm dbl
## 4 Petal.Width Largeur du pétale en cm dbl
## 5 Species Espèce de l'iris fct setosa
## versicolor
## virginica
Pour en savoir plus sur
je vous recommande de lire l’article “The case for variable labels in R ” du blog PIPING HOT DATA.
Vous trouverez également des informations dans la vignette du package sjlabelled
.
Quand on essaye de faire des boxplots groupés, tout en affichant les points, on peut employer les fonctions geom_boxplot(),
et geom_jitter()
, mais le résultat n’est pas très satisfaisant :
library(funModeling) # pour utiliser les data heart_disease
funModeling::heart_disease %>%
ggplot(aes(x=has_heart_disease,y=max_heart_rate, color=gender)) +
geom_boxplot(outlier.shape=NA)+
geom_jitter(width=0.15)
Pour obtenir un meilleur rendu, il faut utiliser la fonction geom_point()
, avec l’argument position = position_jitterdodge()
, comme ceci :
funModeling::heart_disease %>%
ggplot(aes(x=has_heart_disease,y=max_heart_rate, color=gender)) +
geom_boxplot(outlier.shape=NA)+
geom_point(position=position_jitterdodge())
Vous trouverez plus d’information sur le post “How To Make Grouped Boxplot with jittered data points ggplot2 ?”
Si vous souhaitez présenter ensemble votre table de régression et la visualisation correspondante, vous devez :
tableGrob()
du package gridExtra
,wrap_plots()
du package patchwork
.
Voici un exemple :
library(funModeling)
# plot
p <- funModeling::heart_disease %>%
ggplot(aes(x=age, y=max_heart_rate))+
geom_smooth(method="lm")
# table des résultats de la régression linéaire
library(broom)
df <- broom::tidy(lm(max_heart_rate~age,data= heart_disease )) %>%
mutate_if(is.numeric, signif, 3)
library(patchwork)
library(gridExtra)
patchwork::wrap_plots(tableGrob(df), p, nrow=2)
Cette astuce a été publiée par Indrajeet Patil.
Jean-Luc, un lecteur du blog, m’a fait découvrir ce cours de François Husson sur la planification expérimentale. Je l’ai seulement parcouru, mais je ne doute pas qu’il soit excellent. Vous trouverez des diaporamas, des vidéos et des exercices (avec corrigés !!).
Il est fréquent de lire qu’un déséquilibre de classes (déséquilibre entre la fréquence des événements et des non-évènements) est un problème pour le développement de modèle de prédiction.
Dans la publication “The harm of class imbalance corrections for risk prediction models: illustration and simulation using logistic regression“, Maarten van Smeden et ces co-auteurs montrent que cela n’est pas le cas, au moins pour la famille des régressions logistiquse, et qu’utiliser une méthode de correction est, au contraire, plus préjudiciable !
Superpower est un package, accompagné d’un livre bookdown, dédiés au calcul de puissance, par simulations.
C’est un projet porté, entre autres, par Daniël Lakens et Guy Pochilo, dont j’apprécie beaucoup le travail de vulgarisation des approches statistiques. D’ailleurs, je vous recommande vraiment de lire le 1er chapitre, d’introduction aux analyses de puissance, c’est vraiment hyper pédagogique !
Au-delà du premier chapitre, le livre contient beaucoup d’exemples, et de nombreuses comparaisons avec l’outil G*Power.
Je n’ai pas encore utilisé le package, mais il me semble intéressant, car il propose des calculs de puissance / nombre de sujets nécessaire pour l’ANOVA à un facteur, l’ANOVA sur mesures répétées, l’ANOVA mixte (un facteur within, un facteur between).
C’est une publication très courte, qui va à l’essentiel, et qui contient de très bonnes références pour chaque problème listé. C’est encore de Maarten van Smeden et c’est encore très très bon !
A Very Short List of Common Pitfalls in Research Design, Data Analysis, and Reporting
C’est tout pour cette fois – ci. Si vous rencontrez des news particulièrement intéressante, n’hésitez pas à me les envoyer par mail (claire@delladata.fr)
J’ai déjà quelques sujets en stock pour la prochaine fois, par exemple au sujet de Quarto (la nouvelle génération de Rmarkdown), et une BD autour des stats !
Si vous souhaitez soutenir mon travail, vous pouvez faire un don libre sur la page tipeee du blog :
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.
6 réponses
Très bon travail à vous. Étant Biostatisticien, vos publications me donnent évidemment un plus.
Les contrôles publiées sont trés interressante, portant, je espere recevoir toujours.
Car je veux amelhorer mes connaissance dans le logiciel R.
Je aimerai recevoir ce fichier.
Bonjour fait des cartes j’aime la cartographie sous R mais je n’y connais pas assez
Bonjour Claire,
comme à votre habitude, un post très intéressant.
j’ajouterais simplement la ligne “iris_labelled %>% look_for()”
qui permet dans le cas d’étude de pouvoir imprimer la correspondance entre noms de variables et labels.
bien à vous,
Benoit
Bonjour Benoit,
Merci pour l’astuce !
merci beaucoup Claire