Intercept only fits should be done setting
intercept = TRUE
and using NULL
for the left
side of the formula.
library(lnmixsurv)
library(dplyr)
library(tidyr)
library(readr)
mod1 <- survival_ln_mixture(Surv(y, delta) ~ NULL,
sim_data$data,
iter = 4000,
warmup = 2000,
intercept = TRUE,
starting_seed = 15,
em_iter = 50,
mixture_components = 3
)
chains <- bayesplot::mcmc_trace(mod1$posterior)
We can easily see the chains with the mcmc_trace()
function from bayesplot
package. Since it’s just an
example, we don’t expect that the chains have already converged.
Furthermore, we can use the ggplot2
package to visualize
the Kaplan-Meier survival estimates, created with the
survfit()
function from the survival
package
and the tidy()
function from the broom
package.
km <- survival::survfit(
Surv(y, delta) ~ NULL,
sim_data$data
) |>
broom::tidy() # Kaplan-Meier estimate
ggplot(km) +
geom_step(aes(x = time, y = estimate),
color = "darkslategrey"
) +
labs(
title = "Kaplan-Meier estimate",
x = "t",
y = "S(t)"
) +
theme_bw()
The predictions can be easily made with a “empty” data.frame with one row.
predictions <- predict(mod1,
new_data = data.frame(val = NA),
type = "survival",
eval_time = seq(0, 300)
) |>
tidyr::unnest(cols = .pred)
ggplot2
can be used to visualize the model’s fitted
survival estimates for the data.
ggplot() +
geom_step(aes(x = time, y = estimate, linetype = "Kaplan-Meier"),
color = "darkslategrey", data = km
) +
geom_line(aes(x = .eval_time, y = .pred_survival, linetype = "Fitted"),
color = "darkslategrey",
data = predictions, alpha = 0.7
) +
labs(
title = "Fitted survival estimates",
x = "t",
y = "S(t)",
linetype = "Type"
) +
theme_bw()