Cure Models with the Beta-Danish Distribution

Bilal Ahmad

Two cure formulations

The package implements two cure formulations on the Exponentiated Danish kernel:

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.45

Mixture 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.7825    1.3132    9.4973
#> c   1.5395     0.2955    1.0569    2.2425
#> 
#> Regression coefficients (log-scale link):
#>                   Estimate Std. Error z value Pr(>|z|)  
#> delta_(Intercept) -1.39644    0.72763 -1.9192  0.05496 .
#> gamma_(Intercept)  0.22464    0.19372  1.1596  0.24621  
#> gamma_z            0.56245    0.29079  1.9342  0.05309 .
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> ---
#> Log-Likelihood: -416.2507

Promotion-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.6795    1.0540   21.6240
#> c   1.4817     0.2464    1.0696    2.0527
#> 
#> Regression coefficients (log-scale link):
#>                   Estimate Std. Error z value Pr(>|z|)  
#> delta_(Intercept) -2.03331    0.91814 -2.2146  0.02679 *
#> gamma_(Intercept) -0.19425    0.12823 -1.5148  0.12981  
#> gamma_z            0.33526    0.17074  1.9635  0.04959 *
#> ---
#> Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> 
#> ---
#> Log-Likelihood: -416.1921

See also