Deskriptiv tabell (baseline, Table 1)

Innen flere fagområder (medisin, økonomi osv.) trengs en innledende beskrivelse av studiepopulasjonen. Slike beskrivelser utgjør vanligvis studiens Table 1, som er den første tabellen i studien. Å lage Table 1 er dermed en del av mange studier. For å lage Table 1 bruker vi pakken tableone. Pakken er svært enkel å bruke, og vi viser den trinn for trinn nedenfor.

Begynn med å aktivere tidyverse, og installer og aktiver deretter tableone:

## Aktiver tidyverse
library(tidyverse)

## Installer tableone
install.packages("tableone")

## Aktiver tableone
library(tableone)

I dette eksempelet bruker vi Right Heart Catetherization (RHC), som er en klinisk studie. Last inn dataene i R med kommandoen nedenfor. Som det fremgår nedenfor, lagrer vi dataene i objektet rhc.

## Importer data
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)

Variabelnavnene i en data frame er ikke alltid egnet for presentasjon i en rapport. Derfor bruker vi pakken labelled, som gjør det mulig å gi hver variabel en label (etikett) som kan brukes i presentasjoner og rapporter. Installer og aktiver pakken labelled:

install.packages("labelled")
library(labelled)

Fra rhc-dataene velger vi de kolonnene (variablene) som skal være med i Table 1.

rhc2 <- select(rhc,
               adld3p,
               age,
               alb1,
               amihx,
               aps1,
               bili1,
               ca,
               card,
               cardiohx,
               cat1,
               cat2,
               chfhx,
               chrpulhx,
               crea1,
               death)

Vi fortsetter med å gi hver variabel en label. Det gjøres med følgende kode:

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")

Deretter lager vi det første objektet, som vi kaller results. Funksjonen vi bruker, heter CreateTableOne, og den har argumentene vars, strata og data. Vi angir at vars er lik alle kolonnenavnene i rhc2 (names(rhc2)), og at strata er kolonnen death. Dette gir oss en Table 1 stratifisert etter death. Vi spesifiserer også at data kommer fra rhc2.

results <- CreateTableOne(vars=names(rhc2),
                          strata="death",
                          data=rhc2)

I neste trinn må vi bruke funksjonen print() på det forrige objektet (results). Print brukes til å styre hvilken informasjon Table 1 skal inneholde. Som det fremgår nedenfor, finnes det en rekke innstillinger som kan justeres etter behov og smak.

results2 <- as_tibble(print(results,
                             # Antall desimaler for kategoriske variabler
                             catDigits=2,
                             # Antall desimaler for kontinuerlige variabler
                             contDigits=1,
                             # Antall desimaler for p-verdier
                             pDigits=5,
                             # Vis missing i en kolonne
                             missing=TRUE,
                             # Angi om det er gjennomsnitt, SD eller medianer
                             explain=TRUE,
                             # Ikke skriv ut resultatet før vi ber om det
                             printToggle=FALSE,
                             # Presenter P-verdier
                             test=TRUE,
                             # Presenter standardized mean difference
                             smd=TRUE,
                             # Fjern unødvendige mellomrom
                             noSpaces=TRUE,
                             # Skal variabel-labels brukes i stedet?
                             varLabels=TRUE,
                             # angi om noen variabel ikke er normalfordelt
                             nonnormal=c('age')),
                             # Skal radnavnene beholdes, og i så fall hva skal kolonnen hete?
                             rownames="Variable")

## Hvis du bruker et vanlig R-skript, skriver du ut resultatet slik:
results2

## Hvis du bruker R Markdown, skriver du ut resultatet slik:
library(knitr)
kableone(results2)

Resultat

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 IQRIQR) 58.3 43.3,70.343.3, 70.3 66.2 54.3,75.654.3, 75.6 <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