添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • Premier travail avec des données
  • Extensions (installation, mise à jour)
  • Introduction au tidyverse
  • Vecteurs, indexation et assignation
  • Listes et Tableaux de données
  • Facteurs et vecteurs labellisés
  • Organiser ses fichiers
  • Import de données
  • Où trouver de l'aide ?
  • Recodage de variables
  • Manipuler les données avec dplyr
  • Manipulations avancées avec data.table
  • Sous-ensembles
  • Fusion de tables
  • Gestion des dates
  • Fonctions à fenêtre
  • Manipuler du texte avec stringr
  • Réorganiser ses données avec tidyr
  • Statistique univariée
  • Statistique bivariée
  • Introduction à ggplot2 , la grammaire des graphiques
  • Graphiques univariés et bivariés avec ggplot2
  • Données pondérées
  • Intervalles de confiance
  • Comparaisons (moyennes et proportions)
  • Définir un plan d'échantillonnage complexe avec survey
  • Régression linéaire
  • Régression logistique binaire, multinomiale et ordinale
  • Analyse des correspondances multiples (ACM)
  • Classification ascendante hiérarchique (CAH)
  • Tableaux statistiques avancés avec gtsummary
  • Effets d'interaction dans un modèle
  • Multicolinéarité dans la régression
  • Quel type de modèles choisir ?
  • Analyse de survie
  • Analyse de séquences
  • Trajectoires de soins : un exemple de données longitudinales
  • Analyse de réseaux
  • Analyse spatiale
  • Analyse textuelle
  • Remarques sur les types de variables et les sélecteurs associés
  • Remarques sur la syntaxe des options
  • Thèmes
  • Statistiques descriptives avec tbl_summary()
  • Sélection des variables (include)
  • En fonction d’une seconde variable (by, add_overall)
  • Statistiques affichées (statistic, percent, sort)
  • Affichage du nom des statistiques (add_stat_label)
  • Forcer le type de variable (type, value)
  • Afficher des statistiques sur plusieurs lignes (continuous2)
  • Mise en forme des statistiques (digits)
  • Données manquantes (missing, missing_text)
  • Étiquettes des variables (label)
  • Afficher les effectifs (add_n)
  • Mise en forme du tableau (bold_labels, italicize_levels)
  • Modifer en-têtes et notes (modify_header, modify_spanning_header, modify_footnote)
  • Tests de comparaisons (add_p, separate_p_footnotes)
  • Intervalles de confiance (add_ci)
  • Différences entre groupes (add_difference)
  • Tableau croisé avec tbl_cross()
  • Données pondérées et tbl_svysummary()
  • Statistiques personnalisées avec tbl_continous() et tbl_custom_summary()
  • tbl_continuous()
  • tbl_custom_summary()
  • add_stat()
  • Résultats d’un modèle avec tbl_regression()
  • Afficher seulement certains coefficients (include)
  • Étiquettes des variables (label)
  • Exponentiation des coefficients (exponentiate)
  • Changer l’intitulé des colonnes
  • Afficher des étoiles de signification (add_significance_stars)
  • Variables dichotomiques sur une ligne (show_single_row)
  • Afficher l’intercept (intercept)
  • Mise en forme des coefficients (estimate_fun, pvalue_fun)
  • Afficher les coefficients pour les références (add_estimate_to_reference_rows)
  • P-valeurs globales (add_global_p)
  • Ajouter les VIF (add_vif)
  • Représenter graphiquement le modèle (plot)
  • Afficher des statistiques globales du modèle (add_glance_table, add_glance_source_note)
  • Combiner des tableaux
  • tbl_stack() & tbl_merge()
  • tbl_strata()
  • tbl_split()
  • Régressions univariées multiples avec tbl_uvregression()
  • Tables de survie avec tbl_survfit()
  • Exporter un tableau
  • Plus d’options avec bstfun
  • tbl_likert()
  • Ajouter un graphique de tendances (add_sparkline)
  • Représentation graphique des coefficients dans le tableau (add_inline_forest_plot)
  • Forest plot (as_forest_plot)
  • Le package gtsummary est, entre autres, abordé sur guide-R dans les chapitres suivants : Statistique univariée & Intervalles de confiance , Statistique bivariée & Tests de comparaison , Échelles de Likert , Régression linéaire , Régression logistique binaire , Prédictions marginales, contrastes marginaux & effets marginaux .

    Ce chapitre est évoqué dans le webin-R #22 (tableaux statistiques avec gtsummary) sur YouTube .

    Ce chapitre est évoqué dans le webin-R #23 (tableaux statistiques avec gtsummary : suite) sur YouTube .

    L’extension gtsummary a déjà été abordée dans d’autres chapitres, notamment via les fonctions tbl_summary et tbl_svysummary dans le chapitre sur la statistique bivariée ou la fonction tbl_regression dans le chapitre sur la régression logistique .

    Dans ce chapitre, nous allons explorer plus en profondeur les différentes options offertes gtsummary pour la réalisation de tableaux statistiques prêts à être publiés.

    Les personnes anglophones pourront également se référer à l’excellent site de documentation du package : https://www.danieldsjoberg.com/gtsummary/

    library(gtsummary)

    Remarques sur les types de variables et les sélecteurs associés

    gtsummary permets de réaliser des tableaux statistiques combinant plusieurs variables, l’affichage des résultats pouvant dépendre du type de variables.

    Par défaut, gtsummary considère qu’une variable est catégorielle s’il s’agit d’un facteur, d’une variable textuelle ou d’une variable numérique ayant moins de 10 valeurs différentes.

    Une variable sera considérée comme dichotomique (variable catégorielle à seulement deux modalités) s’il s’agit d’un vecteur logique ( TRUE / FALSE ), d’une variable textuelle codée yes / no ou d’une variable numérique codée 0 / 1 .

    Dans les autres cas, une variable numérique sera considérée comme continue .

    Si vous utilisez des vecteurs labellisés (voir le chapitre dédié ), vous devez les convertir, en amont, en facteur ou en variables numériques. Voir l’extension labelled et les fonctions to_factor , unlabelled et unclass .

    Nous verrons plus loin qu’il est possible de forcer le type d’une variable et l’existence d’autres types de variables.

    gtsummary fournit des sélecteurs qui pourront être utilisés dans les options des différentes fonctions, en particulier all_continuous pour les variables continues, all_dichotolous pour les variables dichotomiques et all_categorical pour les variables catégorielles (incluant les variables dichotomiques, utiliser all_categorical(dichotomous = FALSE) pour sélectionner les variables catégorielles en excluant les variables dichotomiques).

    Dans le cadre des tableaux présentant les résultats d’un modèle statistique, il existe en plus d’autres sélecteurs pour sélectionner certains termes spécifiques : all_intercepts (pour sélectionner seulement le ou les intercepts du modèle), all_interaction pour les termes d’interactions entre plusieurs variables, all_contrasts pour sélectionner les variables catégorielles codées avec un contraste particulier.

    Remarques sur la syntaxe des options

    De nombreuses options des fonctions de gtsummary peuvent s’appliquer seulement à une ou certaines variables. Pour ces options-là, gtsummary attends une formule de la forme variables concernées ~ valeur de l'option ou bien une liste de formules ayant cette forme.

    Par exemple, pour modifier l’étiquette associée à une certaine variable, on peut utiliser l’option label de tbl_summary .

    gtsummary est très flexible sur la manière d’indiquer la ou les variables concernées. Il peut s’agir du nom de la variable, d’une chaîne de caractères contenant le nom de la variable, ou d’un vecteur contenant le nom de la variable. Les syntaxes ci-dessous sont ainsi équivalentes.

    Pour appliquer le même changement à plusieurs variables, plusieurs syntaxes sont acceptées pour lister plusieurs variables.

    Il est également possible d’utiliser la syntaxe tidyselect et les sélecteurs de tidyselect comme everything , starts_with , contains ou all_of . Ces différents sélecteurs peuvent être combinés au sein d’un c() ou de vars() .

    Bien sûr, il est possible d’utiliser les sélecteurs propres à gtsummary .

    tbl_summary(trial, label = all_continuous() ~ "Une même étiquette")
    tbl_summary(trial, label = list(
      all_continuous() ~ "Variable continue",
      all_dichotomous() ~ "Variable dichotomique",
      all_categorical(dichotomous = FALSE) ~ "Variable catégorielle"
    

    Enfin, si l’on ne précise rien à gauche du ~, ce sera considéré comme équivalent à everything(). Les deux syntaxes ci-dessous sont donc équivalentes.

    Thèmes

    gtsummary fournit plusieurs fonctions préfixées theme_gtsummary_*() permettant de modifier l’affichage par défaut des tableaux.

    La fonction theme_gtsummary_journal permets d’adopter les standards de certaines grandes revues scientifiques telles que JAMA (Journal of the American Medical Association), The Lancet ou encore le NEJM (New England Journal of Medicine).

    Par défaut, tbl_summary utilise la médiane et l’intervalle interquartile pour les variables continues. Si on applique theme_gtsummary_mean_sd, la moyenne et l’écart-type seront utilisés par défaut.

    La fonction theme_gtsummary_language permet de modifier la langue utilisée par défaut dans les tableaux. Les options decimal.mark et big.mark permettent de définir respectivement le séparateur de décimales et le séparateur des milliers. Ainsi, pour présenter un tableau en français, on appliquera en début de script :

    Setting theme `language: fr`

    Statistiques descriptives avec tbl_summary()

    La fonction tbl_summary permets de réaliser des tris à plats de plusieurs variables, éventuellement croisés selon une variable catégorielle.

    On lui passe en entrée un tableaux de données (data.frame) et par défaut toutes les variables sont résumées.

    Sélection des variables (include)

    La paramètre include permets de spécifier les variables à inclure dans le tableau (et leur ordre). On peut lui passer un vecteur de noms de variables, ou bien utiliser des sélecteurs tidyselect (utiliser c() si plusieurs sélecteurs).

    En fonction d’une seconde variable (by, add_overall)

    Le paramètre by permets de résumer chacune des variables inclues en fonction d’une variable catégorielle.

    trial %>%
      tbl_summary(
        include = c(age, stage, response),
        by = trt
    

    La fonction add_overall, appliquée après tbl_summary, permets, lorsqu’une variable by a été définie, de rajouter une colonne avec l’ensemble du fichier. L’option last permets de spécifier si l’on veut ajouter cette colonne à la droite du tableau et col_label permet de personnaliser le titre de la colonne (noter le recours aux ** pour indiquer ce qui doit être affiché en gras et {N} qui sera remplacé par le nombre d’observations).

    Statistiques affichées (statistic, percent, sort)

    Le paramètre statistic permets de sélectionner les statistiques à afficher pour chaque variable. On indiquera une chaîne de caractères dont les différentes statistiques seront indiquées entre accolades ({}).

    Pour une variable continue, on pourra utiliser {median} pour la médiane, {mean} pour la moyenne, {sd} pour l’écart type, {var} pour la variance, {min} pour le minimum, {max} pour le maximum, ou encore {p##} (en remplacant ## par un nombre entier entre 00 et 100) pour le percentile correspondant (par exemple p25 et p75 pour le premier et le troisième quartile). Utilisez all_continous pour sélectionner toutes les variables continues.

    trial %>%
      tbl_summary(
        include = c(age, marker),
        statistic = all_continuous() ~ "Moy. : {mean} [min-max : {min} - {max}]"
    

    Il est possible d’afficher des statistiques différentes pour chaque variable.

    trial %>%
      tbl_summary(
        include = c(age, marker),
        statistic = list(
          age ~ "Méd. : {median} [{p25} - {p75}]",
          marker ~ "Moy. : {mean} ({sd})"
    

    Pour les variables continues, il est également possible d’indiquer le nom d’une fonction personnalisée qui prends un vecteur et renvoie une valeur résumé. Par exemple, pour afficher la moyenne des carrés :

    moy_carres <- function(x) {
      mean(x^2, na.rm = TRUE)
    trial %>%
      tbl_summary(
        include = marker,
        statistic = ~"MC : {moy_carres}"
    

    Pour une variable catégorielle, les statistiques possibles sont {n} le nombre d’observations, {N} le nombre total d’observations, et {p} le pourcentage correspondant. Utilisez all_categorical pour sélectionner toutes les variables catégorielles.

    trial %>%
      tbl_summary(
        include = c(stage, response),
        statistic = all_categorical() ~ "{p} % ({n}/{N})"
    

    Il est possible, pour une variable catégorielle, de trier les modalités de la plus fréquente à la moins fréquente avec le paramètre sort.

    trial %>%
      tbl_summary(
        include = c(stage, response),
        sort = all_categorical() ~ "frequency"
    

    Lorsqu’une variable by est définie, on peut utiliser percent pour indiquer le type de pourcentages : en ligne avec "row", en colonne avec "column" et "cell" pour les pourcentages totaux.

    Pour toutes les variables (catégorielles et continues), les statistiques suivantes sont également disponibles : {N_obs} le nombre total d’observations, {N_miss} le nombre d’observations manquantes (NA), {N_nonmiss} le nombre d’observations non manquantes, {p_miss} le pourcentage d’observations manquantes (i.e. N_miss / N_obs) et {p_nonmiss} le pourcentage d’observations non manquantes (i.e. N_nonmiss / N_obs).

    Affichage du nom des statistiques (add_stat_label)

    Lorsque l’on affiche de multiples statistiques, la liste des statistiques est regroupée dans une note de tableau qui peut vite devenir un peu confuse.

    tbl <- trial %>%
      tbl_summary(
        include = c(age, marker, grade),
        by = trt,
        statistic = list(
          age ~ "{median} [{p25} - {p75}]",
          marker ~ "{mean} ({sd})"
    

    La fonction add_stat_label permets d’indiquer le type de statistique à côté du nom des variables ou bien dans une colonne dédiée, plutôt qu’en note de tableau.

    Forcer le type de variable (type, value)

    Comme abordé plus haut, gtsummary détermine automatiquement le type de chaque variable. Par défaut, la variabe age est traitée comme variable continue, death comme dichotomique (seule la valeur 1 est affichée) et grade comme variable catégorielle.

    trial %>%
      tbl_summary(
        include = c(grade, age, death)
    

    Il est cependant possible de forcer un certain type avec l’argument type. Précision, lorsque l’on force une variable en dichotomique, il faut indiquer avec value la valeur à afficher (les autres sont alors masquées).

    trial %>%
      tbl_summary(
        include = c(grade, age, death),
        type = list(
          grade ~ "dichotomous",
          age ~ "categorical",
          death ~ "categorical"
        value = grade ~ "III",
        label = grade ~ "Grade III"
    

    Afficher des statistiques sur plusieurs lignes (continuous2)

    Pour les variables continues, gtsummary a introduit un type de variable "continuous2", qui doit être attribué manuellement via type, et qui permets d’afficher plusieurs lignes de statistiques (en indiquant plusieurs chaînes de caractères dans statistic). À noter le sélecteur dédié all_continuous2.

    trial %>%
      tbl_summary(
        include = c(age, marker, ttdeath),
        type = c(age, marker) ~ "continuous2",
        statistic = all_continuous2() ~ c("{median} ({p25} - {p75}", "{mean} ({sd})", "{min} - {max}")
    

    Mise en forme des statistiques (digits)

    L’argument digits permet de spécifier comment mettre en forme les différentes statistiques. Le plus simple est d’indiquer le nombre de décimales à afficher. Il est important de tenir compte que plusieurs statistiques peuvent être affichées pour une même variable. On peut alors indiquer une valeur différente pour chaque statistique.

    trial %>%
      tbl_summary(
        include = c(age, stage),
        by = trt,
        digits = list(
          all_continuous() ~ 1,
          all_categorical() ~ c(0, 1)
    

    Au lieu d’un nombre de décimales, on peut indiquer plutôt une fonction à appliquer pour mettre en forme le résultat. Par exemple, gtsummary fournit les fonctions suivantes : style_number pour les nombres de manière générale, style_percent pour les pourcentages (les valeurs sont multipliées par 100, mais le symbole % n’est pas ajouté), style_pvalue pour les p-valeurs, style_sigfig qui n’affiche (par défaut) que deux chiffres significatifs, ou encore style_ratio qui est une variante de style_sigfig pour les ratios (comme les odds ratios) que l’on compare à 1.

    Il faiut bien noter que ce qui est attendu par digits, c’est une fonction et non le résultat d’une fonction. On indiquera donc le nom de la fonction sans parenthèse.

    tbl_summary( include = marker, digits = all_continuous() ~ c(style_percent, style_pvalue, style_ratio)

    Comme digits attends à recevoir une fonction (et non le résultat) d’une fonction, on ne peut pas passer directement des arguments aux fonctions style_*() de gtsummary. Pour cela il faut créer une fonction à la levée :

    trial %>%
      tbl_summary(
        include = marker,
        statistic = ~"{mean} pour 100",
        digits = ~ function(x) {
          style_percent(x, digits = 1)
    

    Une syntaxe alternative consiste à avoir recours à la fonction partial de purrr qui permet d’appeler partiellement une fonction et de renvoyer une nouvelle fonction.

    trial %>%
      tbl_summary(
        include = marker,
        statistic = ~"{mean} pour 100",
        digits = ~ purrr::partial(style_percent, digits = 1)
    

    À noter dans l’exemple précédent que les fonctions style_*() de gtsummary tiennent compte du thème défini (ici la virgule comme séparateur de décimale).

    Pour une mise en forme plus avancée des nombres, il faut se tourner vers l’extension scales (choir le chapitre dédié). ATTENTION : les fonctions de scales n’héritent pas des paramètres du thème gtsummary actif. Il faut donc personnaliser le séparateur de décimal dans l’appel à la fonction.

    trial %>%
      tbl_summary(
        include = marker,
        statistic = ~"{mean}",
        digits = ~ scales::label_number(accuracy = .01, suffix = " ng/mL", decimal.mark = ",")
    

    Données manquantes (missing, missing_text)

    Le paramètre missing permets d’indiquer s’il faut afficher le nombre d’observations manquantes (c’est-à-dire égales à NA) : "ifany" (valeur par défaut) affiche ce nombre seulement s’il y en a, "no" masque ce nombre et "always" force l’affichage de ce nombre même s’il n’y pas de valeur manquante. Le paramètre missing_text permets de personnaliser le texte affiché.

    trial %>%
      tbl_summary(include = c(trt, age))
    include = c(trt, age), missing = "always", missing_text = "Nbre observations manquantes"

    Il est à noter, pour les variables catégorielles, que les valeurs manquantes ne sont jamais pris en compte pour le calcul des pourcentages. Pour les inclure dans le calcul, il faut les transformer en valeurs explicites, par exemple avec fct_explicit_na de forcats.

    Warning: There was 1 warning in `mutate()`.
    ℹ In argument: `response = response %>% as.factor() %>%
      forcats::fct_explicit_na(na_level = "non observé")`.
    Caused by warning:
    ! `fct_explicit_na()` was deprecated in forcats 1.0.0.
    ℹ Please use `fct_na_value_to_level()` instead.

    Étiquettes des variables (label)

    gtsummary, par défaut, prends en compte les étiquettes de variables, si elles existent, et sinon utilisera le nom de chaque variable dans le tableau. Pour rappel, les étiquettes de variables peuvent être manipulées avec l’extension labelled et les fonctions var_label et set_variable_labels.

    Il est aussi possible d’utiliser l’option label de tbl_summary pour indiquer des étiquettes personnalisées.

    Pour modifier les modalités d’une variable catégorielle, il faut modifier en amont les niveaux du facteur correspondant.

    Afficher les effectifs (add_n)

    La fonction add_n permets d’ajouter une colonne avec le nombre d’observations (non manquantes par défaut). Plusieurs options permettent de personnaliser le résultat : col_label pour modifier l’intitulé de la colonne; statistic pour personnaliser la ou les statistiques affichées (la liste des statistiques disponibles est disponible dans le fichier d’aide add_n.tbl_summary); last pour la positition de la colonne; footnote pour l’ajout d’une note de tableau.

    Mise en forme du tableau (bold_labels, italicize_levels)

    Les fonctions bold_labels, bold_levels, italicize_labels et italicize_levels permettent d’afficher les étiquettes de variables et les modalités des variables catégorielles en gras ou en italique.

    Modifer en-têtes et notes (modify_header, modify_spanning_header, modify_footnote)

    La fonction modify_header permet de modifier les en-têtes des colonnes, modify_spanning_header d’ajouter un chapeau regroupant plusieurs colonnes et modify_footnote. On doit indiquer une formule ou une liste de formules indiquant les colonnes concernées et la modification souhaitée.

    Il faut néanmoins connaître le nom interne des différentes colonnes. Ceux-ci peuvent âtre affichés avec la fonction show_header_names :

    tbl <- trial %>%
      tbl_summary(
        include = c(age, grade),
        by = trt
      ) %>%
      add_overall() %>%
      add_p()
    
    
    ℹ As a usage guide, the code below re-creates the current column headers.
    modify_header(
      label = "**Caractéristique**",
      stat_0 = "**Total**, N = 200",
      stat_1 = "**Drug A**, N = 98",
      stat_2 = "**Drug B**, N = 102",
      p.value = "**p-valeur**"
    Column Name   Column Header       
    ------------  --------------------
    label         **Caractéristique** 
    stat_0        **Total**, N = 200  
    stat_1        **Drug A**, N = 98  
    stat_2        **Drug B**, N = 102 
    p.value       **p-valeur**        

    label est la colonne affichant le nom des variables, stat_0 la colonne totale crée par add_overall (ou la colonne unique de statistiques en l’absence de paramètre by) et p.value la colonne crée par add_p. Lorsqu’il y a un paramètre by, des colonnes nommées stat_1, stat_2, etc. sont crées pour chaque valeur de by. La fonction all_stat_cols permets de sélectionner toutes les colonnes dont le nom commence par stat_. On peut également utiliser all_stat_cols(stat_0 = FALSE) sélectionner toutes les colonnes associées à by mais pas celle crée par add_overall.

    Dans les étiquettes, on peut utiliser des doubles étoiles (**) pour indiquer du gras et des tirets simples (_) pour de l’italique (il s’agit de codes markdown). On peut utliser {N} pour afficher le nombre total d’observations. Pour les colonnes associées à by, {level}, {n} et {p} correspondent respectivement au niveau du facteur, au nombre d’observations et à la proportion de ce facteur dans l’échantillon total. La valeur NA peut être utilisée pour supprimer les notes associées aux colonnes concernées.

    Tests de comparaisons (add_p, separate_p_footnotes)

    Lorsqu’une variable by est définie, la fonction add_p permets d’ajouter des tests de comparaisons entre les groupes et d’afficher les p-valeurs.

    Par défaut, pour les variables continues, un test de Kruskal-Wallis calculé avec la fonction kruskal.test est utilisé lorsqu’il y a trois groupes ou plus, et un test de Wilcoxon-Mann-Whitney calculé avec wilcox.test (test de comparaison des rangs) lorsqu’il n’y a que deux groupes.

    Si l’on affiche des moyennes, il serait plus juste d’utiliser un test t de Student (test de compairaison des moyennes) calculé avec t.test.

    Pour les variables catégorielles, un test du Chi² calculé avec chisq.test est utilisé par défaut lorsque les effectifs théoriques sont supérieurs à 5, sinon un test de Fosher calculé avec fisher.test est utilisé.

    D’autres tests sont disponibles et sont détaillés dans le fichier d’aide add_p.tbl_summary.

    Le paramètre test permets de spécifier pour chaque variable le type de tests à utiliser. La fonction separate_p_footnotes peut être utilisée pour créer une note de tableau différente pour chaque test. Le paramètre pvalue_fun permet d’indiquer une fonction personnalisée pour la mise en forme des p-valeurs.

    Intervalles de confiance (add_ci)

    La fonction add_ci permets d’ajouter des intervalles de confiance dans des colonnes additionnelles. ATTENTION : par défaut, pour les variables continues, cela calcule les intervalles de confiance d’une moyenne et non d’une médiane. Le type d’intervalle peut être modifié avec method (par exemple "wilcox.test" pour l’intervalle de confiance d’une médiane). statistic permet de personnaliser la présentation de l’intervalle. conf.level permets de changer le niveau de confiance. style_fun permets de modifier la fonction de formatage des

    method = ~"wilcox.test", statistic = ~"entre {conf.low} et {conf.high}", conf.level = .9, style_fun = ~ scales::label_number(accuracy = .01, decimal.mark = ",")

    Différences entre groupes (add_difference)

    Si la variable spécfiée dans by a exactement 2 niveaux, il est possible de calculer la différence entre deux moyennes (variable continue) ou entre deux proportions (variables dichotomiques uniquement, pas les variables catégorielles), d’afficher l’intervalle de confiance de cette différence et la p-valeur associée (la différence est-elle significativement différente de 0) avec add_difference.

    Tableau croisé avec tbl_cross()

    La fonction tbl_cross est une variation de tbl_summary permettant de croiser deux variables spécfiées avec les arguments row et col. Le type de pourcentage peut-être précisé avec l’arguement percent. Il est possible d’ajouter le résultat d’un test du Chi² avec add_p.tbl_cross.

    Données pondérées et tbl_svysummary()

    La fonction tbl_svysummary est similaire à tbl_summary à l’exception qu’elle prend en entrée un objet de type survey défini avec l’extension homonyme. Cela permet de définir une pondération des observations et un plan d’échantillonnage complexe. Les options de tbl_svysummary sont similaires et il est possible d’utiliser les autres fonctions de gtsummary telles que add_overall, add_p, add_n, add_stat_label, etc.

    Il faut noter que les tests statistiques disponibles ne sont pas les mêmes et sont détaillés dans le fichier d’aide de add_p.tbl_svysummary.

    tbl_continuous()

    La fonction tbl_continuous permets de résumer une variable continue en fonction de deux ou plusieurs variables catégorielles.

    Par exemple, pour afficher l’âge moyen de plusieurs sous-groupes :

    trial %>%
      tbl_continuous(
        variable = age,
        statistic = ~"{mean}",
        include = c(stage, grade),
        by = trt,
        digits = ~1
    

    tbl_custom_summary()

    La fonction tbl_custom_summary permets encore plus de personnalisation que tbl_continuous.

    Comme précédemment, un tableau va être créé avec les paramètres include et by. On doit également fournir via stat_fns une fonction personnalisée qui va recevoir un sous tableau de données (obtenu en croisant include et by), contenant toutes les variables du fichier, et qui renverra des statistiques personnalisées que l’on affichera avec statistic. La fonction peut-être différente pour chaque variable.

    Il est également possible d’utiliser quelques fonctions dédiées fournies directement par gtsummary.

    À noter que l’option overall_raw permets d’afficher une ligne total, overall_raw_label de personnaliser l’étiquette de cette ligne et overall_raw_last de choisir si on souhaite l’afficher en début ou en fin de tableau.

    tbl_custom_summary() & continuous_summary()

    La fonction continuous_summary permet de reproduire avec tbl_custom_summary le fonctionnement de tbl_continuous. continuous_summary prend un seul argument (le nom d’une variable du fichier). Les statistiques à afficher sont directement précisées avec statistic.

    Ainsi, pour afficher l’âge moyen (avec l’écart-type) en fonction des variables trt, grade et stage :

    trial %>%
      tbl_custom_summary(
        include = c("grade", "stage"),
        by = "trt",
        stat_fns = ~ continuous_summary("age"),
        statistic = ~"{mean} ({sd})",
        overall_row = TRUE,
        digits = ~1
      ) %>%
      add_overall() %>%
      modify_footnote(
        update = all_stat_cols() ~ "Âge moyen (ET)"
    

    Astuce : la fonction modify_footnote peut être utilisée pour mettre à jour la note de tableau.

    tbl_custom_summary() & proportion_summary()

    La fonction proportion_summary permets de calculer une proportion (et son intervalle de confiance). Elle prends en entrée la variable à partir de laquelle calculer la proportion et le ou les valeurs à inclure dans cette proportion. Il faut préciser l’affichage souhaité avec statistic et la mise enforme avec digits.

    Par exemple, pour afficher la proportion de personnes étant à l’étape “T3” ou “T4” (variable stage) :

    trial %>%
      tbl_custom_summary(
        include = c("grade", "trt"),
        stat_fns = ~ proportion_summary(variable = "stage", value = c("T3", "T4")),
        statistic = ~"{prop}% [{conf.low}-{conf.high}]",
        digits = ~ scales::label_percent(accuracy = .1, decimal.mark = ",", suffix = "")
    

    tbl_custom_summary() & ratio_summary()

    La fonction ratio_summary calcule le ratio entre deux variables. Elle peut ainsi être utilisée pour produire un tableau d’incidence (nombre de cas / exposition exprimée en personnes-années). On lui indique le nom de la variable à prendre en compte pour le numérateur et celui de la variable pour le dénominateur. Pour chaque sous-groupe, la fonction renvoie {num} (somme de la variable définie pour le numérateur), {denom} (somme de la variable définie pour le dénominateur) et {ratio} (i.e. {num}/{denom}). Si {num} est un nombre entier, l’intervalle de confiance de {ratio} est calculé à l’aide de la fonction poisson.test et accessible via {conf.high} et {conf.high}.

    trial %>%
      tbl_custom_summary(
        include = c("stage", "grade"),
        by = "trt",
        stat_fns = ~ ratio_summary("response", "ttdeath"),
        statistic = ~"{ratio} [{conf.low}; {conf.high}] ({num}/{denom})",
        digits = ~ c(3, 2, 2, 0, 0),
        overall_row = TRUE,
        overall_row_label = "Total"
      ) %>%
      bold_labels() %>%
      modify_footnote(
        update = all_stat_cols() ~ "Ratio [95% CI] (n/N)"
    

    tbl_custom_summary() & écriture d’une fonction personnalisée

    Il est également possible, et c’est là toute la puissance de tbl_custom_summary, de définir une fonction personnelle et de la passer via stat_fns.

    Cette fonction sera appellée pour chaque cellule du tableau, chaque cellule étant calculée indépendamment.

    Une telle fonction recevra les arguments suivants :

  • data est un tableau de données contenant un sous-ensemble des données transmises à tbl_custom_summary, plus précisément le sous-ensemble défini par la valeur courante de variable et de by. Il faut noter que les valeurs manquantes (NA) de variable sont également exclues de data.
  • full_data est le tableau de données complet transmis à tbl_custom_summary.
  • variable est une valeur textuelle contenant le nom de la variable sur laquelle porte le calcul en cours.
  • by est une valeur textuelle contenant le nom de la variable by s’il y en a une, NULL sinon.
  • type est une valeur textuelle indiquant le type de variable (continuous, categorical, …).
  • stat_display est une valeur textuelle indiquant les statistiques qui seront affichées (i.e. la valeur indiquée dans l’argument statistic de tbl_custom_summary).
  • La plupart du temps, une fonction personnalisée n’aura pas besoin de tous ces éléments. C’est pourquoi il est recommandé d’inclure ... dans la définition de la fonction, par exemple ma_fonction <- function(data, ...){}.

    La fonction devra impérativement renvoyé un tibble composé d’une seule ligne et avec une colonne par statistique calculée, le nom de la colonne correspondant avec la statistique demandée dans statistic.

    Voyons un premier exemple, avec une fonction calculant la somme de marker et l’âge moyen.

    Construisons un tableau à partir de cette dernière.

    Dans notre second exemple, nous souhaitons calculer la moyenne et l’intervalle de confiance de la variable affichée en ligne. Cette fois-ci, la variable en cours n’est pas connue à l’avance mais son nom est accessible via l’argument variable. On peut donc y accéder avec la syntaxe data[[variable]].

    mean_ci <- function(data, variable, ...) {
      test <- t.test(data[[variable]])
      dplyr::tibble(
        mean = test$estimate,
        conf.low = test$conf.int[1],
        conf.high = test$conf.int[2]
    trial %>%
      tbl_custom_summary(
        include = c("marker", "ttdeath"),
        by = "trt",
        stat_fns = ~mean_ci,
        statistic = ~"{mean} [{conf.low}; {conf.high}]"
      ) %>%
      add_overall(last = TRUE) %>%
      modify_footnote(
        update = all_stat_cols() ~ "moyenne [IC 95%"
    

    Allons un peu plus loin avec notre troisième exemple. Nous nous intéressons non seulement à la moyenne de la variable marker pour une sous-catégorie donnée, mais également si cette moyenne est supérieure ou inférieuree à la grande moyenne (toutes catégories confondues). Nous aurons donc besoin de l’ensemble du jeu de données avec full_data. Cet exemple nous permets également de voir qu’il est possible de renvoyer une statistique textuelle.

    add_stat()

    D’un usage plus avancé, add_stat permets de rajouter une colonne de statistiques personnalisées à un objet gtsummary existant. Le calcul ne se fait pas ici cellule par cellule mais variable par variable.

    On pourra se référer à l’aide la fonction pour des exemples d’utilisation.

    Résultats d’un modèle avec tbl_regression()

    Déjà abordé dans le chapitre sur la régression logistique, tbl_regression permets d’afficher les coefficients d’un modèle statistique, avec les intervalles de confiance et les p-valeurs.

    tbl_regression utilise de manière sous-jacente l’extension broom.helpers et est donc compatible avec tous les types de modèles compatibles.

    Afficher seulement certains coefficients (include)

    Le paramètre include permets de choisir les variables / termes à afficher.

    Étiquettes des variables (label)

    On peut personnaliser les étiquettes des variables avec label.

    mod %>%
      tbl_regression(label = list(
        trt ~ "Traitement",
        "grade:age" ~ "Interaction entre grade et âge"
    

    Exponentiation des coefficients (exponentiate)

    Pour une régression logistique, il est d’usage d’afficher l’exponentiel des coefficients, ce que l’on peut faire en indiquant exponentiate = TRUE.

    Changer l’intitulé des colonnes

    Comme pour tout tableau gtsummary, l’intitulé des colonnes peut être modifié avec modify_header. On pourra avoir recours à show_header_names pour connaître le nom de chaque colonne.

    ℹ As a usage guide, the code below re-creates the current column headers.
    modify_header(
      label = "**Caractéristique**",
      estimate = "**OR**",
      ci = "**95% IC**",
      p.value = "**p-valeur**"
    Column Name   Column Header       
    ------------  --------------------
    label         **Caractéristique** 
    estimate      **OR**              
    ci            **95% IC**          
    p.value       **p-valeur**        

    Afficher des étoiles de signification (add_significance_stars)

    La fonction add_significance_stars ajoute des étoiles de significativité à côté des coefficients. Les options hide_ci, hide_p et hide_se permettent de masquer/afficher les intervalles de confiance, les p-valeurs et les écarts-types.

    lm(time ~ ph.ecog + sex, survival::lung) %>%
      tbl_regression() %>%
      add_significance_stars(
        hide_ci = FALSE,
        hide_p = FALSE,
        hide_se = TRUE
    

    Variables dichotomiques sur une ligne (show_single_row)

    L’argument show_single_row permet d’indiquer une liste de variables dichotomiques que l’on souhaite afficher sur une seule ligne (la modalité de référence étant alors masquée). Il est possible d’indiquer all_dichotomous() pour appliquer cette option à toutes les variables dichotomiques.

    Afficher l’intercept (intercept)

    Par défaut, l’intercept n’est pas affiché. Mais on peut forcer son affichage avec intercept = TRUE.

    Mise en forme des coefficients (estimate_fun, pvalue_fun)

    L’argument estimate_fun permet de fournir une fonction qui sera utilisée pour mettre en forme les coefficients (et les intervalles de confiance) et pvalue_fun pour une fonction utilisée pour les p-valeurs. Voir le chapitre dédié à la mise en forme des nombres.

    mod %>%
      tbl_regression(
        estimate_fun = scales::label_number(accuracy = .001, decimal.mark = ","),
        pvalue_fun = scales::label_pvalue(accuracy = .001, decimal.mark = ",", add_p = TRUE)
    

    Afficher les coefficients pour les références (add_estimate_to_reference_rows)

    L’option add_estimate_to_reference_rows = TRUE ajoute la valeur du coefficient pour les modalités de références.

    P-valeurs globales (add_global_p)

    La fonction add_global_p calcule une p-valeur globale pour chaque variable. On ajoutera keep = TRUE pour conserver les p-valeurs individuelles de chaque coefficient.

    Note : par défaut, les p-valeurs globales calculées sont du type III. Voir la note dédiée aux p-valeurs globales dans le chapitre sur la régression logistique.

    Ajouter les VIF (add_vif)

    Dans le chapitre sur la multicolinéarité, nous avons abordé les facteurs d’inflation de la variance (FIV) ou variance inflation factor (VIF) en anglais. Ils peuvent être facilement calculés avec add_vif.

    mod %>%
      tbl_regression() %>%
      add_vif()
    there are higher-order terms (interactions) in this model
    consider setting type = 'predictor'; see ?vif
    1 OR = rapport de cotes, IC = intervalle de confiance, GVIF = Generalized Variance Inflation Factor 2 GVIF^[1/(2*df)]

    Représenter graphiquement le modèle (plot)

    Nous avons déjà abordé dans d’autres chapitres la fonction ggcoef_model de GGally pour la représentation graphiques des coefficients. Pour un graphique rapide, on peut appliquer plot() à un tableau généré avec tbl_regression pour produire rapidement un graphique des coefficients.

    Cependant, si l’on souhaite plus d’options de personnalisation, on utilisera directement ggcoef_model de GGally.

    Registered S3 method overwritten by 'GGally':
      method from   
      +.gg   ggplot2

    Afficher des statistiques globales du modèle (add_glance_table, add_glance_source_note)

    La méthode glance de broom permets de calculer des statistiques globales sur un modèle (comme le R² ou l’AIC, les statistiques calculées dépendant de chaque modèle).

    Ces statistiques globales peuvent être ajoutées au tableau avec add_glance_table ou en notes avec add_glance_source_note. Le paramètre include permets de choisir les éléments à afficher parmi les colonnes du tableau générés par glance.

    tbl_stack() & tbl_merge()

    La fonction tbl_stack permets de coller deux (ou plus) tableaux l’un au-dessus de l’autre tandis que tbl_merge les placera côte-à-côte, en s’assurant qu’une même variable sera bien affichée sur la même ligne.

    glm(response ~ trt, trial, family = binomial) %>% tbl_regression(exponentiate = TRUE) glm(response ~ grade + trt + stage + marker, trial, family = binomial) %>% tbl_regression(exponentiate = TRUE) tbl_stack( list(t1, t2), group_header = c("Modèle bivarié", "Modèle multivarié")

    tbl_strata()

    La fonction tbl_strata permet de calculer un tableau gtsummary pour chaque modalité d’une variable catégorielle définie via strata, puis de combiner les tableaux entre eux. Le paramètre .tbl_fun indique la fonction à utiliser pour le calcul du tableau. On peut utiliser la syntaxe rapide d’écritude de fonction propre au tidyverse en indiquant une formule (qui commence par ~) et en utilisant .x pour indiquer où passer le sous-ensemble de données.

    Par défaut les sous-tableaux produits sont combinés avec tbl_merge.

    trial %>%
      select(age, grade, stage, trt) %>%
      mutate(grade = paste("Grade", grade)) %>%
      tbl_strata(
        strata = grade,
        .tbl_fun =
          ~ .x %>%
            tbl_summary(by = trt, missing = "no") %>%
            add_n()
    

    Pour les combiner avec tbl_stack, on indiquera .combine_with = "tbl_stack".

    trial %>%
      select(age, grade, stage, trt) %>%
      mutate(grade = paste("Grade", grade)) %>%
      tbl_strata(
        strata = grade,
        .tbl_fun =
          ~ .x %>%
            tbl_summary(by = trt, missing = "no") %>%
            add_n(),
        .combine_with = "tbl_stack"
    
    ℹ Column headers among stacked tables differ. Headers from the first table are
    used. Use `quiet = TRUE` to supress this message.

    tbl_split()

    Lorsqu’un tableau est trop long et qu’on souhaite le couper en plusieurs tableaux, on pourra utiliser tbl_spit en indiquant le nom des variables après lesquelles le tableau doit être coupé.

    Régressions univariées multiples avec tbl_uvregression()

    La fonction tbl_uvregression est utile pour réaliser plusieurs régressions univariées. Il faut lui passer un tableau ne contenant que la variable à expliquer et les variables explicatives. La variable à expliquer sera indiquée avec y. L’argument method indique la fonction à utiliser pour le calcul des modèles univariés, par exemple glm pour une régression logistique ordinale. On pourra indiquer des paramètres à transmettre à cette fonction avec method.args, par exemple list(family = binomial) dans le cadre d’une régreession logistique binaire.

    On peut facilement présenter côte-à-côte l’analyse descriptive, l’analyse bivariée et l’analyse multivariée avec tbl_merge.

    tbl_desc <- trial %>%
      tbl_summary(
        by = response,
        include = c(age, grade, stage)
    
    7 observations missing `response` have been removed. To include these observations, use `forcats::fct_na_value_to_level()` on `response` column before passing to `tbl_summary()`.
    tbl_multi <- trial %>%
      glm(
        response ~ age + grade + stage,
        data = .,
        family = binomial
      ) %>%
      tbl_regression(exponentiate = TRUE)
    tbl_merge(
      list(tbl_desc, tbl_uni, tbl_multi),
      tab_spanner = c("**Analyse descriptive**", "**Modèles bivariés**", "**Modèle multivarié**")
    

    Tables de survie avec tbl_survfit()

    L’analyse de survie et les courbes de Kaplan-Meier sont abordées dans un chapitre dédié. La fonction tbl_survfit permets de représenter la probabilité encore en vie à différents points de temps définis avec times.

    km %>%
      tbl_survfit(
        times = c(0, 6, 12, 18, 24),
        label_header = "**Mois {time}**"
    

    On peut alternativement représenter la proportion ayant vécu l’évènement avec reverse = TRUE.

    km %>%
      tbl_survfit(
        times = c(6, 12),
        reverse = TRUE
    

    Au lieu d’indiquer des points de temps, on peut indiquer des quantiles avec probs et représenter le temps requis pour atteindre ces quantiles.

    Il est également possible de passer une liste d’objets survfit.

    list(
      survfit(Surv(ttdeath, death) ~ 1, trial),
      survfit(Surv(ttdeath, death) ~ trt, trial),
      survfit(Surv(ttdeath, death) ~ grade, trial)
    ) %>%
      tbl_survfit(
        times = c(6, 12, 18),
        label_header = "**Mois {time}**"
    

    Dernière possibilité, il est possible de passer un tableau de données et d’indiquer les variables à analyser. Les tables de survie seront alors calculées à la volée.

    trial %>%
      tbl_survfit(
        y = Surv(ttdeath, death),
        include = c(trt, grade, stage),
        probs = 0.5,
        label_header = "**Survie médiane en mois** (IC 95%)",
        estimate_fun = scales::label_number(accuracy = .1)
    

    Exporter un tableau

    Les tableaux produits par gtsummary peuvent être rendus avec plusieurs moteurs de tableaux, grace aux fonctions as_flex_table, as_hux_table, as_kable_extra, et as_kable. Ils peuvent même être convertis en tableaux de données avec , as_tibble.

    Dans un document R Markdown, gtsummary utilisera le moteur de tableaux le plus adapté selon la sortie (HTML, PDF ou Word).

    Formats d’export d’un tableau gtsummary

    Caractéristique

    Drug A, N = 981

    Drug B, N = 1021

    p-valeur2

    Age

    46 (37 – 59)

    48 (39 – 56)

    0,7

    Manquant

    7

    4

    Grade

    0,9

    I

    35 (36%)

    33 (32%)

    II

    32 (33%)

    36 (35%)

    III

    31 (32%)

    33 (32%)

    1Médiane (EI); n (%)

    2test de Wilcoxon-Mann-Whitney; test du khi-deux d'indépendance

    Caractéristique

    Drug A, N = 98

    Drug B, N = 102

    p-valeur

    Age46 (37 – 59)48 (39 – 56)0,7 Manquant74 Grade0,9 I35 (36%)33 (32%) II32 (33%)36 (35%) III31 (32%)33 (32%) Médiane (EI); n (%) test de Wilcoxon-Mann-Whitney; test du khi-deux d'indépendance
    4 I 35 (36%) 5 II 32 (33%) 6 III 31 (32%) # ℹ 2 more variables: `**Drug B**, N = 102` <chr>, # `**p-valeur**` <chr>

    En dehors d’un fichier R markdown, pour exporter un tableau dans un fichier HTML, TeX ou RTF, on pourra utiliser gtsave de gt.

    Pour exporter un tableau dans un fichier Word, on pourra avoir recours à save_as_docx de flextable.

    Plus d’options avec bstfun

    L’extension bstfun est une petite sœur de gtsummary, développée par la même équipe. Cette extension n’est pas disponible sur CRAN mais seulement sur GitHub et elle permet, entre autres, de tester certaines fonctionnalités avant leur éventuelle intégration dans gtsummary.

    Cette extension n’étant disponible que sur GitHub, elle s’installe avec la commande ci-après. ATTENTION : sous Windows, vous aurez besoin d’avoir installer en amont l’outil R Tools disponible sur https://cran.r-project.org/bin/windows/Rtools/.

    tbl_likert()

    En sciences sociales, il est fréquent de mesurer des connaissances ou des opinions selon une échelle de Likert. Dans cette situation, nous avons alors plusieurs variables catégorielles partageant les mêmes modalités.

    Prenons les données utilisées dans le chapitre Exemples de graphiques avancés.

     pos variable label col_type missing values
     2   conn_a   —     fct      21      oui   
     3   conn_b   —     fct      0       oui   
     4   conn_c   —     fct      0       oui   
     5   conn_d   —     fct      104     oui   
     6   conn_e   —     fct      17      oui   
     7   conn_f   —     fct      10      oui   
     8   conn_g   —     fct      12      oui   
    

    Nous avons une série de 8 variables avec les mêmes modalités (Oui, Non et NSP). Un tri à plat peut-être un peu fastidieux à lire.

    La fonction tbl_likert de bstfun est plus adaptée pour présenter ce type de données.

    Attachement du package : 'bstfun'
    L'objet suivant est masqué depuis 'package:gtsummary':
        trial

    Ajouter un graphique de tendances (add_sparkline)

    La fonction add_sparkline ajoute une représentation graphique de la distribution d’une variable continue.

    Représentation graphique des coefficients dans le tableau (add_inline_forest_plot)

    La fonction add_inline_forest_plot ajoute aux tableaux représentant les coefficients d’un modèle une représentation graphique de ces coefficients et de leur intervalle de confiance.

    Forest plot (as_forest_plot)

    La fonction as_forest_plot permets d’afficher un graphique des coefficients utilisant la fonction forestplot de l’extension homonyme forestplot à partir d’un tableau construit avec tbl_regression.

    Contenus sous licence Creative Commons Attribution - Pas d’utilisation commerciale - Partage dans les mêmes conditions.
    Propulsé par R, RStudio, R Markdown, knitr, pandoc et Prince XML. Hébergé par GitHub.