Créer une table 1 avec R

C’est quoi une table 1 ?

Lorsqu’on rédige un rapport d’analyse statistique, ou une publication, pour communiquer les résultats d’une étude réalisée dans le domaine de la santé, on commence généralement par décrire dans un tableau les groupes de patients étudiés, en termes de variables démographiques (age, sexe, etc), et liées à la pathologie (paramètres sanguins, etc ) à baseline (avant la prise du ou des traitements). Cette table contient aussi généralement (mais pas toujours) des informations sur le test statistique employé pour comparer les deux groupes, et la p-value obtenue.

C’est ce tableau descriptif que l’on appelle la table 1.

Par exemple, dans un essai randomisé contrôlé, qui vise à comparer un groupe de patients recevant le traitement évalué, et un groupe de patients recevant un placebo, la table 1 va permettre de vérifier que la randomisation a bien fonctionné, et que les groupes sont donc comparables.

Voici un exemple d’une table 1 d’un essai de phase III :

Table 1 d'un essai de phase III

Cette table 1 est issue de la publication :Fenaux, P., Platzbecker, U., Mufti, G. J., Garcia-Manero, G., Buckstein, R., Santini, V., … & Sekeres, M. A. (2020).. New England Journal of Medicine, 382(2), 140-151. Elle est consultable en cliquant ici.

 

On trouve également des tables 1 dans les publications relatives à des travaux de construction de scores prédictifs. Dans cette situation, la table 1 permet de décrire les liaisons uni-variées entre les variables d’intérêt et l’événement étudié. Les variables possédant une liaison significatives sont ensuite généralement incluses dans un modèle de régression multivariée.

En voici un exemple :

Table 1 d'une étude prédictive

Cette table est issue de la publication Al-Hasan, M. N., Lahr, B. D., Eckel-Passow, J. E., & Baddour, L. M. (2013). Predictive scoring model of mortality in Gram-negative bloodstream infection. Clinical Microbiology and Infection, 19(10), 948-954. Elle est consultable ici.

 

Faire une table 1 avec R

Comment souvent avec le logiciel R, il existe plusieurs solutions pour réaliser une table 1. Ces diverses solutions passent notamment par les packages Table1, table1, ou encore tableone, et sans doute d’autres encore.

A ce jour, je me suis uniquement intéressée au package Table1, c’est donc celui que je vais utiliser ici.

Les data

Pour illustrer cette création de table 1, je vais employer le jeu de données heart_disease (que je vais renommer HD) ; il est inclus dans le package funModelling. Ce jeu de données concerne un essai clinique dans le domaine de la cardiologie.

 

La variable spécifiant les deux groupes de patients pour lesquels je souhaite décrire les variables à baseline est la variable has_heart_disease qui a deux niveaux noet yes.

Les variables démographiques et liées à l apathologie, que nous allons décrire sont :

  • gender (male / female)
  • age
  • chest_pain (4 niveaux, 1 à 4)
  • serum_cholestoral
  • max_heart_rate

Le package Table1

A ce jour, le package Table1 n’est pas disponible sur CRAN. Pour le télécharger, nous devons le récupérer à partir du GitHub d’Erica Wozniak, son développeur. Pour cela, il est nécessaire d’employer les commandes suivantes :

 

 

Remarque : sous Mac, il est, semble-t-il, nécessaire de charger le package remotes pour insatller un package depuis github.

 

La Fonction make.table et ses principaux arguments

La principale fonction de ce package est la fonction make.table().

Cette fonction comporte de nombreux arguments. Les principaux sont :

  •  strat : qui permet d’indiquer la variable qui identifie les groupes de patients, ici has_heart_disease.
  • cat.varlist : qui permet de lister les variables démographiques catégorielles que l’on souhaite inclure dans la Table.
  • cont.varlist : qui permet de lister les variables numériques continues.

Par exemple :

 

Amélioration de la Table 1

D’autres arguments peuvent être employés pour améliorer cette table, notamment :

  • colnames pour renommer les colonnes.
  • cat.header pour renommer les variables catégorielles.
  • cat.rownames pour renommer les niveaux des variables catégorielles.
  • cont.header pour renommer les variables numériques continues.

Par exemple :

 

 

Ajouter les tests statistiques

Des arguments supplémentaires permettent de réaliser les tests statistiques de comparaison et d’indiquer leur p-value dans la table 1. Il s’agit de :

  •  cat.ptype qui permet de préciser les tests qui doivent être employés pour les variables catégorielles.
  • cont.ptype qui permet de faire de même avec les variables numériques continues.

Une liste des tests utilisables est fournie dans l’aide de la fonction stat.col

 

 

Ainsi, par exemple, si je souhaite faire :

  • un test du Chi2 pour la variable chest_pain.
  • un test exact de Fisher pour la variable gender.
  • un test t de Student pour la variable age.
  • un test de Wilcoxon pour les variables serum_cholestoral, max_heart_rate.

je vais utiliser les commandes suivantes :

 

Exporter la table

Une première solution (qui ne me plaît pas tellement) consiste à éditer la sortie de la fonction make.table dans un fichier texte, en utilisant la fonction sink(), comme ceci :

 

 

Cela va créer, à la racine de votre dossier de travail (ou projetR) un fichier texte nommé Table1.txt contenant les sortie de la fonction make.table.

L’autre solution (que je préfère largement), consiste à :

  1. utiliser un script en R markdown,
  2. stocker la table dans un objet
  3. supprimer le nom des lignes de cet objet table, car sinon ils apparaîtront en trop
  4. générer avec la fonction kable()
  5. kniter le document en format word pour récupérer la table

 

Voici un aperçu du rendu word obtenu :

rendu d'une table 1 obtenu via r markdown

Pour aller plus loin

Pour aller plus loin, vous pouvez consulter un tutoriel de Table1 rédigé par Erica Wozniak, en cliquant ici.

Si jamais ce package Table1 ne vous donne pas entière satisfaction, vous pouvez également consulter la vignette du package table1 (sans la majuscule), en cliquant ici.

Je vous recommande aussi cette discussion sur l’intérêt (ou pas) d’afficher les p-values dans la table 1 relative à un essai randomisé.

 

Allez zou…maintenant que vous avez le mode d’emploi, vous n’avez plus d’excuses pour ne pas produire de belles Tables 1 !

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 R

 

Poursuivez votre lecture : 

Partager l'article
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

14 commentaires

  1. Dr Jean-claude Bartier Répondre

    bonjour,
    merci pour ce sujet original mais très utilisé (dans les articles médicaux en particulier).
    Une petite remarque à propos des data utilisées: il y a une coquille dans serum_cholestoral au lieu de serum_cholesterol. Pour pouvoir réaliser l’exemple présenté, il faut faire une faute d’orthographe ! Heureusement il y a colnames. Je renvoie les personnes intéressées aux relations cholestérol – infarctus…
    Cela dit ce post est excellent (comme souvent)

    JcB

  2. DanielOTRON Répondre

    Merci Claire pour cet article très intéressant. On pourra l’utiliser aisément de Rmarkdown.

  3. Nathalie Lévêque Répondre

    Merci Claire, pour cet article très utile qui m’a permis de faire un beau tableau que je vais mettre dans l’article que je suis en train d’écrire!

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour Nathalie,
      Ravie de vous avoir été utile !

  4. simon Répondre

    Super post, merci.
    Est-il possible de ne pas avoir de test stat pour une variable?

    • Claire Della Vedova Auteur de l’articleRépondre

      Bonjour,

      je ne sais pas, il faut essayer, en mettant NA peut être.
      Bonne continuation

  5. FOFOLO Répondre

    Je suis très ravi Claire Della Vedova de vous relire. Je me demandais à quoi a été du ce silence.

    Je vous félicite et vous encourage beaucoup pour cette dévotion de nous informer et nous former.

    Don Folly Fofolo

  6. CAZES Répondre

    Bonjour,
    votre artcile est excellent et vraiment très utile; j’aimerais tant pouvoir à utiliser ce package mais j’ai des difficultés à installer Table1 depuis git_hub:
    install_github(“emwozniak/Table1”)

    message affiché :
    Installing 1 packages: rlang
    trying URL ‘https://cran.rstudio.com/bin/windows/contrib/4.0/rlang_0.4.7.zip’
    Content type ‘application/zip’ length 1137690 bytes (1.1 MB)
    downloaded 1.1 MB

    Que faire après téléchargement du dossier zip.?

    merci par avance

Laisser un commentaire

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