Vignette de l’article « 5 fonctionnalités de tbl_summary que j’ai découvertes récemment », consacré à la personnalisation des tableaux descriptifs avec le package gtsummary sous R.

Le package {gtsummary} est devenu au fil des années l’une des références pour la production de tableaux descriptifs et de résultats statistiques sous R. Son principal développeur, Daniel D. Sjoberg, est Senior Principal Data Scientist chez Genentech (groupe Roche).Il est biostatisticien de formation, et il a notamment travaillé au Memorial Sloan Kettering Cancer Center et au Prostate Cancer Clinical Trials Consortium. Ses domaines de recherche incluent les essais cliniques adaptatifs, la médecine de précision et la modélisation prédictive.

J’utilise régulièrement {gtsummary} et plus particulièrement tbl_summary() dans mes projets d’analyse de données et mes formations.

Pourtant, en regardant récemment la présentation Mastering Clinical Data Summaries with {gtsummary} and AI , j’ai découvert plusieurs fonctionnalités que je ne connaissais pas ou que je n’avais jamais eu l’occasion d’utiliser.

Dans cet article, je vous propose de découvrir cinq fonctionnalités de {gtsummary}qui pourraient vous être utiles pour personnaliser vos tableaux et gagner du temps dans vos analyses.

Par défaut, les variables quantitatives sont généralement résumées sur une seule ligne. Avec type = “continuous2”, il est possible d’afficher plusieurs statistiques sur des lignes séparées :

library(tidyverse)
library(gtsummary)

iris |>
  tbl_summary(
    by = Species,
    type = Sepal.Length ~ "continuous2",
    statistic = Sepal.Length ~ c(
      "{mean} ({sd})",
      "{min}, {max}"
    )
  )
Characteristicsetosa
N = 501
versicolor
N = 501
virginica
N = 501
Sepal.Length
    Mean (SD)5.01 (0.35)5.94 (0.52)6.59 (0.64)
    Min, Max4.30, 5.804.90, 7.004.90, 7.90
Sepal.Width3.40 (3.20, 3.70)2.80 (2.50, 3.00)3.00 (2.80, 3.20)
Petal.Length1.50 (1.40, 1.60)4.35 (4.00, 4.60)5.55 (5.10, 5.90)
Petal.Width0.20 (0.20, 0.30)1.30 (1.20, 1.50)2.00 (1.80, 2.30)
1 Median (Q1, Q3)

On obtient alors : une ligne avec la moyenne et l’écart-type ; une seconde ligne avec le minimum et le maximum.

Le package {gtsummary} s’intègre parfaitement avec le package {labelled}. Lorsqu’un label est associé à une variable, celui-ci est automatiquement utilisé dans les tableaux.

library(labelled)

iris2 <- iris

# creation d'une étiquette
var_label(iris2$Species) <- "Espèce observée"
iris2 |>
  tbl_summary(
    include = Species
  )
CharacteristicN = 1501
Espèce observée
    setosa50 (33%)
    versicolor50 (33%)
    virginica50 (33%)
1 n (%)

On peut spécifier une précision différente pour certaines statistiques grâce à l’argument digits.

Par exemple :

library(gtsummary)

iris |>
  tbl_summary(
    statistic = all_continuous() ~ "{mean} ({sd})",
    digits = all_continuous() ~ c(2, 1)
  )
CharacteristicN = 1501
Sepal.Length5.84 (0.8)
Sepal.Width3.06 (0.4)
Petal.Length3.76 (1.8)
Petal.Width1.20 (0.8)
Species
    setosa50 (33%)
    versicolor50 (33%)
    virginica50 (33%)
1 Mean (SD); n (%)

Ici, c(2, 1) correspond à l’ordre des statistiques dans “{mean} ({sd})” :

Lorsque plusieurs tests statistiques sont réalisés simultanément, le risque d’obtenir au moins un résultat significatif par hasard augmente. Il peut alors être pertinent d’ajuster les p-values pour tenir compte de cette multiplicité des comparaisons. La fonction add_q() permet d’ajouter automatiquement une colonne de p-values ajustées à la suite d’un add_p().

trial |>
  tbl_summary(
    by = trt,
    include = c(age, marker, grade, stage, response),
    missing = "no"
  ) |>
  add_p() |>
  add_q(method = "BH")
CharacteristicDrug A
N = 981
Drug B
N = 1021
p-value2q-value3
Age46 (37, 60)48 (39, 56)0.70.9
Marker Level (ng/mL)0.84 (0.23, 1.60)0.52 (0.18, 1.21)0.0850.4
Grade0.90.9
    I35 (36%)33 (32%)
    II32 (33%)36 (35%)
    III31 (32%)33 (32%)
T Stage0.90.9
    T128 (29%)25 (25%)
    T225 (26%)29 (28%)
    T322 (22%)21 (21%)
    T423 (23%)27 (26%)
Tumor Response28 (29%)33 (34%)0.50.9
1 Median (Q1, Q3); n (%)
2 Wilcoxon rank sum test; Pearson’s Chi-squared test
3 Benjamini & Hochberg correction for multiple testing

Dans cet exemple, les p-values sont ajustées selon la méthode de Benjamini-Hochberg (“BH”), qui vise à contrôler le taux de fausses découvertes (False Discovery Rate). Attention toutefois : la correction ne s’applique pas à chaque test individuellement. Elle est calculée à partir de l’ensemble des p-values présentes dans le tableau. Ainsi, une p-value de 0,05 peut devenir non significative après ajustement si de nombreuses comparaisons sont réalisées simultanément

Les fonctions de personnalisation permettent d’adapter facilement l’apparence des tableaux.

iris |>
  tbl_summary(
    by = Species
  ) |>
  modify_header(
    label ~ "Variable"
  )
Variablesetosa
N = 501
versicolor
N = 501
virginica
N = 501
Sepal.Length5.00 (4.80, 5.20)5.90 (5.60, 6.30)6.50 (6.20, 6.90)
Sepal.Width3.40 (3.20, 3.70)2.80 (2.50, 3.00)3.00 (2.80, 3.20)
Petal.Length1.50 (1.40, 1.60)4.35 (4.00, 4.60)5.55 (5.10, 5.90)
Petal.Width0.20 (0.20, 0.30)1.30 (1.20, 1.50)2.00 (1.80, 2.30)
1 Median (Q1, Q3)

Les en-têtes acceptent également la syntaxe Markdown. Par exemple :

library(gtsummary)

iris |>
  tbl_summary(
    by = Species
  ) |>
  modify_header(
    label ~ "**Variable**",
    stat_1 ~ "**Espèce Setosa**<br>N = {n}",
    stat_2 ~ "**Espèce Versicolor**<br>N = {n}",
    stat_3 ~ "**Espèce Virginica**<br>N = {n}"
  )
VariableEspèce Setosa
N = 501
Espèce Versicolor
N = 501
Espèce Virginica
N = 501
Sepal.Length5.00 (4.80, 5.20)5.90 (5.60, 6.30)6.50 (6.20, 6.90)
Sepal.Width3.40 (3.20, 3.70)2.80 (2.50, 3.00)3.00 (2.80, 3.20)
Petal.Length1.50 (1.40, 1.60)4.35 (4.00, 4.60)5.55 (5.10, 5.90)
Petal.Width0.20 (0.20, 0.30)1.30 (1.20, 1.50)2.00 (1.80, 2.30)
1 Median (Q1, Q3)

Les doubles astérisques permettent d’afficher le texte en gras dans le tableau final.

Le package {gtsummary} est souvent associé à la fonction tbl_summary(), mais il offre en réalité bien davantage. Parmi les fonctions les plus utilisées, on peut citer tbl_regression(), qui permet de présenter élégamment les résultats de modèles statistiques (régressions linéaires, logistiques, modèles de Cox, etc.), ou encore tbl_uvregression(), très pratique pour réaliser rapidement des analyses univariées.

La présentation Mastering Clinical Data Summaries with {gtsummary} and AI m’a également permis de découvrir des fonctionnalités que je n’avais encore jamais utilisées, notamment les fonctions tbl_hierarchical() et tbl_hierarchical_count(). Ces dernières sont particulièrement adaptées à la production de tableaux hiérarchiques, par exemple pour présenter des événements indésirables en recherche clinique en tenant compte de leur structure (classe de système d’organes, terme préféré, niveau de sévérité, etc.).

Si vous souhaitez aller plus loin, je vous recommande la présentation qui a inspiré cet article : Mastering Clinical Data Summaries with {gtsummary} and AI 

Vous trouverez également de nombreuses ressources, exemples et tutoriels sur le site officiel du package

bien-demarrer-r-rstudio

CAMPUS DELLADATA

Apprendre R à votre rythme

Je propose désormais une formation en ligne pour démarrer avec R et RStudio, pensée pour les profils scientifiques (recherche médicale, biologie, agro, environnement…). D’autres modules arrivent prochainement.


Portrait de Claire Della Vedova, consultante et formatrice en biostatistique et langage R

Je suis Claire Della-Vedova, consultante en biostatistique, méthodologie clinique et expertise R.

J’accompagne les fabricants de dispositifs médicaux et les équipes scientifiques des sciences du vivant dans leurs projets d’évaluation clinique, d’analyse statistique et d’analyse de données sous R.

🎓 Formations professionnelles R et biostatistiques 

🤝 Prestations et accompagnement sur mesure 

📅 Discuter d’un accompagnement ou d’une prestation sur mesure  

Laisser un commentaire

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

Fonctions statistiques R

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.