Inom flera områden (medicin, ekonomi, etc) behövs en inledande beskrivning av studiepopulationen. Sådana beskrivningar brukar utgöra studiens Table 1, vilket är den första tabellen i studien. Produktion av Table 1 är således en del av många studier. För att skapa Table 1 använder vi paketet tableone. Användning av detta paketet är mycket enkelt och visas steg för steg här nedan.
Börja med att aktivera tidyverse, samt installera och aktivera tableone:
## Aktivera tidyverse
library(tidyverse)
## Installera tableone
install.packages("tableone")
## Aktivera tableone
library(tableone)I detta exempel använder vi Right Heart Catetherization (RHC), som är en klinisk studie. Ladda ner data till R genom nedanstående kommando. Som framgår nedan sparar vi data till objektet rhc.
## Importera data
rhc <- read.csv("https://hbiostat.org/data/repo/rhc.csv", header = TRUE)Variabelnamnen i en data frame är inte alltid lämpliga för presentation i en rapport. Därför använder vi paketet labelled, vilket gör det möjligt att ge varje variabel en label (etikett), som kan användas i presentationer och rapporter. Installera och aktivera paketet labelled:
install.packages("labelled")
library(labelled)Från rhc data väljer vi de kolumner (variabler) som skall vara med i Table 1.
rhc2 <- select(rhc,
adld3p,
age,
alb1,
amihx,
aps1,
bili1,
ca,
card,
cardiohx,
cat1,
cat2,
chfhx,
chrpulhx,
crea1,
death)Vi fortsätter genom att ge varje variabel en label. Det görs genom följande kod:
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")Skapa sedan första objektet, som vi kallar results. Funktionen vi använder heter CreateTableOne och den har argumenten vars, strata och data. Vi anger att vars är lika med alla kolumnnamnen i rhc2 (names(rhc2)), och att strata är kolumnen death. Detta kommer ge oss en Table 1 stratifierat på death. Vi specificerar också att data kommer från rhc2.
results <- CreateTableOne(vars=names(rhc2),
strata="death",
data=rhc2)I nästa steg behöver vi tillämpa funktionen print() på föregående objekt (results). Print används för att styra vilken information som Table 1 skall innehålla. Som framgår här nedan finns en rad inställningar som kan justeras efter tycke och smak.
results2 <- as_tibble(print(results,
# Antal decimaler på kategoriska variabler
catDigits=2,
# Antal decimaler på kontinuerliga variabler
contDigits=1,
# Antal decimaler på p-värden
pDigits=5,
# Visa missing i en kolumn
missing=TRUE,
# Ange om det är medelvärden, SD eller medianer
explain=TRUE,
# Skriv inte ut resultatet förrän vi ber om det
printToggle=FALSE,
# Presentera P-värden
test=TRUE,
# Presentera standardized mean difference
smd=TRUE,
# Ta bort onödiga mellanrum
noSpaces=TRUE,
# Ska variabel labels användas istället?
varLabels=TRUE,
# ange om någon variabel inte är normalfördelad
nonnormal=c('age')),
# Ska radnamnen behållas, i så fall vad skall kolumnen heta?
rownames="Variable")
## Om du använder ett vanligt R-skript skriver du ut resultatet som följer:
results2
## Om du använder R Markdown skriver du ut resultatet som följer:
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 |