Deskriptive Tabelle (Baseline, Table 1)

In vielen Bereichen (Medizin, Ökonomie usw.) ist eine einleitende Beschreibung der Studienpopulation erforderlich. Eine solche Beschreibung bildet in der Regel die Table 1 der Studie, also die erste Tabelle der Publikation. Die Erstellung der Table 1 gehört somit zu vielen Studien dazu. Für die Table 1 verwenden wir das Package tableone. Die Anwendung dieses Packages ist sehr einfach und wird im Folgenden Schritt für Schritt gezeigt.

Laden Sie zunächst tidyverse und installieren und laden Sie anschließend tableone:

## tidyverse laden
library(tidyverse)

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

## tableone laden
library(tableone)

In diesem Beispiel verwenden wir Right Heart Catetherization (RHC), eine klinische Studie. Laden Sie die Daten mit dem folgenden Befehl in R. Wie unten zu sehen ist, speichern wir die Daten im Objekt rhc.

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

Die Variablennamen in einem Data Frame eignen sich nicht immer für die Darstellung in einem Bericht. Deshalb verwenden wir das Package labelled, mit dem sich jeder Variablen ein Label (eine Beschriftung) zuweisen lässt, das in Präsentationen und Berichten verwendet werden kann. Installieren und laden Sie das Package labelled:

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

Aus den Daten in rhc wählen wir die Spalten (Variablen) aus, die in die Table 1 aufgenommen werden sollen.

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

Als Nächstes geben wir jeder Variablen ein Label. Dies geschieht mit folgendem Code:

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

Erstellen Sie dann das erste Objekt, das wir results nennen. Die verwendete Funktion heißt CreateTableOne und hat die Argumente vars, strata und data. Wir legen fest, dass vars alle Spaltennamen in rhc2 umfasst (names(rhc2)) und dass strata die Spalte death ist. Dadurch erhalten wir eine nach death stratifizierte Table 1. Außerdem geben wir an, dass data aus rhc2 stammt.

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

Im nächsten Schritt wenden wir die Funktion print() auf das vorherige Objekt (results) an. Mit print wird gesteuert, welche Informationen die Table 1 enthalten soll. Wie unten zu sehen ist, gibt es eine Reihe von Einstellungen, die sich nach Belieben anpassen lassen.

results2 <- as_tibble(print(results,
                             # Anzahl der Dezimalstellen bei kategorialen Variablen
                             catDigits=2,
                             # Anzahl der Dezimalstellen bei stetigen Variablen
                             contDigits=1,
                             # Anzahl der Dezimalstellen bei p-Werten
                             pDigits=5,
                             # Fehlende Werte in einer Spalte anzeigen
                             missing=TRUE,
                             # Angeben, ob es sich um Mittelwerte, SD oder Mediane handelt
                             explain=TRUE,
                             # Ergebnis erst ausgeben, wenn wir es anfordern
                             printToggle=FALSE,
                             # p-Werte darstellen
                             test=TRUE,
                             # Standardized Mean Difference darstellen
                             smd=TRUE,
                             # Unnötige Leerzeichen entfernen
                             noSpaces=TRUE,
                             # Sollen stattdessen die Variablen-Labels verwendet werden?
                             varLabels=TRUE,
                             # angeben, ob eine Variable nicht normalverteilt ist
                             nonnormal=c('age')),
                             # Sollen die Zeilennamen behalten werden, und wenn ja, wie soll die Spalte heißen?
                             rownames="Variable")

## Wenn Sie ein gewöhnliches R-Skript verwenden, geben Sie das Ergebnis wie folgt aus:
results2

## Wenn Sie R Markdown verwenden, geben Sie das Ergebnis wie folgt aus:
library(knitr)
kableone(results2)

Ergebnis

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