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