Einführung in R Programming

Tag 4 - Überlebenszeitanalysen

Andreas Mock

Überlebenszeitanalyse

Kaum eine klinische Studie kommt ohne Überlebenszeitanalysen aus. Deshalb sollte die sachkundige Durchführung und Interpretation dieser zum Rüstzeug jedes Mediziners gehören.

Terminologie

Überlebenszeitanalyse

Terminologie

Überlebenszeitanalyse

Pakete

Datensatz

Wir werden wieder mit dem hnscc-Datensatz arbeiten.

Überlebenszeitanalyse

Für eine vergleichende Überlebenszeitanalysen benötigen wir drei Informationen:

  1. die Zeit bis zu einem Event (z.B. Tod oder Progress)
  2. der Censor (binäre Info ob Event eingetroffen ist, z.B. 1 = tod, 0 = lebend)
  3. den zu untersuchenden Einflussfaktor (diskrete oder kontinuierliche Daten)
# 1. Zeit bis zum Tod
summary(hnscc$days_to_death)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
##     0.0   218.8   443.0   789.0   999.2  6416.0       1
# 2. Censor
table(hnscc$vital_status)
## 
## DECEASED   LIVING 
##      116      163
# 3. den zu untersuchenden Einflussfaktor
colnames(hnscc)[-c(1,4,11)]
## [1] "age"           "alcohol"       "gender"        "neoplasm_site"
## [5] "grade"         "pack_years"    "tabacco_group" "tumor_stage"

Datentransformation für Überlebenszeitanalyse

  1. Der Censor muss ein numerischer Vektor aus 0 (=Event nicht eingetreten) und 1 (=Event eingetreten) sein.
  2. Die Zeit bis zu einem Event (z.B. Tod) muss numerisch sein.

Diese Datentransformation entspricht der Übung 1 des heutigen Tages. Hierbei werden wir für die weitere Analyse ein eigenes Objekt hnscc_survival erstellen.

Erstellung eines survival Objektes

Für Überlebenszeitanalysen in R gilt es von so genannten survival Objekten gebrauch zu machen. Diese sind Teil des survival Pakets.

Die Syntax ist straightforward:

head(Surv(hnscc_survival$OS, hnscc_survival$Censor))
## [1]  461   415  1134   276   248+  190+

Kaplan-Meier-Kurve

Der Klassiker der Visualisierung von Überlebenszeitanalysen ist die so genannte Kaplan-Meier-Kurve.

Wichtig: Überlebenszeitanalysen können auch für kontinuierliche Einflussfaktoren durchgeführt werden. Hier macht natürlich eine Visualisierung mittels Kaplan-Meier-Kurve keinen Sinn.

Für diese müssen wir noch die Gruppenzugehörigkeit angeben, und das Objekt für den Plot mit survfit herstellen:

median(hnscc_survival$age)
## [1] 61
fit <- survfit(Surv(OS, Censor)~age>61, data=hnscc_survival)
fit
## Call: survfit(formula = Surv(OS, Censor) ~ age > 61, data = hnscc_survival)
## 
##    1 observation deleted due to missingness 
##                  n events median 0.95LCL 0.95UCL
## age > 61=FALSE 139     50   1591    1037    3314
## age > 61=TRUE  139     66    822     572    2166

Kaplan-Meier-Kurve

ggsurvplot(fit, hnscc_survival)

Univariate Überlebenszeitanalyse

library(broom)

# Beispiel 1: Alter dichotomisiert nach > Median (= 61 Jahre)
tidy(coxph(Surv(OS, Censor)~age>61, data=hnscc_survival),
     exponentiate = TRUE)
## # A tibble: 1 x 5
##   term         estimate std.error statistic p.value
##   <chr>           <dbl>     <dbl>     <dbl>   <dbl>
## 1 age > 61TRUE     1.54     0.189      2.27  0.0229
# Beispiel 2: Alter als kontiniuerliche Variable
tidy(coxph(Surv(OS, Censor)~age, data=hnscc_survival),
     exponentiate = TRUE)
## # A tibble: 1 x 5
##   term  estimate std.error statistic p.value
##   <chr>    <dbl>     <dbl>     <dbl>   <dbl>
## 1 age       1.02   0.00827      2.69 0.00718

Estimate = HR

Univariate Überlebenszeitanalyse

# Bespiel 3: Tabacco Group

table(hnscc_survival$tabacco_group)
## 
## Current reformed smoker for < or = 15 years 
##                                          81 
##      Current reformed smoker for > 15 years 
##                                          49 
##                              Current smoker 
##                                          90 
##                         Lifelong Non-smoker 
##                                          52
tidy(coxph(Surv(OS, Censor)~tabacco_group, data=hnscc_survival),
     exponentiate = TRUE)
## # A tibble: 3 x 5
##   term                                      estimate std.error statistic p.value
##   <chr>                                        <dbl>     <dbl>     <dbl>   <dbl>
## 1 tabacco_groupCurrent reformed smoker for~    0.572     0.290    -1.93   0.0542
## 2 tabacco_groupCurrent smoker                  1.14      0.234     0.551  0.582 
## 3 tabacco_groupLifelong Non-smoker             0.482     0.307    -2.38   0.0173

Multivariate Überlebenszeitanalyse

In der multivariaten Überlebenszeitanalyse kombinieren wir die Einflussfaktoren zusammen, die univariat signifikant waren. Wir wollen herausfinden, ob diese unabhängige Einflussfaktoren sind.

# Beispielmodel: Alter und Tabacco group
tidy(coxph(Surv(OS, Censor)~age + tabacco_group, data=hnscc_survival),
     exponentiate = TRUE)
## # A tibble: 4 x 5
##   term                                      estimate std.error statistic p.value
##   <chr>                                        <dbl>     <dbl>     <dbl>   <dbl>
## 1 age                                          1.02    0.00931     2.58  0.00986
## 2 tabacco_groupCurrent reformed smoker for~    0.520   0.292      -2.23  0.0255 
## 3 tabacco_groupCurrent smoker                  1.22    0.235       0.838 0.402  
## 4 tabacco_groupLifelong Non-smoker             0.553   0.309      -1.92  0.0552