## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4.5,
  message = FALSE,
  warning = FALSE
)

## ----setup--------------------------------------------------------------------
library(spsurv)
library(survival)
library(parsnip)
library(censored)
library(workflows)
data(veteran)

## ----parsnip-fit--------------------------------------------------------------
spec <- proportional_hazards() |>
  set_engine("spsurv", degree = 5L, scale = FALSE, init = 0)

fit <- fit(spec, Surv(time, status) ~ karno + celltype, data = veteran)
predict(fit, veteran[1:2, ], type = "survival", eval_time = c(100, 200))

## ----workflow-----------------------------------------------------------------
wf <- workflow() |>
  add_formula(Surv(time, status) ~ karno + celltype) |>
  add_model(
    proportional_hazards() |>
      set_engine("spsurv", degree = 5L, scale = FALSE, init = 0)
  )

wf_fit <- fit(wf, data = veteran)
predict(wf_fit, veteran[1:3, ], type = "time")

## ----bp-survival-reg----------------------------------------------------------
bp_survival_reg(family = "ph", engine = "spsurv")

## ----predict-types------------------------------------------------------------
fit <- bpph(Surv(time, status) ~ karno, data = veteran, approach = "mle", init = 0)
predict(fit, veteran[1:2, ], type = "survival", eval_time = c(50, 100))
predict(fit, veteran[1:2, ], type = "linear_pred")
generics::augment(fit, data = veteran[1:5, ])

## ----bayes-draws, cache = TRUE------------------------------------------------
fit_bayes <- bpph(
  Surv(time, status) ~ karno,
  data = veteran,
  approach = "bayes",
  degree = 4L,
  iter = 200,
  warmup = 100,
  chains = 1,
  cores = 1,
  init = 0
)

dr <- as_draws_df.spbp(fit_bayes)
head(dr[, c(".chain", ".iteration", ".draw", "beta[karno]")])

## ----surv-draws---------------------------------------------------------------
long <- spread_surv_draws.spbp(
  fit_bayes,
  times = c(50, 100, 150),
  newdata = veteran[1, , drop = FALSE]
)
head(long)

