PDF-Version

Aufgabe 1-1: Zeigen Sie, dass folgende Beziehungen aus der Vorlesung gelten:

a) \(f(t) = - \frac{\mathrm{d} S(t)}{\mathrm{d}t}\)

\[\begin{aligned} f(t) &= \frac{\mathrm{d} F(t)}{\mathrm{d}t} \\ &= \frac{\mathrm{d} (1 - S(t))}{\mathrm{d}t} && \bigg|\ S(t) := 1 - F(t) \Rightarrow F(t) = 1 - S(t) \\ &= \frac{\mathrm{d} (-S(t))}{\mathrm{d}t} \\ &= - \frac{\mathrm{d} S(t)}{\mathrm{d}t} \end{aligned}\]

b) \(\lambda(t) = \frac{f(t)}{S(t)}\)

\[\begin{aligned} \lambda(t) &= \lim_{\Delta t \to 0} \frac{\mathrm{Pr}\left(t \leq T < t + \Delta t \ |\ T \geq t\right)}{\Delta t} \\ &= \lim_{\Delta t \to 0} \frac{\mathrm{Pr}\left( \{t \leq T < t + \Delta t \} \cap \{T \geq t\} \right)}{\mathrm{Pr}(T \geq t)\ \Delta t} && \bigg|\ \mathrm{Pr}(A\ |\ B) = \frac{\mathrm{Pr}(A \cap B)}{\mathrm{Pr}(B)} \\ &= \lim_{\Delta t \to 0} \frac{\mathrm{Pr}\left(t \leq T < t + \Delta t\right)}{\mathrm{Pr}(T \geq t)\ \Delta t} && \bigg|\ \mathrm{Pr}(T \geq t) =: S(t) \\ &= \frac{1}{S(t)} \lim_{\Delta t \to 0} \frac{F(t + \Delta t) - F(t)}{\ \Delta t} && \bigg|\ \lim_{\Delta t \to 0} \frac{F(t + \Delta t) - F(t)}{\ \Delta t} = \frac{\mathrm{d}F(t)}{\mathrm{d}t} = f(t)\\ &= \frac{f(t)}{S(t)} \end{aligned}\]

c) \(\frac{f(t)}{S(t)} = - \frac{\mathrm{d} \log (S(t))}{\mathrm{d}t}\)

\[\begin{aligned} - \frac{\mathrm{d} \log(S(t)}{\mathrm{d}t} &= - \left(\frac{1}{S(t)} \cdot \frac{\mathrm{d} S(t)}{\mathrm{d}t}\right) && \bigg|\ \text{Kettenregel} \\ &= \frac{- \frac{\mathrm{d} S(t)}{\mathrm{d}t}}{S(t)} \\ &\underset{\text{a)}}{=} \frac{f(t)}{S(t)} \end{aligned}\]

d) \(S(t) = \exp(-\Lambda(t))\)

\[\begin{aligned} S(t) &= \exp(-\Lambda(t)) \\ &= \exp\left(- \int \lambda(t)\ \mathrm{d}t\right) \\ &\underset{\text{b), c)}}{=} \exp\left(- \int_0^t - \frac{\mathrm{d}\log(S(u))}{\mathrm{d}u}\ \mathrm{d}u\right) \\ &= \exp\left(\log S(t)\right) \\ &= S(t) \end{aligned}\]

Aufgabe 1-2

In der folgenden Tabelle sid Werte der Ereigniszeit (Länge des Follow-up) für je sechs Männer und Frauen angegeben. Rechts-zensierte Zeiten sind mit einem "*" gekennzeichnet.

Männer 1 3 4* 10 12 18
Frauen 1 3* 6 10 11 12*

a)

Berechnen Sie per Hand die Kaplan-Meier-Schätzungen der Survivalfunktion getrennt nach Geschlecht und erstellen Sie daraus ein Kaplan-Meier-Diagramm.

\[\begin{aligned} \widehat{S} = \prod^k_{j=1} \frac{(n_j - d_j)}{n_j} \end{aligned}\]

d1_2_long %>%
  filter(sex == "Männer") %>%
  mutate(
    n = rev(seq_len(n())),
    d = ifelse(censored, 0, 1),
    ndt = (n - d) / n,
    surv = cumprod(ndt)
  ) %>%
  select(survtime, n, d, ndt, surv) %>%
  add_row(survtime = 0, n = 6, d = 0, ndt = 1, surv = 1) %>%
  arrange(survtime) -> survtab_m

d1_2_long %>%
  filter(sex == "Frauen") %>%
  mutate(
    n = rev(seq_len(n())),
    d = ifelse(censored, 0, 1),
    ndt = (n - d) / n,
    surv = cumprod(ndt)
  ) %>%
  select(survtime, n, d, ndt, surv) %>%
  add_row(survtime = 0, n = 6, d = 0, ndt = 1, surv = 1) %>%
  arrange(survtime) -> survtab_f

full_join(
  survtab_m %>% rename_all(~paste0("m", .x)),
  survtab_f %>% rename_all(~paste0("f", .x)),
  by = c("msurvtime" = "fsurvtime")
) %>%
  arrange(msurvtime) %>%
  mutate_if(is.numeric, round, 3) %>%
  mutate_all(~{
    ifelse(is.na(.x), "", .x)
  }) %>%
  kable(
    booktabs = TRUE, escape = FALSE,
    col.names = c(
      "$t$", 
      "$n_j$", "$d_j$", "$\\frac{n_j - d_j}{n_j}$", "$\\widehat{S}(t)$",
      "$n_j$", "$d_j$", "$\\frac{n_j - d_j}{n_j}$", "$\\widehat{S}(t)$"
    )
  ) %>%
  kable_styling(
    protect_latex = TRUE, latex_options = c("striped")
  ) %>%
  add_header_above(header = c(" " = 1, "Männer" = 4, "Frauen" = 4))
Männer
Frauen
\(t\) \(n_j\) \(d_j\) \(\frac{n_j - d_j}{n_j}\) \(\widehat{S}(t)\) \(n_j\) \(d_j\) \(\frac{n_j - d_j}{n_j}\) \(\widehat{S}(t)\)
0 6 0 1 1 6 0 1 1
1 6 1 0.833 0.833 6 1 0.833 0.833
3 5 1 0.8 0.667 5 0 1 0.833
4 4 0 1 0.667
6 4 1 0.75 0.625
10 3 1 0.667 0.444 3 1 0.667 0.417
11 2 1 0.5 0.208
12 2 1 0.5 0.222 1 0 1 0.208
18 1 1 0 0
bind_rows(
  survtab_m %>% mutate(Gruppe = "Männer"), 
  survtab_f %>% mutate(Gruppe = "Frauen")
  ) %>% {
    ggplot(., aes(x = survtime, y = surv, color = Gruppe)) +
    geom_step() +
    geom_point(data = filter(., d == 0, survtime > 0), shape = 8, size = 3) +
    scale_y_percent(limits = c(0, 1)) +
    scale_color_brewer(palette = "Dark2") +
    labs(
      title = "Kaplan-Meier-Diagramm",
      subtitle = "Markierung: Zensierung",
      x = expression(t), y = expression(widehat(S)(t))
    ) +
      theme(legend.position = "bottom")
  }

b)

Berechnen Sie per Hand die Nelson-Aalen-Schätzung der Survivalfunktion getrennt nach Geschlecht und erstellen Sie daraus ein Nelson-Aalen-Diagramm.

\[\begin{aligned} \widetilde{S} = \prod^k_{j=1} \exp(-d_j/n_j) \end{aligned}\]

d1_2_long %>%
  filter(sex == "Männer") %>%
  mutate(
    n = rev(seq_len(n())),
    d = ifelse(censored, 0, 1),
    expdn = exp(-d / n),
    surv = cumprod(expdn)
  ) %>%
  select(survtime, n, d, expdn, surv) %>%
  add_row(survtime = 0, n = 6, d = 0, expdn = 1, surv = 1) %>%
  arrange(survtime) -> survtab_na_m

d1_2_long %>%
  filter(sex == "Frauen") %>%
  mutate(
    n = rev(seq_len(n())),
    d = ifelse(censored, 0, 1),
    expdn = exp(-d / n),
    surv = cumprod(expdn)
  ) %>%
  select(survtime, n, d, expdn, surv) %>%
  add_row(survtime = 0, n = 6, d = 0, expdn = 1, surv = 1) %>%
  arrange(survtime) -> survtab_na_f

full_join(
  survtab_na_m %>% rename_all(~paste0("m", .x)),
  survtab_na_f %>% rename_all(~paste0("f", .x)),
  by = c("msurvtime" = "fsurvtime")
) %>%
  arrange(msurvtime) %>%
  mutate_if(is.numeric, round, 3) %>%
  mutate_all(~{
    ifelse(is.na(.x), "", .x)
  }) %>%
  kable(
    booktabs = TRUE, escape = FALSE,
    col.names = c(
      "$t$", 
      "$n_j$", "$d_j$", "$\\exp(- d/n)$", "$\\widetilde{S}(t)$",
      "$n_j$", "$d_j$", "$\\exp(- d/n)$", "$\\widetilde{S}(t)$"
    )
  ) %>%
  kable_styling(
    protect_latex = TRUE, latex_options = c("striped")
  ) %>%
  add_header_above(header = c(" " = 1, "Männer" = 4, "Frauen" = 4))
Männer
Frauen
\(t\) \(n_j\) \(d_j\) \(\exp(- d/n)\) \(\widetilde{S}(t)\) \(n_j\) \(d_j\) \(\exp(- d/n)\) \(\widetilde{S}(t)\)
0 6 0 1 1 6 0 1 1
1 6 1 0.846 0.846 6 1 0.846 0.846
3 5 1 0.819 0.693 5 0 1 0.846
4 4 0 1 0.693
6 4 1 0.779 0.659
10 3 1 0.717 0.497 3 1 0.717 0.472
11 2 1 0.607 0.287
12 2 1 0.607 0.301 1 0 1 0.287
18 1 1 0.368 0.111
bind_rows(
  survtab_na_m %>% mutate(Gruppe = "Männer"), 
  survtab_na_f %>% mutate(Gruppe = "Frauen")
  ) %>% {
    ggplot(., aes(x = survtime, y = surv, color = Gruppe)) +
    geom_step() +
    geom_point(data = filter(., d == 0, survtime > 0), shape = 8, size = 3) +
    scale_y_percent(limits = c(0, 1)) +
    scale_color_brewer(palette = "Dark2") +
    labs(
      title = "Nelson-Aalen-Diagramm",
      subtitle = "Markierung: Zensierung",
      x = expression(t), y = expression(widetilde(S)(t))
    ) +
      theme(legend.position = "bottom")
  }

c)

Erklären Sie in eigenen Worten den Unterschied zwischen Kaplan-Meier- und Nelson-Aalen-Methode.

Während K-M direkt \(S(t)\) schätzt, schätzt N-A \(\Lambda(t)\), aber aufgrund des Zusammenhangs aus A1-1d) lässt sich daraus auch eine Schätzung für \(S(t)\) ableiten.
Beide Methoden sind asymptotisch äquivalent, allerdings ist N-A für kleine Stichproben, bzw. für die Verwendung parametrischer Verfahren besser geeignet.

d)

Berechnen Sie per Hand Punktschätzer für den Median sowie für das 25. und 75. Perzentil getrennt nach Geschlecht.

Für die Perzentile gilt \(\widehat{t}(p \cdot 100) = \min\left\{t_{(j)}\ \big|\ \widehat{S}(t_{(j)}) < 1-p\right\}\), demnach ergibt sich auf Basis der Tabelle aus a):

tribble(
  ~gruppe, ~p, ~tp,
  "Männer", 25, 3,
  "Männer", 50, 10, 
  "Männer", 75, 12,  
  "Frauen", 25, 6,
  "Frauen", 50, 10, 
  "Frauen", 75, 11 
) %>%
  spread(gruppe, tp) %>%
  kable2(
    escape = FALSE,
    col.names = c("Perzentil", "Frauen\n$\\widehat{t}(p)$", "Männer\n$\\widehat{t}(p)$")
  ) %>%
  kable_styling2(
    protect_latex = TRUE
  )
Perzentil Frauen \(\widehat{t}(p)\) Männer \(\widehat{t}(p)\)
25 6 3
50 10 10
75 11 12

(Oder vielleicht auch andersrum, i.e. das 25er ist eigentlich das 75er-Quantil, es war nicht so ganz klar in den Folien und ich habe mich an das gehalten, was ?survival::quantile.survfit sagt.)