Inden for flere områder (medicin, økonomi osv.) er der brug for en indledende beskrivelse af studiepopulationen. Sådanne beskrivelser udgør normalt studiets Table 1, som er den første tabel i studiet. Udarbejdelse af Table 1 er således en del af mange studier. For at lave Table 1 bruger vi pakken tableone. Det er meget enkelt at bruge denne pakke, og det vises trin for trin herunder.
Start med at aktivere tidyverse samt installere og aktivere tableone:
## Aktivér tidyverse
library(tidyverse)
## Installér tableone
install.packages("tableone")
## Aktivér tableone
library(tableone)I dette eksempel bruger vi Right Heart Catetherization (RHC), som er et klinisk studie. Hent data ind i R med nedenstående kommando. Som det fremgår nedenfor, gemmer vi data i objektet rhc.
## Importér data
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)Variabelnavnene i en data frame er ikke altid egnede til præsentation i en rapport. Derfor bruger vi pakken labelled, som gør det muligt at give hver variabel en label (etiket), der kan bruges i præsentationer og rapporter. Installér og aktivér pakken labelled:
install.packages("labelled")
library(labelled)Fra rhc-data vælger vi de kolonner (variabler), der skal indgå i Table 1.
rhc2 <- select(rhc,
adld3p,
age,
alb1,
amihx,
aps1,
bili1,
ca,
card,
cardiohx,
cat1,
cat2,
chfhx,
chrpulhx,
crea1,
death)Vi fortsætter med at give hver variabel en label. Det gø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")Opret derefter det første objekt, som vi kalder results. Funktionen, vi bruger, hedder CreateTableOne, og den har argumenterne vars, strata og data. Vi angiver, at vars er lig med alle kolonnenavnene i rhc2 (names(rhc2)), og at strata er kolonnen death. Det giver os en Table 1 stratificeret efter death. Vi angiver også, at data kommer fra rhc2.
results <- CreateTableOne(vars=names(rhc2),
strata="death",
data=rhc2)I næste trin skal vi anvende funktionen print() på det foregående objekt (results). Print bruges til at styre, hvilke oplysninger Table 1 skal indeholde. Som det fremgår herunder, er der en række indstillinger, der kan justeres efter smag og behov.
results2 <- as_tibble(print(results,
# Antal decimaler for kategoriske variabler
catDigits=2,
# Antal decimaler for kontinuerte variabler
contDigits=1,
# Antal decimaler for p-værdier
pDigits=5,
# Vis manglende værdier (missing) i en kolonne
missing=TRUE,
# Angiv, om det er middelværdier, SD eller medianer
explain=TRUE,
# Udskriv ikke resultatet, før vi beder om det
printToggle=FALSE,
# Præsentér p-værdier
test=TRUE,
# Præsentér standardized mean difference
smd=TRUE,
# Fjern unødvendige mellemrum
noSpaces=TRUE,
# Skal variablernes labels bruges i stedet?
varLabels=TRUE,
# angiv, om nogen variabel ikke er normalfordelt
nonnormal=c('age')),
# Skal rækkenavnene bevares, og hvad skal kolonnen i så fald hedde?
rownames="Variable")
## Hvis du bruger et almindeligt R-script, udskriver du resultatet sådan her:
results2
## Hvis du bruger R Markdown, udskriver du resultatet sådan her:
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 |