Cure Models with the Beta-Danish Distribution
Bilal Ahmad
Source:vignettes/bd-cure-models.Rmd
bd-cure-models.RmdTwo cure formulations
The package implements two cure formulations on the Exponentiated Danish kernel:
-
Mixture cure splits the population into a
susceptible fraction
pi(Z)modelled by logistic regression on the incidence covariates, and a cured fraction1 - pi(Z). -
Promotion-time cure derives the cure fraction from
a latent Poisson process of clonogenic cells with intensity
theta(Z) = exp(Z' gamma); the cure fraction isexp(-theta(Z)).
Both are fitted via fit_bd_cure().
Quick example
Both fits below use simulated data with a known cure structure.
library(BetaDanish)
set.seed(2026)
n <- 250
z <- stats::rbinom(n, 1, 0.5)
pi_susc <- stats::plogis(0.3 + 0.7 * z)
cured <- stats::rbinom(n, 1, 1 - pi_susc) == 1
T_true <- ifelse(cured, Inf,
rbetadanish(n, a = 1, b = 2, c = 1.5, k = 0.4))
C <- stats::rexp(n, 0.04)
time <- pmin(T_true, C)
status <- ifelse(T_true <= C, 1, 0)
dat <- data.frame(time = time, status = status, z = z)
cat("Sample size:", n, " Censoring rate:", round(mean(status == 0), 2), "\n")
#> Sample size: 250 Censoring rate: 0.45Mixture cure model
fit_mix <- fit_bd_cure(
formula_aft = survival::Surv(time, status) ~ 1,
formula_cure = ~ z,
data = dat,
type = "mixture",
n_starts = 3
)
summary(fit_mix)
#>
#> Call:
#> fit_bd_cure(formula_aft = survival::Surv(time, status) ~ 1, formula_cure = ~z,
#> data = dat, type = "mixture", n_starts = 3)
#>
#> Beta-Danish Cure Model (mixture)
#>
#> Shape parameters (natural scale, delta-method SE):
#> Estimate Std. Error Lower 95% Upper 95%
#> b 3.5315 1.8187 1.2871 9.6900
#> c 1.5395 0.3035 1.0461 2.2657
#>
#> Regression coefficients (log-scale link):
#> Estimate Std. Error z value Pr(>|z|)
#> delta_(Intercept) -1.39644 0.74803 -1.8668 0.06193 .
#> gamma_(Intercept) 0.22464 0.19392 1.1584 0.24669
#> gamma_z 0.56245 0.29211 1.9254 0.05417 .
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> ---
#> Log-Likelihood: -416.2507Promotion-time cure model
fit_prom <- fit_bd_cure(
formula_aft = survival::Surv(time, status) ~ 1,
formula_cure = ~ z,
data = dat,
type = "promotion",
n_starts = 3
)
summary(fit_prom)
#>
#> Call:
#> fit_bd_cure(formula_aft = survival::Surv(time, status) ~ 1, formula_cure = ~z,
#> data = dat, type = "promotion", n_starts = 3)
#>
#> Beta-Danish Cure Model (promotion)
#>
#> Shape parameters (natural scale, delta-method SE):
#> Estimate Std. Error Lower 95% Upper 95%
#> b 4.7740 3.4545 1.1560 19.7155
#> c 1.4817 0.2345 1.0865 2.0207
#>
#> Regression coefficients (log-scale link):
#> Estimate Std. Error z value Pr(>|z|)
#> delta_(Intercept) -2.03331 0.85846 -2.3685 0.01786 *
#> gamma_(Intercept) -0.19425 0.12813 -1.5160 0.12952
#> gamma_z 0.33526 0.17058 1.9654 0.04937 *
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> ---
#> Log-Likelihood: -416.1921See also
-
?fit_bd_curefor full documentation -
?bd_bootstrap_cifor bootstrap confidence intervals -
?plot.bd_curefor Cox-Snell residual plots