t <- seq(0.05, 36, by = 0.05)
median_soll <- 20
# Weibull: h(t) = (k/lambda) * (t/lambda)^(k-1), S(t) = exp(-(t/lambda)^k)
# lambda so waehlen, dass S(20) = 0.5 gilt
weibull_hazard <- function(t, k) {
lambda <- median_soll / log(2)^(1 / k)
(k / lambda) * (t / lambda)^(k - 1)
}
weibull_surv <- function(t, k) {
lambda <- median_soll / log(2)^(1 / k)
exp(-(t / lambda)^k)
}
formen <- c(fallend = 0.5, konstant = 1.0, steigend = 2.0)
farben <- c("#b2182b", "black", "#2166ac")
par(mfrow = c(1, 2), mar = c(4, 4, 3, 1))
plot(NA, xlim = c(0, 36), ylim = c(0, 0.12), xlab = "Monate", ylab = "h(t)",
main = "Hazard-Rate")
for (i in seq_along(formen)) lines(t, weibull_hazard(t, formen[i]),
col = farben[i], lwd = 2)
legend("topleft", legend = names(formen), col = farben, lwd = 2, bty = "n")
plot(NA, xlim = c(0, 36), ylim = c(0, 1), xlab = "Monate", ylab = "S(t)",
main = "Überlebensfunktion")
for (i in seq_along(formen)) lines(t, weibull_surv(t, formen[i]),
col = farben[i], lwd = 2)
abline(h = 0.5, lty = 2); abline(v = median_soll, lty = 2)
par(mfrow = c(1, 1))
# Anteile zu drei Zeitpunkten
round(sapply(formen, function(k) weibull_surv(c(3, 12, 20, 36), k)), 3) |>
`rownames<-`(c("t=3", "t=12", "t=20", "t=36"))