Sie sind auf Seite 1von 6

---

title: "DRE - 4. Übung"


subtitle: "Kaplan-Meier-Verfahren"
output: html_document
---

## Einleitung Kaplan-Meier-Verfahren
Das nicht-parametrische Verfahren nach Kaplan und Meier schätzt im Gegensatz
zu anderen Methoden die *survival function* $S(t)=P(T>t)$, bzw.
Zuverlässigkeitsfunktion $R(t)$, also die Wahrscheinlichkeit, dass eine
Einheit den Zeitpunkt $t$ überlebt. Anwendbar ist diese Methode ebenfalls auf
(multipel) rechtszensierte Daten.

Der Kaplan-Meier Schätzer für die Zuverlässigkeitsfunktion ist gegeben durch:


$$R_i(t)=\prod_{i:t_i\leq t}\left(\frac{n_i-d_i}{n_i} \right)$$
Dabei steht $t_i$ für den Zeitpunkt, zu dem sich mindestens ein Ausfall ereignete,
$d_i$ für die Anzahl der Einheiten, die zum Zeitpunkt $t_i$ ausgefallen sind
und $n_i$ für die Anzahl der Einheiten, die zum Zeitpunkt $t_i$ weder ausgefallen,
noch zensiert sind.
Die Ausfallwahrscheinlichkeiten lassen sich als Gegenstück der
Zuverlässigkeitsfunktion
bestimmen:
$$F_i(t)=1-R_i(t)=1-\prod_{i:t_i\leq t}\left(\frac{n_i-d_i}{n_i} \right)$$

## Einbinden/Installieren der benötigten R Packages


```{r, Packages laden, message = FALSE, warning = FALSE}
if (!require(weibulltools)) {
install.packages("weibulltools") # Installationsroutine
require(weibulltools) # Einbinden des Packages
}

if (!require(tidyverse)) {
install.packages("tidyverse") # Installationsroutine
require(tidyverse) # Einbinden des Packages
}

if (!require(plotly)) {
install.packages("plotly") # Installationsroutine
require(plotly) # Einbinden des Packages
}
```

## Aufgabe 1 Vergleich zwischen Kaplan-Meier und anderen Schätzern

Bei einem Versuch sind fünf von zehn Probanden ausgefallen. Damit sind fünf
Probanden ohne Schaden geblieben. Die beiliegende Tabelle fasst den Versuch
zusammen.

i | Lastzyklen | Status
:-----: | :-----: | :-----:
1 | 10.000 | F
2 | 18.000 | F
3 | 40.000 | F
4 | 75.000 | F
5 | 90.000 | F
6 | 160.000 | S
7 | 25.000 | S
8 | 50.000 | S
9 | 100.000 | S
10 | 150.000 | S

1. Bestimmen Sie die Weibullparameter b und T nach dem Kaplan-Meier-Verfahren.


Visualisieren Sie Ihre Ergebnisse im Weibull-Wahrscheinlichkeitsnetz.
2. Berechnen Sie die Weibullparameter b und T mit dem Medianrang-Schätzer und
vergleichen Sie die neuen Werte mit den Werten nach Kaplan und Meier.
3. Berechnen Sie die Weibullparameter b und T nach dem Nelson-Verfahren und
vergleichen Sie die neuen Werte mit den Werten nach Kaplan und Meier.

Lösung zu Aufgabenteil 1:

```{r, Aufgabe 1 - Teil 1, warning = FALSE}


# Aufgabenteil 1: Kaplan-Meier und Visualisierung im Wahrscheinlichkeitsnetz:

# Daten erzeugen:
cycles <- c(10000, 18000, 40000, 75000, 90000, 160000, 25000, 50000, 100000,
150000)
status <- c(1, 1, 1, 1, 1, 0, 0, 0, 0, 0)

# Wahrscheinlichkeitsschätzungen nach K-M:


km_cycles <- kaplan_method(x = cycles, event = status)
km_cycles

# Rang-Regression mit den geschätzten Ausfallwahrscheinlichkeiten nach K-M:


km_reg <- rank_regression(x = km_cycles$characteristic,
y = km_cycles$prob, event = km_cycles$status)
km_reg

# Visualisierung:
km_plot <- plot_prob(x = km_cycles$characteristic, y = km_cycles$prob,
event = km_cycles$status, title_main = "Weibull - Wahrscheinlichkeitsnetz",
title_x = "Lastzyklen", title_y = "Ausfallwahrscheinlichkeit in %",
title_trace = "Ausfälle (K-M)") %>%
plot_mod(x = km_cycles$characteristic, loc_sc_params =
km_reg$loc_sc_coefficients,
title_trace = "RR - K-M (x on y)")
km_plot
```

Lösung zu Aufgabenteil 2:

```{r, Aufgabe 1 - Teil 2, warning = FALSE}


# Aufgabenteil 2: Medianrang-Regression und Visualisierung im selbigen
# Wahrscheinlichkeitsnetz:

# Medianrang-Schätzungen:
mr_cycles <- mr_method(x = cycles[1:5])
mr_cycles

# Medianrang-Regression:
mrr_cycles <- rank_regression(x = mr_cycles$characteristic, y = mr_cycles$prob,
event = mr_cycles$status)
mrr_cycles

# Medianrang - Regressionsgerade: Vorbereitung


plot_mr_reg <- predict_prob(q = c(5000, 150000), loc_sc_params =
mrr_cycles$loc_sc_coefficients,
distribution = "weibull")
# Visualisierung im obigen Wahrscheinlichkeitsnetz:
km_mrr_plot <- km_plot %>%
add_trace(data = mr_cycles, type = "scatter", mode = "markers", x =
~characteristic,
y = ~SPREDA::qsev(prob), name = "Ausfälle (MR)", color = I("#006400"),
hoverinfo = "text", text = ~paste(paste("Lastzyklen", ":", characteristic),
paste("<br>", paste0("Ausfallwahrscheinlichkeit", ":")), round(prob, digits =
5))) %>%
add_lines(x = c(5000, 150000), y = SPREDA::qsev(plot_mr_reg),
name = "MRR (x on y)", color = I("#29AB87"),
hoverinfo = "text", hoverinfo = "text",
text = ~paste(paste("T<sub>MRR</sub>", ":", round(mrr_cycles$coefficients[[1]],
digits = 2)),
"<br>", paste("b<sub>MRR</sub>", ":",
round(mrr_cycles$coefficients[[2]], digits = 2))))
km_mrr_plot
```

Lösung zu Aufgabenteil 3:

```{r, Aufgabe 1 - Teil 3, warning = FALSE}


# Aufgabenteil 3: Rang-Regression mit geschätzten Ausfallwahrscheinlichkeiten
# nach Nelson und Visualisierung des Ergebnisses im Wahrscheinlichkeitsnetz aus
Teil 1:

# Nelson-Verfahren:
nel_cycles <- nelson_method(x = cycles, event = status)
nel_cycles

# Rang-Regression mit geschätzten Wahrscheinlichkeiten nach Nelson:


nel_reg <- rank_regression(x = nel_cycles$characteristic, y = nel_cycles$prob,
event = nel_cycles$status)
nel_reg

# Regressionsgerade für Nelson: Vorbereitung


plot_nel_reg <- predict_prob(q = c(5000, 150000), loc_sc_params =
nel_reg$loc_sc_coefficients,
distribution = "weibull")

# Visualisierung im obigen Wahrscheinlichkeitsnetz aus Aufgabenteil 1:


km_nel_plot <- km_plot %>%
add_trace(data = nel_cycles, type = "scatter", mode = "markers", x =
~characteristic,
y = ~SPREDA::qsev(prob), name = "Ausfälle (Nelson)", color = I("#006400"),
hoverinfo = "text", text = ~paste(paste("Lastzyklen", ":", characteristic),
paste("<br>", paste0("Ausfallwahrscheinlichkeit", ":")), round(prob, digits =
5))) %>%
add_lines(x = c(5000, 150000), y = SPREDA::qsev(plot_nel_reg),
name = "RR - Nelson (x on y)", color = I("#29AB87"),
hoverinfo = "text", hoverinfo = "text",
text = ~paste(paste("T<sub>Nel</sub>", ":", round(nel_reg$coefficients[[1]],
digits = 2)),
"<br>", paste("b<sub>Nel</sub>", ":",
round(nel_reg$coefficients[[2]], digits = 2))))
km_nel_plot
```

## Aufgabe 2 - Besonderheiten des Kaplan-Meier Schätzers


Ein Versuch mit $n=144$ Probanden liefert folgendes Bild:

i | Lebensdauer $t_i$ (km) | Bei $t_i$ aus Versuch entfernt


:-----: | :-----: | :-----:
1 | 10.000 | 10 S
2 | 20.000 | 10 S und 3 F
3 | 30.000 | 20 S und 8 F
4 | 40.000 | 10 S
5 | 50.000 | 20 S
6 | 60.000 | 10 S und 7 F
7 | 70.000 | 10 S und 3 F
8 | 80.000 | 10 S und 5 F
9 | 88.000 | 8 F
10 | 100.000 | 10 F

Bestimmen Sie die Weibullparameter b und T nach dem Kaplan-Meier Verfahren.

Lösung zur Aufgabe 2:

```{r, Aufgabe 2 - Teil 1}


# Aufgabenteil 1: K-M, wobei Einheiten mit höchster Lebensdauer Ausfälle sind.

# Zuerst manuelle Berechnung:


versuch <- data.frame(t = c(10000, 20000, 30000, 40000, 50000, 60000, 70000,
80000, 88000, 100000),
n_i = c(144, 134, 121, 93, 83, 63, 46, 33, 18, 10),
d_i = c(0, 3, 8, 0, 0, 7, 3, 5, 8, 10))

# K-M-Schätzer (manuell):
versuch_km <- versuch %>%
mutate(term = (n_i - d_i) / n_i, cumprod_term = cumprod(term),
wkt = ifelse(d_i != 0, yes = 1 - cumprod_term, no = NA_real_))
versuch_km
```

Bleibt zum Versuchsende nicht mindestens ein Survivor übrig, so liefert der
klassische Kaplan-Meier-Schätzer rein rechnerisch stets eine
Ausfallwahrscheinlichkeit von 1. Dieses Resultat ist im Kontext der
Lebensdaueranalyse zu pessimistisch und sollte als ein Grenzfall betrachtet werden:
$$\lim\limits_{t \to \infty}F(t)=1$$
In der Funktion `kaplan_method` wurde der herkömmliche Schätzer so modifiziert,
dass die Ausfallwahrscheinlichkeit stets kleiner als 1 ist.

```{r, Aufgabe 2 - Teil 1.2, warning = FALSE}


# Aufgabenteil 1.2: K-M, wobei Einheiten mit höchster Lebensdauer Ausfälle sind.

# Verwendung von kaplan_method():


lebensdauer <- c(rep(10000, 10), rep(20000, 13), rep(30000, 28), rep(40000, 10),
rep(50000, 20), rep(60000, 17), rep(70000, 13), rep(80000, 15), rep(88000, 8),
rep(100000, 10))
status <- c(rep(0, 20), rep(1, 11), rep(0, 60), rep(1, 10), rep(0, 20), rep(1, 23))

# Überprüfung, ob richtig erzeugt:


table(lebensdauer, status)

km_versuch <- kaplan_method(lebensdauer, status)


km_versuch

# Rang-Regression und Visualisierung:


km_versuch_reg <- rank_regression(x = km_versuch$characteristic, y =
km_versuch$prob,
event = km_versuch$status)
km_versuch_reg

km_versuch_plot <- plot_prob(x = km_versuch$characteristic, y = km_versuch$prob,


event = km_versuch$status, title_main = "Weibull - Wahrscheinlichkeitsnetz",
title_x = "Laufleistung", title_y = "Ausfallwahrscheinlichkeit in %",
title_trace = "Ausfälle (K-M)\nmodifiziert") %>%
plot_mod(x = km_versuch$characteristic, loc_sc_params =
km_versuch_reg$loc_sc_coefficients,
title_trace = "RR - K-M (x on y)\nmodifiziert")
km_versuch_plot
```

## Aufgabe 3 - Kaplan-Meier Schätzer II

Ein Versuch mit $n=144$ Probanden liefert folgendes Bild:

i | Lebensdauer $t_i$ (km) | Bei $t_i$ aus Versuch entfernt


:-----: | :-----: | :-----:
1 | 10.000 | 10 S
2 | 20.000 | 10 S und 3 F
3 | 30.000 | 20 S und 8 F
4 | 40.000 | 10 S
5 | 50.000 | 20 S
6 | 60.000 | 10 S und 7 F
7 | 70.000 | 10 S und 3 F
8 | 80.000 | 10 S und 5 F
9 | 88.000 | 8 F
10 | 100.000 | 10 S

Bestimmen Sie die Weibullparameter b und T nach dem Kaplan-Meier Verfahren.

Lösung zur Aufgabe 3:

```{r, Aufgabe 3, warning = FALSE}


# Aufgabe3: K-M, wobei Einheiten mit höchster Lebensdauer Survivor sind.

# Modifizierter status:
status_modified <- c(rep(0, 20), rep(1, 11), rep(0, 60), rep(1, 10), rep(0, 20),
rep(1, 13), rep(0, 10))

# Überprüfung, ob richtig erzeugt:


table(lebensdauer, status_modified)

# Verwendung von kaplan_method():


km_versuch_modified <- kaplan_method(lebensdauer, status_modified)
km_versuch_modified

# Rang-Regression und Visualisierung:


km_versuch_modified_reg <- rank_regression(x = km_versuch_modified$characteristic,
y = km_versuch_modified$prob, event = km_versuch_modified$status)
km_versuch_modified_reg

# Vergleich der Schätzungen aus Aufgabe 2 und 3:


# Regressionsgerade für K-M mit Survivor als letzter Eintrag: Vorbereitung
plot_km_modified_reg <- predict_prob(q = c(5000, 150000),
loc_sc_params = km_versuch_modified_reg$loc_sc_coefficients,
distribution = "weibull")

# Visualisierung im obigen Wahrscheinlichkeitsnetz aus Aufgabenteil 1:


km_vergleich_plot <- km_versuch_plot %>%
add_trace(data = km_versuch_modified, type = "scatter", mode = "markers", x =
~characteristic,
y = ~SPREDA::qsev(prob), name = "Ausfälle (K-M)\nSurvivor", color =
I("#006400"),
hoverinfo = "text", text = ~paste(paste("Laufleistung", ":", characteristic),
paste("<br>", paste0("Ausfallwahrscheinlichkeit", ":")), round(prob, digits =
5))) %>%
add_lines(x = c(5000, 150000), y = SPREDA::qsev(plot_km_modified_reg),
name = "RR - K-M (x on y)\nSurvivor", color = I("#29AB87"),
hoverinfo = "text", hoverinfo = "text",
text = ~paste(paste("T<sub>K-M</sub>", ":",
round(km_versuch_modified_reg$coefficients[[1]], digits = 2)),
"<br>", paste("b<sub>K-M</sub>", ":",
round(km_versuch_modified_reg$coefficients[[2]], digits = 2))))
km_vergleich_plot
```

Das könnte Ihnen auch gefallen