Dans de nombreux domaines (médecine, économie, etc.), une description initiale de la population d'étude est nécessaire. Cette description constitue généralement la Table 1 de l'étude, c'est-à-dire le premier tableau de l'article. La production de la Table 1 fait donc partie de nombreuses études. Pour créer la Table 1, nous utilisons le package tableone. Son utilisation est très simple et est présentée étape par étape ci-dessous.
Commencez par charger tidyverse, puis installez et chargez tableone :
## Charger tidyverse
library(tidyverse)
## Installer tableone
install.packages("tableone")
## Charger tableone
library(tableone)Dans cet exemple, nous utilisons les données Right Heart Catetherization (RHC), issues d'une étude clinique. Importez les données dans R à l'aide de la commande ci-dessous. Comme on le voit, nous enregistrons les données dans l'objet rhc.
## Importer les données
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)Les noms de variables d'un data frame ne se prêtent pas toujours à une présentation dans un rapport. C'est pourquoi nous utilisons le package labelled, qui permet d'attribuer à chaque variable un label (étiquette) utilisable dans les présentations et les rapports. Installez et chargez le package labelled :
install.packages("labelled")
library(labelled)Dans les données rhc, nous sélectionnons les colonnes (variables) qui doivent figurer dans la Table 1.
rhc2 <- select(rhc,
adld3p,
age,
alb1,
amihx,
aps1,
bili1,
ca,
card,
cardiohx,
cat1,
cat2,
chfhx,
chrpulhx,
crea1,
death)Nous poursuivons en attribuant un label à chaque variable, à l'aide du code suivant :
var_label(rhc2) <- list(adld3p = "ADL",
age = "Age (years)",
alb1 = "Albumin (g/L)",
amihx = "Definite Myocardial Infarction",
aps1 = "APACHE score",
bili1 = "Bilirubin",
ca = "Cancer",
card = "Cardiovascular Diagnosis",
cardiohx = "Cardiovascular disease",
cat1 = "Primary disease category",
cat2 = "Secondary disease category",
chfhx = "Congestive Heart Failure",
chrpulhx = "Chronic Pulmonary Disease",
crea1 = "Creatinine",
death = "Death at 180 days")Créez ensuite un premier objet, que nous appelons results. La fonction utilisée s'appelle CreateTableOne et prend les arguments vars, strata et data. Nous indiquons que vars correspond à tous les noms de colonnes de rhc2 (names(rhc2)) et que strata est la colonne death. Nous obtiendrons ainsi une Table 1 stratifiée selon death. Nous précisons également que data provient de rhc2.
results <- CreateTableOne(vars=names(rhc2),
strata="death",
data=rhc2)À l'étape suivante, nous devons appliquer la fonction print() à l'objet précédent (results). Print sert à déterminer les informations que doit contenir la Table 1. Comme on le voit ci-dessous, de nombreux paramètres peuvent être ajustés selon les préférences de chacun.
results2 <- as_tibble(print(results,
# Nombre de décimales pour les variables catégorielles
catDigits=2,
# Nombre de décimales pour les variables continues
contDigits=1,
# Nombre de décimales pour les valeurs p
pDigits=5,
# Afficher les données manquantes dans une colonne
missing=TRUE,
# Indiquer s'il s'agit de moyennes, d'écarts-types ou de médianes
explain=TRUE,
# Ne pas afficher le résultat avant que nous le demandions
printToggle=FALSE,
# Présenter les valeurs p
test=TRUE,
# Présenter la différence moyenne standardisée
smd=TRUE,
# Supprimer les espaces inutiles
noSpaces=TRUE,
# Faut-il utiliser les labels des variables à la place ?
varLabels=TRUE,
# indiquer si une variable ne suit pas une distribution normale
nonnormal=c('age')),
# Faut-il conserver les noms de lignes, et si oui, comment nommer la colonne ?
rownames="Variable")
## Si vous utilisez un script R classique, affichez le résultat comme suit :
results2
## Si vous utilisez R Markdown, affichez le résultat comme suit :
library(knitr)
kableone(results2)Résultat
| Variable | Alive | Dead | P-value | SMD | Missing |
|---|---|---|---|---|---|
| n | 2013 | 3722 | |||
| ADL (mean (SD)) | 1.0 (1.7) | 1.4 (1.9) | <0.00001 | 0.24675 | 74.9 |
| Age (years) (median ) | 58.3 | 66.2 | <0.00001 | 0.45396 | 0.0 |
| Albumin (g/L) (mean (SD)) | 3.1 (0.7) | 3.1 (0.8) | 0.02534 | 0.06359 | 0.0 |
| Definite Myocardial Infarction (mean (SD)) | 0.0 (0.2) | 0.0 (0.2) | 0.67296 | 0.01163 | 0.0 |
| APACHE score (mean (SD)) | 49.5 (18.2) | 57.5 (20.3) | <0.00001 | 0.41676 | 0.0 |
| Bilirubin (mean (SD)) | 1.7 (3.3) | 2.6 (5.4) | <0.00001 | 0.18905 | 0.0 |
| Cancer (%) | <0.00001 | 0.45295 | 0.0 | ||
| Metastatic | 36 (1.79) | 348 (9.35) | |||
| No | 1758 (87.33) | 2621 (70.42) | |||
| Yes | 219 (10.88) | 753 (20.23) | |||
| Cardiovascular Diagnosis = Yes (%) | 645 (32.04) | 1286 (34.55) | 0.05874 | 0.05327 | 0.0 |
| Cardiovascular disease (mean (SD)) | 0.2 (0.4) | 0.2 (0.4) | 0.00157 | 0.08850 | 0.0 |
| Primary disease category (%) | <0.00001 | 0.44903 | 0.0 | ||
| ARF | 1019 (50.62) | 1471 (39.52) | |||
| CHF | 181 (8.99) | 275 (7.39) | |||
| Cirrhosis | 66 (3.28) | 158 (4.25) | |||
| Colon Cancer | 3 (0.15) | 4 (0.11) | |||
| Coma | 89 (4.42) | 347 (9.32) | |||
| COPD | 176 (8.74) | 281 (7.55) | |||
| Lung Cancer | 3 (0.15) | 36 (0.97) | |||
| MOSF w/Malignancy | 36 (1.79) | 363 (9.75) | |||
| MOSF w/Sepsis | 440 (21.86) | 787 (21.14) | |||
| Secondary disease category (%) | <0.00001 | 0.51537 | 79.1 | ||
| Cirrhosis | 6 (2.17) | 32 (3.46) | |||
| Colon Cancer | 0 (0.00) | 2 (0.22) | |||
| Coma | 20 (7.25) | 70 (7.58) | |||
| Lung Cancer | 0 (0.00) | 15 (1.62) | |||
| MOSF w/Malignancy | 20 (7.25) | 209 (22.62) | |||
| MOSF w/Sepsis | 230 (83.33) | 596 (64.50) | |||
| Congestive Heart Failure (mean (SD)) | 0.1 (0.4) | 0.2 (0.4) | <0.00001 | 0.13331 | 0.0 |
| Chronic Pulmonary Disease (mean (SD)) | 0.2 (0.4) | 0.2 (0.4) | 0.02294 | 0.06342 | 0.0 |
| Creatinine (mean (SD)) | 1.9 (2.0) | 2.3 (2.1) | <0.00001 | 0.17245 | 0.0 |
| Death at 180 days = Yes (%) | 0 (0.00) | 3722 (100.00) | <0.00001 | NaN | 0.0 |