| Type: | Package |
| Title: | The Beta-Danish Distribution for Lifetime Data Analysis |
| Version: | 0.3.0 |
| Description: | Implements the four-parameter Beta-Danish distribution and its three-parameter Exponentiated Danish submodel for survival, reliability and lifetime data analysis, following Ahmad and Danish (2025) <doi:10.2478/jamsi-2025-0010>. Density, distribution, quantile, survival, hazard and random generation functions are evaluated so as to retain accuracy in the heavy upper tail, where the survival function is regularly varying. Estimation covers maximum likelihood for complete and right-censored samples, ridge-penalized fitting for weakly identified regimes, a grouped likelihood for times recorded on a coarse grid, and Bayesian sampling. Inference provides log-scale Wald and profile likelihood intervals, together with a reparameterization in terms of the identified composite of the two shape parameters. Structural properties include raw, incomplete and conditional moments with their existence conditions, Shannon, Renyi and Tsallis entropies, mean residual life, mean deviations, Lorenz and Bonferroni curves, probability weighted moments, order statistics, stress-strength reliability, hazard shape classification and the tail index. Regression modules cover accelerated failure time models, mixture and promotion-time cure models, and competing risks with Aalen-Johansen comparison and Gray's test. Analyses can be run directly from a delimited text file or spreadsheet. |
| URL: | https://bilal-aiou.github.io/BetaDanish/, https://github.com/bilal-aiou/BetaDanish |
| BugReports: | https://github.com/bilal-aiou/BetaDanish/issues |
| License: | GPL-3 |
| Encoding: | UTF-8 |
| LazyData: | true |
| Imports: | grDevices, maxLik, survival, stats, graphics, utils, tools |
| Suggests: | readxl, flexsurv, testthat (≥ 3.0.0), knitr, rmarkdown, cmprsk, coda, MCMCpack |
| VignetteBuilder: | knitr |
| Config/testthat/edition: | 3 |
| Depends: | R (≥ 3.5) |
| Config/roxygen2/version: | 8.0.0 |
| Language: | en-US |
| NeedsCompilation: | no |
| Packaged: | 2026-07-31 11:18:26 UTC; hp |
| Author: | Bilal Ahmad [aut, cre], Muhammad Yameen Danish [aut] |
| Maintainer: | Bilal Ahmad <bilalahmad.imcbh9@gmail.com> |
| Repository: | CRAN |
| Date/Publication: | 2026-07-31 15:20:40 UTC |
BetaDanish: The Beta-Danish Distribution for Lifetime Data Analysis
Description
Implements the four-parameter Beta-Danish distribution and its three-parameter Exponentiated Danish submodel for survival, reliability and lifetime data analysis, following Ahmad and Danish (2025) doi:10.2478/jamsi-2025-0010. Density, distribution, quantile, survival, hazard and random generation functions are evaluated so as to retain accuracy in the heavy upper tail, where the survival function is regularly varying. Estimation covers maximum likelihood for complete and right-censored samples, ridge-penalized fitting for weakly identified regimes, a grouped likelihood for times recorded on a coarse grid, and Bayesian sampling. Inference provides log-scale Wald and profile likelihood intervals, together with a reparameterization in terms of the identified composite of the two shape parameters. Structural properties include raw, incomplete and conditional moments with their existence conditions, Shannon, Renyi and Tsallis entropies, mean residual life, mean deviations, Lorenz and Bonferroni curves, probability weighted moments, order statistics, stress-strength reliability, hazard shape classification and the tail index. Regression modules cover accelerated failure time models, mixture and promotion-time cure models, and competing risks with Aalen-Johansen comparison and Gray's test. Analyses can be run directly from a delimited text file or spreadsheet.
Details
The 'BetaDanish' package provides a comprehensive suite of tools for survival and reliability analysis using the Beta-Danish distribution. It includes core mathematical functions (density, distribution, quantile, random generation, and hazard), robust Maximum Likelihood Estimation (MLE) for both complete and right-censored data, and advanced modeling capabilities including Accelerated Failure Time (AFT) regression, cure-rate models, and competing risks analysis.
The three-parameter Exponentiated Danish (ED) submodel is introduced in the published article (Ahmad & Danish, 2025). The full four-parameter Beta-Danish distribution is developed in the accompanying doctoral thesis (Ahmad, 2026).
Author(s)
Maintainer: Bilal Ahmad bilalahmad.imcbh9@gmail.com
Authors:
Bilal Ahmad bilalahmad.imcbh9@gmail.com
Muhammad Yameen Danish yameen.danish@aiou.edu.pk
References
Ahmad, B., & Danish, M. Y. (2025). Development and characterization of a flexible three-parameter lifetime distribution: theoretical properties and real-world applications. *Journal of Applied Mathematics, Statistics and Informatics*, 21(1). doi:10.2478/jamsi-2025-0010
Ahmad, B. (2026). *Modeling Diverse Survival Patterns: The Development and Characterization of a New Four-Parameter Lifetime Distribution* (Ph.D. thesis). Allama Iqbal Open University, Islamabad, Pakistan. Supervised by Dr. Muhammad Yameen Danish.
See Also
Useful links:
Report bugs at https://github.com/bilal-aiou/BetaDanish/issues
The Beta-Danish Distribution
Description
Density, distribution function, quantile function, hazard function, survival function and random generation for the four-parameter Beta-Danish distribution.
Usage
dbetadanish(x, a, b, c, k, log = FALSE)
pbetadanish(q, a, b, c, k, lower.tail = TRUE, log.p = FALSE)
qbetadanish(p, a, b, c, k, lower.tail = TRUE, log.p = FALSE)
rbetadanish(n, a, b, c, k)
sbetadanish(x, a, b, c, k, log = FALSE)
hbetadanish(x, a, b, c, k, log = FALSE)
Arguments
x, q |
Vector of quantiles (time points). |
a |
Shape parameter (beta generator). Set 'a = 1' for the three-parameter Exponentiated Danish (ED) submodel. |
b |
Shape parameter (beta generator). Governs the upper tail: the survival function is regularly varying with index '-b'. |
c |
Shape parameter (baseline shape). |
k |
Scale parameter (baseline scale). |
log, log.p |
Logical; if 'TRUE', densities/probabilities are returned on the log scale. |
lower.tail |
Logical; if 'TRUE' (default) probabilities are
|
p |
Vector of probabilities. |
n |
Number of observations to generate. |
Details
With baseline G(t) = \{kt/(1+kt)\}^{c}, the Beta-Danish CDF is the
regularised incomplete beta function F(t) = I_{G(t)}(a, b) and the
density is
f(t) = \frac{c\,k^{ca}\,t^{ca-1}}{B(a,b)\,(1+kt)^{ca+1}}
\bigl\{1 - G(t)\bigr\}^{b-1}.
The family accommodates decreasing, increasing, unimodal and bathtub-shaped hazard rates.
Value
'dbetadanish' gives the density, 'pbetadanish' the distribution function, 'qbetadanish' the quantile function, 'sbetadanish' the survival function, 'hbetadanish' the hazard function, and 'rbetadanish' generates random deviates. Length is the maximum of the lengths of the numeric arguments.
Numerical notes
All three of the density, distribution and quantile functions are evaluated so as to retain full relative precision in the upper tail, which is where this family is distinctive and where naive implementations fail:
* \log\{1 - G(t)\} is formed as
'log(-expm1(c * -log1p(1/(k*t))))'. Writing \log G as
-c\,\log(1 + 1/kt) avoids the cancellation in
\log(kt) - \log(1+kt), which loses all significant digits once
kt \gtrsim 10^{15}.
* The survival function uses the beta mirror identity
1 - I_{y}(a,b) = I_{1-y}(b,a), so no probability near one is ever
subtracted from one.
* 'qbetadanish' obtains 1 - u directly via
1 - q\beta(p; a, b) = q\beta(p; b, a) with the tail flag reversed,
so '1 - p' is never formed.
Parameters recycle element-wise against 'x', 'q' or 'p' following the usual convention for R distribution functions, so a per-observation scale (as produced by an AFT link) may be supplied directly.
As t \to \infty, S(t) \propto t^{-b}; consequently
E(X^{r}) is finite if and only if b > r.
References
Ahmad, B., & Danish, M. Y. (2025). Development and characterization of a flexible three-parameter lifetime distribution: theoretical properties and real-world applications. *Journal of Applied Mathematics, Statistics and Informatics*, 21(1). doi:10.2478/jamsi-2025-0010
Examples
dbetadanish(x = 2, a = 1.5, b = 2, c = 3, k = 0.5)
pbetadanish(q = 2, a = 1.5, b = 2, c = 3, k = 0.5)
qbetadanish(p = 0.5, a = 1.5, b = 2, c = 3, k = 0.5)
hbetadanish(x = 2, a = 1.5, b = 2, c = 3, k = 0.5)
rbetadanish(n = 10, a = 1.5, b = 2, c = 3, k = 0.5)
# Per-observation scale, as used by the AFT link
dbetadanish(c(1, 2, 3), a = 1, b = 2, c = 1.5, k = c(0.5, 1, 2))
# The survival tail is regularly varying with index -b
round(log(sbetadanish(c(1e10, 1e12), 1.5, 3, 2, 1)), 4)
The Exponentiated Danish Distribution
Description
Density, distribution function, quantile function, survival function, hazard
function and random generation for the three-parameter Exponentiated Danish
distribution, the a = 1 submodel of the Beta-Danish family.
Usage
ded(x, b, c, k, log = FALSE)
ped(q, b, c, k, lower.tail = TRUE, log.p = FALSE)
qed(p, b, c, k, lower.tail = TRUE, log.p = FALSE)
red(n, b, c, k)
sed(x, b, c, k, log = FALSE)
hed(x, b, c, k, log = FALSE)
Arguments
x, q |
Vector of quantiles. |
b, c, k |
Shape, shape and scale parameters. |
log, log.p |
Logical; return values on the log scale. |
lower.tail |
Logical; if 'TRUE' (default) probabilities are
|
p |
Vector of probabilities. |
n |
Number of observations to generate. |
Details
These are thin wrappers that fix a = 1, provided because the ED
submodel is a named distribution in its own right in the underlying work and
writing 'dbetadanish(x, 1, b, c, k)' obscures that.
At a = 1 the beta generator collapses and the distribution function
simplifies to F(t) = 1 - \{1 - G(t)\}^{b} with
G(t) = \{kt/(1+kt)\}^{c}. The upper tail still has index -b, so
the moment condition b > r is unchanged.
Value
Vectors of the same form as the Beta-Danish equivalents.
See Also
[BetaDanish] for the four-parameter parent, [fit_betadanish()] with 'submodel = TRUE' for estimation.
Examples
ded(2, b = 3, c = 2, k = 1)
ped(2, b = 3, c = 2, k = 1)
qed(0.5, b = 3, c = 2, k = 1)
red(5, b = 3, c = 2, k = 1)
# Identical to the a = 1 parent
all.equal(ded(2, 3, 2, 1), dbetadanish(2, 1, 3, 2, 1))
Aarset Device Failure Times
Description
Times to failure of 50 devices, exhibiting a classic bathtub-shaped hazard rate. This is a standard benchmark dataset in reliability engineering.
Usage
aarset
Format
A data frame with 50 rows and 2 columns:
- time
Failure time
- status
Event indicator (1 = event occurred)
Source
Aarset, M. V. (1987). How to Identify a Bathtub Hazard Rate. IEEE Transactions on Reliability, R-36(1), 106-108.
Examples
data(aarset)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = aarset)
plot(fit, type = "hazard")
Comprehensive Beta-Danish Analysis Pipeline
Description
Runs a complete end-to-end analysis: reads data, fits the 4-parameter and 3-parameter models, compares them, benchmarks against standard distributions, and generates diagnostic plots.
Usage
analyze_betadanish(file, time_col, status_col = NULL)
Arguments
file |
Path to the CSV or Excel file containing the data. |
time_col |
Name of the time column. |
status_col |
Name of the status column (optional). |
Value
Invisibly returns a list containing the fitted full model and submodel objects. The function is mainly called for its side effects of printing an analysis report and producing diagnostic plots.
Bayesian Estimation for the Beta-Danish Distribution
Description
Samples from the posterior of the Beta-Danish or Exponentiated Danish
parameters using a random-walk Metropolis sampler with vague
\Gamma(0.01, 0.01) priors on the positive parameters.
Usage
bayes_betadanish(
time,
status = NULL,
submodel = TRUE,
burnin = 5000,
mcmc = 15000,
tune = 0.5,
theta_init = NULL,
seed = NULL,
verbose = 0
)
Arguments
time |
Numeric vector of observed times. |
status |
Numeric vector of event indicators (1 = event, 0 = right-censored). |
submodel |
Logical; |
burnin |
Burn-in iterations. |
mcmc |
Post-burnin iterations. |
tune |
Random-walk tuning parameter. |
theta_init |
Optional starting values on the log scale. |
seed |
Optional integer seed. |
verbose |
Integer; passed to MCMCmetrop1R (0 = silent). |
Details
Requires MCMCpack and coda (Suggests).
Value
An object of class "bd_bayes" with components
draws (mcmc object), summary, HPD,
submodel, call.
Examples
## Not run:
set.seed(1)
dat <- rbetadanish(100, a = 1.5, b = 2, c = 3, k = 0.5)
fit <- bayes_betadanish(time = dat, submodel = TRUE,
burnin = 500, mcmc = 1500)
fit$summary
## End(Not run)
Analyse Survival Data Straight from a CSV File
Description
A single entry point that reads a delimited or Excel file, fits the requested Beta-Danish model or models, assembles the results into tidy tables, and optionally writes those tables and the diagnostic figures to a directory.
Usage
bd_analyze_csv(
file,
time_col = NULL,
status_col = NULL,
covariates = NULL,
cause_col = NULL,
analysis = c("univariate", "aft", "cure", "competing"),
model = c("both", "BD", "ED"),
compare = TRUE,
bayes = FALSE,
cure_formula = NULL,
cure_type = c("mixture", "promotion"),
output_dir = NULL,
n_starts = 10,
seed = NULL,
quiet = FALSE
)
## S3 method for class 'bd_analysis'
print(x, ...)
## S3 method for class 'bd_analysis'
summary(object, ...)
## S3 method for class 'summary.bd_analysis'
print(x, ...)
## S3 method for class 'bd_analysis'
plot(x, type = "survival", ...)
Arguments
file |
Path to a '.csv', '.txt', '.tsv', '.xls' or '.xlsx' file. |
time_col, status_col, cause_col |
Column names, passed to [read_survival_data()]. 'NULL' means guess. |
covariates |
Covariate columns to use. 'NULL' means none for 'analysis = "univariate"', and every non-response column for the regression analyses. |
analysis |
Which analysis to run: '"univariate"' (default), '"aft"', '"cure"' or '"competing"'. |
model |
For 'analysis = "univariate"', whether to fit the four-parameter Beta-Danish ('"BD"'), the three-parameter Exponentiated Danish submodel ('"ED"'), or '"both"' (default) and compare them. |
compare |
Logical; benchmark against standard lifetime distributions via [compare_distributions()]. Requires the 'flexsurv' package; skipped with a recorded note if it is absent. Default 'TRUE'. |
bayes |
Logical; also run [bayes_betadanish()]. Requires 'MCMCpack'. Default 'FALSE', since it is slow. |
cure_formula |
Right-hand-side formula for the cure fraction when 'analysis = "cure"', for example '~ group'. Defaults to the retained covariates. |
cure_type |
'"mixture"' (default) or '"promotion"'. |
output_dir |
Directory to write results to. 'NULL' (default) writes nothing. The directory is created if it does not exist. |
n_starts |
Number of random starting points for each fit. |
seed |
Optional integer seed, for reproducible multi-start fitting. |
quiet |
Logical; suppress progress messages. |
x |
A '"bd_analysis"' object. |
... |
Ignored. |
object |
A '"bd_analysis"' object. |
type |
Plot type passed to [plot.betadanish()]. |
Details
Nothing is written to disk unless 'output_dir' is supplied. When it is, the function writes one CSV per result table and a PNG per diagnostic figure, and records the paths in the 'files' component.
Each fit is attempted independently. If one fails, the message is recorded in 'failures' and the remaining analyses still run, so a difficult four-parameter fit does not cost you the submodel results alongside it.
Warnings raised during fitting are captured in 'warnings' rather than printed as they occur. This is where the identifiability diagnostics appear, so it is worth reading: a four-parameter fit that converges cleanly but sits on the 'b = 1' ridge will say so there.
For 'analysis = "univariate"' with 'model = "both"', a likelihood ratio test of the submodel is included. Read it alongside those diagnostics: see the Identifiability section of [fit_betadanish()].
Value
An object of class '"bd_analysis"': a list with 'call', 'analysis', 'data', 'data_report', 'fits', 'tables', 'extras', 'warnings', 'failures', 'output_dir' and 'files'. It has 'print', 'summary' and 'plot' methods.
See Also
[read_survival_data()], [bd_csv_template()], [fit_betadanish()], [fit_bd_aft()], [fit_bd_cure()], [fit_bd_competing()]
Examples
f <- system.file("extdata", "censored_sample.csv", package = "BetaDanish")
# Submodel only, no benchmarking: fast enough for an example
res <- bd_analyze_csv(f, analysis = "univariate", model = "ED",
compare = FALSE, n_starts = 3, seed = 1, quiet = TRUE)
res
res$tables$information_criteria
# Both models, with tables and figures written to a temporary directory
out <- file.path(tempdir(), "bd_results")
res2 <- bd_analyze_csv(f, model = "both", compare = FALSE,
output_dir = out, n_starts = 5, seed = 1)
basename(res2$files)
# AFT regression, covariates taken from the file
g <- system.file("extdata", "covariate_sample.csv", package = "BetaDanish")
res3 <- bd_analyze_csv(g, analysis = "aft", covariates = c("age", "thickness"),
n_starts = 5, seed = 1)
summary(res3)
Conditional Moments
Description
E(Z^r \mid Z > t) or E(Z^r \mid Z \le t).
Usage
bd_conditional_moment(r, t, a, b, c, k, upper = TRUE, rel.tol = 1e-10)
Arguments
r |
Order of the moment. |
t |
Vector of thresholds. |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
upper |
Logical; 'TRUE' (default) conditions on |
rel.tol |
Relative accuracy, passed to [stats::integrate()]. |
Value
A numeric vector the length of 't'.
Examples
bd_conditional_moment(1, t = c(0.5, 1, 2), a = 1.5, b = 3, c = 2, k = 1)
Write a Skeleton CSV for BetaDanish
Description
Writes a small, correctly shaped CSV showing the layout [bd_analyze_csv()] and [read_survival_data()] expect. Fill it in with your own data, or use it as a reference for renaming the columns of an existing file.
Usage
bd_csv_template(
path,
type = c("univariate", "complete", "covariate", "competing"),
n = 10,
overwrite = FALSE
)
Arguments
path |
Destination file path. Use [tempfile()] if you only want to inspect the result. |
type |
Which layout to write: '"univariate"' gives 'time' and 'status'; '"complete"' gives 'time' alone, for an uncensored sample; '"covariate"' adds two example covariate columns; '"competing"' gives 'time' and 'cause'. |
n |
Number of illustrative rows. Default 10. |
overwrite |
Logical; overwrite an existing file. Default 'FALSE'. |
Details
The illustrative values are plausible but arbitrary. 'status' is coded 1 = event observed, 0 = right-censored. For '"competing"', 'cause' is coded 0 = censored and 1, 2, ... for the competing causes.
Value
The path, invisibly.
See Also
[bd_analyze_csv()], [read_survival_data()]
Examples
p <- bd_csv_template(tempfile(fileext = ".csv"), type = "covariate", n = 5)
read.csv(p)
unlink(p)
Entropies of the Beta-Danish Distribution
Description
Shannon, Renyi and Tsallis entropies. All three share one documentation topic so that every argument is described exactly once.
Usage
bd_entropy_shannon(
a,
b,
c,
k,
terms = 20000L,
method = c("closed", "quadrature"),
rel.tol = 1e-10,
subdivisions = 4000L
)
bd_entropy_renyi(a, b, c, k, order = 2, rel.tol = 1e-10, subdivisions = 4000L)
bd_entropy_tsallis(
a,
b,
c,
k,
order = 2,
rel.tol = 1e-10,
subdivisions = 4000L
)
Arguments
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
terms |
Number of series terms before the analytic tail is applied (Shannon only). |
method |
'"closed"' (default) for the closed form, or '"quadrature"'
for direct numerical integration of |
rel.tol |
Relative accuracy, passed to [stats::integrate()]. |
subdivisions |
Subdivision limit, passed to [stats::integrate()]. |
order |
Entropy order |
Details
Writing u = G(Z) \sim \mathrm{Beta}(a,b) and v = u^{1/c}, the
Shannon entropy has the closed form
H = \log B(a,b) - \log(ck)
- (a - 1/c)\{\psi(a) - \psi(a+b)\}
- (b - 1)\{\psi(b) - \psi(a+b)\}
+ 2\sum_{i \ge 1} \frac{B(a + i/c,\, b)}{i\, B(a,b)},
the final sum arising from -2E\log(1 - v) expanded as a power series.
With I_q = \int_0^\infty f(z)^q dz, the Renyi entropy is
\log(I_q)/(1-q) and the Tsallis entropy is (1 - I_q)/(q-1). Both
reduce to the Shannon entropy as q \to 1, which is excluded; use
'bd_entropy_shannon()' at q = 1.
I_q is evaluated as \int_0^1 f(z(u))^{q-1} d\mathrm{Beta}(u;a,b)
on the finite Beta scale rather than over the half line, which keeps the
heavy upper tail from dominating the quadrature.
Value
A single number. The Shannon entropy is in nats.
Series truncation
The Shannon series terms decay like i^{-(b+1)}, so truncating at
M omits a tail of order M^{-b}. That is negligible for large
b and is not for small b: against high-precision integration the
plain truncated sum at M = 2000 is out by about 10^{-8} at
b = 3 but by about 0.11 at b = 0.5. The analytic tail
\Gamma(b)c^{b}M^{-b}/\{b B(a,b)\} is therefore added, restoring
agreement to roughly eight digits across the range.
Examples
bd_entropy_shannon(a = 1.5, b = 3, c = 2, k = 1)
# Independent check by quadrature
bd_entropy_shannon(a = 1.5, b = 3, c = 2, k = 1, method = "quadrature")
bd_entropy_renyi(a = 1.5, b = 3, c = 2, k = 1, order = 2)
bd_entropy_tsallis(a = 1.5, b = 3, c = 2, k = 1, order = 2)
Hazard Rate Shape and the Glaser Diagnostic
Description
Classifies the hazard rate as increasing, decreasing, bathtub-shaped or upside-down bathtub-shaped, and returns the mode of the density.
Usage
bd_hazard_shape(a, b, c, k, n_grid = 400L, range_p = c(1e-04, 1 - 1e-04))
## S3 method for class 'bd_shape'
print(x, ...)
Arguments
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
n_grid |
Number of grid points between the lower and upper evaluation quantiles. |
range_p |
Two probabilities bounding the evaluation range. |
x |
A '"bd_shape"' object. |
... |
Ignored. |
Details
Glaser's criterion works through \eta(t) = -f'(t)/f(t): monotone
increasing \eta gives an increasing hazard, monotone decreasing gives a
decreasing hazard, and a single interior turning point gives a bathtub or
upside-down bathtub. Here \eta is formed analytically from the
log-density and evaluated on a grid, and the hazard itself is checked
alongside it, so the two must agree before a shape is reported.
Value
A list of class '"bd_shape"' with the classification, the grid of
times, the hazard, Glaser's \eta(t) = -f'(t)/f(t), and the mode.
Examples
s <- bd_hazard_shape(a = 1.5, b = 3, c = 2, k = 1)
s$shape
s$mode
Coefficients in the Identified Parametrisation
Description
Reports the four-parameter fit in terms of the composite ac, which is
identified, rather than a and c separately, which are not.
Usage
bd_identified_coef(object, level = 0.95)
## S3 method for class 'bd_identified'
print(x, ...)
Arguments
object |
A fitted '"betadanish"' object. |
level |
Confidence level for the reported intervals. Default 0.95. |
x |
A '"bd_identified"' object. |
... |
Ignored. |
Details
Near the lower tail a and c enter the density almost entirely
through their product, so the expected information is close to singular in
the direction that separates them. Writing p = ac and r = a/c,
the ratio r carries almost no information while p is estimated
precisely.
Reporting (ac, b, k) is therefore the honest summary of a
four-parameter fit that sits on the flat direction: it has finite standard
errors and a far better conditioned covariance matrix, and it says exactly
what the data determine. The thesis pipeline records a condition number
falling from 2750 to 152 on the remission data, with the log-likelihood
unchanged, since this is a reparametrisation and not a different model.
For the ED submodel a = 1, so ac = c and nothing is gained;
the function returns the coefficients unchanged with a note.
Value
An object of class '"bd_identified"' holding the reparametrised estimates with delta-method standard errors, and the condition numbers of the covariance matrix before and after.
See Also
[fit_betadanish()] and its Identifiability section, [bd_profile_ci()]
Examples
dat <- simulate_bd_data(200, a = 1.5, b = 3, c = 2, k = 0.5, seed = 4)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
n_starts = 5)
bd_identified_coef(fit)
Incomplete Moments
Description
The lower incomplete moment M_r(t) = \int_0^t z^r f(z)\,dz and the
upper incomplete moment \Upsilon_r(t) = \int_t^\infty z^r f(z)\,dz.
Usage
bd_incomplete_moment(r, t, a, b, c, k, lower = TRUE, rel.tol = 1e-10)
Arguments
r |
Order of the moment. |
t |
Vector of thresholds. |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
lower |
Logical; 'TRUE' (default) for |
rel.tol |
Passed to [stats::integrate()]. |
Details
The threshold is mapped to the Beta scale by u_t = G(t), computed on
the log scale so it stays accurate when G(t) approaches one, and the
integral is taken over (0, u_t) or (u_t, 1).
Value
A numeric vector the length of 't'.
See Also
[bd_mrl()], [bd_lorenz()], [bd_mean_deviation()]
Examples
a <- 1.5; b <- 3; c <- 2; k <- 1
t <- 1
# The two halves sum to the complete moment
bd_incomplete_moment(1, t, a, b, c, k, lower = TRUE) +
bd_incomplete_moment(1, t, a, b, c, k, lower = FALSE)
bd_moments(1, a, b, c, k)
Lorenz and Bonferroni Curves
Description
Lorenz and Bonferroni Curves
Usage
bd_lorenz(p, a, b, c, k, rel.tol = 1e-10)
bd_bonferroni(p, a, b, c, k, rel.tol = 1e-10)
Arguments
p |
Vector of probabilities in |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
rel.tol |
Passed to [stats::integrate()]. |
Details
L(p) = M_1(Q(p))/\mu and B(p) = L(p)/p, with Q the
quantile function. Both require b > 1.
Value
A numeric vector the length of 'p'.
Examples
p <- c(0.1, 0.25, 0.5, 0.75, 0.9)
bd_lorenz(p, a = 1.5, b = 3, c = 2, k = 1)
bd_bonferroni(p, a = 1.5, b = 3, c = 2, k = 1)
Mean Deviations
Description
Mean deviation about the mean, E|Z - \mu|, or about the median.
Usage
bd_mean_deviation(a, b, c, k, about = c("mean", "median"), rel.tol = 1e-10)
Arguments
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
about |
'"mean"' (default) or '"median"'. |
rel.tol |
Passed to [stats::integrate()]. |
Details
E|Z - \mu| = 2\mu F(\mu) - 2 M_1(\mu) and
E|Z - M| = \mu - 2 M_1(M), with M the median.
Value
A single number, or 'NA' when b \le 1.
Examples
bd_mean_deviation(a = 1.5, b = 3, c = 2, k = 1)
bd_mean_deviation(a = 1.5, b = 3, c = 2, k = 1, about = "median")
Summary Moments: Mean, Variance, Skewness and Kurtosis
Description
Summary Moments: Mean, Variance, Skewness and Kurtosis
Usage
bd_moment_summary(a, b, c, k, rel.tol = 1e-10, subdivisions = 4000L)
Arguments
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
rel.tol |
Relative accuracy, passed to [stats::integrate()]. |
subdivisions |
Subdivision limit, passed to [stats::integrate()]. |
Details
Skewness needs b > 3 and kurtosis b > 4. Both are frequently
unavailable for fitted values of b, which is a property of the family
rather than a limitation of the computation.
Value
A named numeric vector. Entries requiring a moment that does not exist are 'NA', with the governing condition given in the 'condition' attribute.
Examples
bd_moment_summary(a = 1.5, b = 5, c = 2, k = 1)
bd_moment_summary(a = 1.5, b = 2.5, c = 2, k = 1) # skew/kurt unavailable
Raw Moments of the Beta-Danish Distribution
Description
Raw Moments of the Beta-Danish Distribution
Usage
bd_moments(r, a, b, c, k, rel.tol = 1e-10, subdivisions = 4000L)
Arguments
r |
Order or orders of the moment. Non-negative. |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail; 'E(Z^r)' is finite iff 'b > r'. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
rel.tol |
Relative accuracy, passed to [stats::integrate()]. |
subdivisions |
Subdivision limit, passed to [stats::integrate()]. |
Details
The survival function is regularly varying with index -b, so
E(Z^r) is finite if and only if b > r. That condition is checked
rather than assumed: a request for a moment that does not exist returns
'Inf', not a large finite number produced by a truncated sum.
Value
A numeric vector the length of 'r'. Entries with 'b <= r' are 'Inf'.
See Also
[bd_moment_summary()], [bd_incomplete_moment()]
Examples
bd_moments(1:2, a = 1.5, b = 3, c = 2, k = 1)
# The fourth moment does not exist when b = 3
bd_moments(4, a = 1.5, b = 3, c = 2, k = 1)
Mean Residual Life and Reversed Mean Residual Life
Description
Mean Residual Life and Reversed Mean Residual Life
Usage
bd_mrl(t, a, b, c, k, rel.tol = 1e-10)
bd_rmrl(t, a, b, c, k, rel.tol = 1e-10)
Arguments
t |
Vector of times. |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
rel.tol |
Passed to [stats::integrate()]. |
Details
Following the definitions in the underlying dissertation, with
\Upsilon_1 the upper and M_1 the lower incomplete first moment,
m(t) = E(Z - t \mid Z > t) = \Upsilon_1(t)/S(t) - t,
\bar m(t) = E(t - Z \mid Z \le t) = t - M_1(t)/F(t).
The reversed form is also called the mean inactivity time. Both require the
first moment to exist, hence b > 1.
No monotonicity is asserted. Ageing classification requires a separate argument and is not implied by these values; see [bd_hazard_shape()] for the hazard-rate counterpart.
Value
A numeric vector the length of 't', or all 'NA' when b \le 1.
Examples
bd_mrl(c(0.5, 1, 2, 5), a = 1.5, b = 3, c = 2, k = 1)
bd_rmrl(c(0.5, 1, 2, 5), a = 1.5, b = 3, c = 2, k = 1)
Order Statistic Distribution and Moments
Description
Order Statistic Distribution and Moments
Usage
bd_order_stat_cdf(t, i, n, a, b, c, k)
bd_order_stat_moments(r, i, n, a, b, c, k, rel.tol = 1e-10)
Arguments
t |
Vector of times, for 'bd_order_stat_cdf'. |
i |
Index of the order statistic, from 1 to 'n'. |
n |
Sample size. |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
r |
Order of the moment, for 'bd_order_stat_moments'. |
rel.tol |
Passed to [stats::integrate()]. |
Details
F_{i:n}(t) = I_{F(t)}(i, n - i + 1), and moments are taken against the
order-statistic density on the Beta scale. The i-th order statistic of
a sample of size n has a finite r-th moment when
b(n - i + 1) > r, so extremes need heavier restrictions than the parent
distribution, and the maximum needs b > r exactly as the parent does.
Value
'bd_order_stat_cdf' returns a vector the length of 't'; 'bd_order_stat_moments' returns a single number.
See Also
[bd_order_stat_pdf()]
Examples
bd_order_stat_cdf(c(0.5, 1, 2), i = 3, n = 5, a = 1.5, b = 3, c = 2, k = 1)
bd_order_stat_moments(1, i = 1, n = 5, a = 1.5, b = 3, c = 2, k = 1)
Density of the r-th Order Statistic
Description
Evaluates the probability density function of the r-th order statistic from a sample of size n drawn from the Beta-Danish distribution.
Usage
bd_order_stat_pdf(x, r, n, a, b, c, k, log = FALSE)
Arguments
x |
Numeric vector of time points. |
r |
Integer order (1 = minimum, n = maximum). |
n |
Integer sample size. |
a, b, c, k |
Positive parameters of the Beta-Danish distribution. |
log |
Logical; if |
Value
Numeric vector (or its log).
Examples
tgrid <- seq(0.01, 5, length.out = 50)
bd_order_stat_pdf(tgrid, r = 5, n = 20,
a = 1.5, b = 2.5, c = 2, k = 1)
Profile Likelihood Confidence Interval
Description
Profiles one parameter, maximising over the others, and inverts the likelihood ratio test to obtain an interval.
Usage
bd_profile_ci(
object,
parameter = "b",
level = 0.95,
grid = NULL,
n_grid = 60L,
method = "Nelder-Mead"
)
## S3 method for class 'bd_profile'
print(x, ...)
Arguments
object |
A fitted '"betadanish"' object. |
parameter |
Name of the parameter to profile, one of '"a"', '"b"', '"c"' or '"k"'. Default '"b"'. |
level |
Confidence level. Default 0.95. |
grid |
Optional numeric vector of values to scan. If 'NULL' (default) a log-spaced grid is built around the estimate. |
n_grid |
Number of grid points when 'grid' is 'NULL'. |
method |
Optimisation method for the nuisance parameters, passed to [stats::optim()]. |
x |
A '"bd_profile"' object. |
... |
Ignored. |
Details
The interval is the set of values \theta_0 for which
2\{\ell_{\max} - \ell_p(\theta_0)\} \le \chi^2_{1,\,\mathrm{level}},
with \ell_p the profile log-likelihood.
**An open upper bound is a result, not a failure.** For a weakly identified
tail index the profile can stay inside the critical region all the way to
the top of the grid, in which case 'upper' is returned as 'Inf' and the
honest report is a lower bound rather than a point estimate with an
interval. The thesis pipeline records precisely this on the breaking-stress
data, where the profile gives b \ge 26.1 with no finite upper bound.
Widening 'grid' will not manufacture a bound; it only confirms the flatness.
Value
An object of class '"bd_profile"' with the interval, the grid, the profile log-likelihood, and the critical value.
See Also
[bd_wald_ci()], [bd_identified_coef()]
Examples
dat <- simulate_bd_data(200, a = 1, b = 3, c = 2, k = 0.5, seed = 2)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
submodel = TRUE, n_starts = 3)
p <- bd_profile_ci(fit, "b")
p
Plot a Profile Likelihood
Description
Draws the profile log-likelihood produced by [bd_profile_ci()], with the critical threshold and the resulting interval marked.
Usage
bd_profile_plot(
x,
col = "steelblue",
lwd = 2,
main = NULL,
xlab = NULL,
ylab = NULL,
...
)
Arguments
x |
An object of class '"bd_profile"'. |
col, lwd |
Colour and line width for the profile curve. |
main, xlab, ylab |
Labels. 'NULL' uses sensible defaults. |
... |
Further graphical parameters. |
Details
The horizontal line sits at \ell_{\max} - \chi^2_{1,\alpha}/2. Every
parameter value whose profile lies above it is inside the interval.
When the curve does not fall back below that line before the right-hand edge of the grid, there is no finite upper bound and the plot says so. Widening the grid will not produce one; it will only confirm the flatness. That is the situation the underlying dissertation records for the tail index on the breaking-stress data.
Value
Invisibly returns 'x'.
See Also
[bd_profile_ci()]
Examples
dat <- simulate_bd_data(120, a = 1, b = 3, c = 2, k = 0.5, seed = 3)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
submodel = TRUE, n_starts = 1)
p <- bd_profile_ci(fit, "b", n_grid = 15L)
bd_profile_plot(p)
Probability Weighted Moments
Description
\tau_{r,s,w} = E\{Z^r F(Z)^s (1 - F(Z))^w\}.
Usage
bd_pwm(r, s = 0, w = 0, a, b, c, k, rel.tol = 1e-10)
Arguments
r |
Power on |
s |
Power on |
w |
Power on |
a |
Shape parameter (beta generator). |
b |
Shape parameter governing the tail. |
c |
Shape parameter (baseline). |
k |
Scale parameter (baseline). |
rel.tol |
Passed to [stats::integrate()]. |
Details
Existence follows the same rule as the raw moments in the worst case,
b > r, and the weights can only reduce the tail contribution.
Value
A single number.
Examples
# tau_{1,0,0} is the mean
bd_pwm(1, 0, 0, a = 1.5, b = 3, c = 2, k = 1)
bd_moments(1, a = 1.5, b = 3, c = 2, k = 1)
bd_pwm(1, 1, 0, a = 1.5, b = 3, c = 2, k = 1)
Finite-Sample Simulation Study for Competing Risks
Description
Finite-Sample Simulation Study for Competing Risks
Usage
bd_simulation_competing(
n = c(200, 400),
n_sim = 100,
pars = list(c(b = 2.5, c = 1.8, k = 0.04), c(b = 3.5, c = 1.2, k = 0.02)),
gammas = NULL,
censor_rate = 0.15,
submodel = TRUE,
n_starts = 2,
level = 0.95,
seed = NULL,
quiet = FALSE
)
Arguments
n |
Vector of sample sizes. |
n_sim |
Number of replicates at each sample size. |
pars |
List of true parameter vectors, one per cause. |
gammas |
Optional accelerated failure time coefficients, one per cause. |
censor_rate |
Approximate proportion of right-censored observations. |
submodel |
Logical; fit Exponentiated Danish cause-specific kernels. |
n_starts |
Starting points per fit. |
level |
Nominal coverage level. |
seed |
Optional integer seed. |
quiet |
Logical; suppress progress messages. |
Value
An object of class '"bd_simulation"', with 'parameter' naming the cause and quantity, for example 'c1:b'.
See Also
[bd_simulation_study()], [fit_bd_competing()]
Examples
s <- bd_simulation_competing(n = 120, n_sim = 2, n_starts = 1,
seed = 1, quiet = TRUE)
s
Finite-Sample Simulation Study for the Cure Model
Description
Finite-Sample Simulation Study for the Cure Model
Usage
bd_simulation_cure(
n = c(100, 200),
n_sim = 100,
truth = c(b = 2, c = 1.5, k = 0.5),
cure_fraction = 0.3,
censor_rate = 0.2,
type = c("mixture", "promotion"),
n_starts = 3,
level = 0.95,
seed = NULL,
quiet = FALSE
)
Arguments
n |
Vector of sample sizes. |
n_sim |
Number of replicates at each sample size. |
truth |
Named vector with 'b', 'c' and 'k' for the susceptible population. |
cure_fraction |
True proportion of long-term survivors. |
censor_rate |
Approximate proportion of censoring among susceptibles. |
type |
'"mixture"' or '"promotion"'. |
n_starts |
Random starts per fit. |
level |
Nominal coverage level. |
seed |
Optional integer seed. |
quiet |
Logical; suppress progress messages. |
Value
An object of class '"bd_simulation"'.
See Also
[bd_simulation_study()], [fit_bd_cure()]
Examples
s <- bd_simulation_cure(n = 80, n_sim = 2, n_starts = 1,
seed = 1, quiet = TRUE)
s
Finite-Sample Simulation Study for the Univariate Model
Description
Draws samples from a known Beta-Danish or Exponentiated Danish distribution, refits each one, and reports the finite-sample behaviour of the maximum likelihood estimator.
Usage
bd_simulation_study(
n = c(50, 100, 200),
n_sim = 200,
truth = c(a = 1.5, b = 3, c = 2, k = 0.5),
submodel = FALSE,
censor_rate = 0,
n_starts = 3,
level = 0.95,
seed = NULL,
quiet = FALSE
)
## S3 method for class 'bd_simulation'
print(x, digits = 4, ...)
## S3 method for class 'bd_simulation'
summary(object, ...)
Arguments
n |
Vector of sample sizes. |
n_sim |
Number of replicates at each sample size. |
truth |
Named numeric vector of true parameters. Must contain 'b', 'c' and 'k', and 'a' unless 'submodel' is 'TRUE'. |
submodel |
Logical; fit the three-parameter ED submodel. |
censor_rate |
Approximate proportion of right-censored observations. |
n_starts |
Random starts per fit, on top of the deterministic grid. |
level |
Nominal coverage level. |
seed |
Optional integer seed. |
quiet |
Logical; suppress progress messages. |
x |
A '"bd_simulation"' object. |
digits |
Number of significant digits. |
... |
Ignored. |
object |
A '"bd_simulation"' object. |
Details
Read 'se_ratio' and 'coverage' together. A ratio near one with coverage near the nominal level means the asymptotic standard errors are trustworthy at that sample size. A ratio well below one means they are optimistic, and coverage will fall short accordingly.
'n_fail' counts replicates where no admissible optimum was found. A high rate is not a nuisance to be suppressed: it says the parameter region being studied is hard to estimate at that sample size.
Value
An object of class '"bd_simulation"' with a 'results' data frame, one row per sample size and parameter.
See Also
[bd_simulation_cure()], [bd_simulation_competing()]
Examples
# Deliberately tiny so the example runs in seconds. A real study would use
# n_sim in the hundreds; see the vignette.
s <- bd_simulation_study(n = 60, n_sim = 3,
truth = c(b = 3, c = 2, k = 0.5),
submodel = TRUE, n_starts = 1,
seed = 1, quiet = TRUE)
s
Stress-Strength Reliability
Description
R = P(X > Y) where X is the strength and Y the stress,
each Beta-Danish distributed with its own parameters.
Usage
bd_stress_strength(strength, stress, rel.tol = 1e-10)
Arguments
strength |
Named list or numeric vector giving 'a', 'b', 'c', 'k' for
the strength variable |
stress |
Same, for the stress variable |
rel.tol |
Passed to [stats::integrate()]. |
Details
R = \int_0^\infty S_X(y) f_Y(y)\,dy, evaluated on the Beta scale of
Y so the integral is taken over (0,1).
The convention is the standard reliability one: R is the probability
that the strength exceeds the stress, so larger R means a more
reliable component. Passing the two arguments the wrong way round returns
1 - R.
Value
A single probability.
Examples
# Identical distributions must give one half
p <- list(a = 1.5, b = 3, c = 2, k = 1)
bd_stress_strength(strength = p, stress = p)
# A stronger component
bd_stress_strength(strength = list(a = 1.5, b = 3, c = 2, k = 0.5),
stress = list(a = 1.5, b = 3, c = 2, k = 2))
Tail Index of the Beta-Danish Distribution
Description
Tail Index of the Beta-Danish Distribution
Usage
bd_tail_index(a, b, c, k)
Arguments
a |
Shape parameter (beta generator). Accepted for interface consistency; it does not affect the index. |
b |
Shape parameter. This is the tail index. |
c |
Shape parameter (baseline). Accepted for interface consistency. |
k |
Scale parameter (baseline). Accepted for interface consistency. |
Details
The survival function is regularly varying at infinity with index -b:
S(t) \sim (c/k)^b t^{-b} / \{b B(a,b)\}. Three consequences follow.
The r-th moment is finite if and only if b > r, so the mean needs
b > 1, the variance b > 2, skewness b > 3 and kurtosis
b > 4.
The moment generating function does not exist for any t > 0: a
regularly varying tail decays polynomially, so E(e^{tZ}) diverges.
Characteristic-function or Laplace-transform arguments must be used instead
of MGF ones anywhere in this family.
The distribution lies in the Frechet domain of attraction, so sample maxima
normalise to a Frechet limit with shape b, not to a Gumbel limit.
Value
A list with the tail index, the highest finite moment order, and a note on the moment generating function.
Examples
bd_tail_index(a = 1.5, b = 3, c = 2, k = 1)
Scaled Total Time on Test Plot
Description
Draws the scaled total time on test transform, a distribution-free way of judging hazard shape before any model is fitted.
Usage
bd_ttt_plot(
time,
status = NULL,
add = FALSE,
col = "steelblue",
lwd = 2,
main = "Scaled total time on test",
xlab = "i / n",
ylab = expression(phi(i/n)),
...
)
Arguments
time |
Numeric vector of observed times, or a fitted '"betadanish"' object, from which the times are taken. |
status |
Optional event indicator. Censored observations are dropped, since the transform is defined for complete samples. |
add |
Logical; add to an existing plot rather than starting a new one. |
col, lwd |
Colour and line width for the curve. |
main, xlab, ylab |
Labels. |
... |
Further graphical parameters. |
Details
For an ordered sample x_{(1)} \le \cdots \le x_{(n)}, the scaled
transform at i/n is
\phi(i/n) = \frac{\sum_{j=1}^{i} x_{(j)} + (n-i)x_{(i)}}
{\sum_{j=1}^{n} x_{(j)}}.
Read it against the diagonal. A curve entirely above the diagonal indicates an increasing hazard, entirely below a decreasing one; a curve that starts below and crosses above suggests a bathtub shape, and the reverse suggests a unimodal one. A curve close to the diagonal indicates a constant hazard, that is an exponential sample.
This is a shape diagnostic, not a test. It is worth drawing before choosing between the four-parameter model and its submodel, because it says which hazard shapes the data can support without assuming any of them.
Value
Invisibly, a data frame with the plotting coordinates 'i_n' and 'phi', and an attribute '"shape"' giving the suggested hazard shape.
See Also
[bd_hazard_shape()] for the fitted counterpart
Examples
data(guinea_pig)
ttt <- bd_ttt_plot(guinea_pig$time)
attr(ttt, "shape")
Log-Scale Wald Confidence Intervals
Description
Symmetric Wald intervals on the log-parameter scale, exponentiated back.
Usage
bd_wald_ci(object, level = 0.95)
Arguments
object |
A fitted '"betadanish"' object. |
level |
Confidence level. Default 0.95. |
Details
All four parameters are strictly positive, so a symmetric interval on the
natural scale can and does cross zero when a parameter is weakly identified.
Building the interval on the log scale and exponentiating keeps it inside
the parameter space:
\hat\theta \exp(\pm z\, \mathrm{SE}(\log\hat\theta)).
This is still a Wald interval, and it inherits the usual weakness: it assumes the log-likelihood is approximately quadratic. Where it is not – which is exactly where these intervals matter – prefer [bd_profile_ci()].
Value
A matrix with one row per parameter and columns 'estimate', 'se', 'lower' and 'upper'.
See Also
[bd_profile_ci()], [bd_identified_coef()]
Examples
dat <- simulate_bd_data(150, a = 1, b = 3, c = 2, k = 0.5, seed = 1)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
submodel = TRUE, n_starts = 3)
bd_wald_ci(fit)
Breaking Stress of Carbon Fibres
Description
Breaking stress (in GPa) of 100 carbon fibre specimens. This dataset exhibits a unimodal (increasing-then-decreasing) hazard pattern that classical distributions like the Weibull cannot adequately capture.
Usage
carbon_fibres
Format
A data frame with 100 rows and 2 columns:
- time
Breaking stress in GPa
- status
Event indicator (1 = event occurred)
Source
Nichols, M. D., & Padgett, W. J. (2006). A bootstrap control chart for Weibull percentiles. Quality and Reliability Engineering International, 22(2), 141-151.
Examples
data(carbon_fibres)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = carbon_fibres)
Cumulative Incidence Function
Description
Computes the cumulative incidence of one cause from a fitted Beta-Danish
competing risks model,
F_j(t) = \int_0^t f_j(u)\prod_{l \neq j} S_l(u)\,du.
Usage
cif_betadanish(fit, tvec, cause_idx, x = NULL)
Arguments
fit |
An object of class '"bd_competing"'. |
tvec |
Numeric vector of times at which to evaluate the CIF. |
cause_idx |
The cause to evaluate, matching one of the fitted causes. |
x |
Optional covariate values at which to evaluate, one per covariate in the fit. Defaults to zero for every covariate, which is the reference subject. Ignored when the model has no covariates. |
Details
The integrand is the cause-specific density multiplied by the survival of every other cause, so the sum of all cause CIFs approaches the overall failure probability rather than one, and each individual CIF is bounded by it.
Any covariate effect is folded into the scale parameter before integration,
since accelerating time by \lambda is equivalent to dividing k
by \lambda.
Value
A numeric vector of probabilities the same length as 'tvec'.
See Also
[fit_bd_competing()], [cif_compare()]
Examples
d <- simulate_bd_competing_data(120, seed = 2)
fit <- fit_bd_competing(d$time, d$cause, submodel = TRUE, n_starts = 1)
cif_betadanish(fit, tvec = c(1, 5, 10), cause_idx = 1)
Compare Model-Based CIF to the Aalen-Johansen Estimator
Description
Computes the nonparametric Aalen-Johansen CIF (via cmprsk) for each competing-risks cause, overlays it on the fitted Beta-Danish CIF, and returns the Aalen-Johansen times/estimates, the fitted CIF values on a common grid, and Gray's CIF-equality test where applicable.
Usage
cif_compare(fit, tmax = NULL, n_grid = 160, plot = TRUE)
Arguments
fit |
A fitted object of class |
tmax |
Optional upper time for evaluation; default the 95th percentile of observed times. |
n_grid |
Number of time points on the evaluation grid (default 160). |
plot |
Logical; if |
Details
Requires cmprsk (Suggests).
Value
A list with elements tgrid, cif_fit (data frame
long format), cif_aj (data frame long format) and optionally
gray_test.
Examples
## Not run:
set.seed(1)
T1 <- rbetadanish(200, 1.2, 1.5, 1.0, 0.4)
T2 <- rbetadanish(200, 1.0, 2.0, 1.0, 0.2)
C <- stats::rexp(200, 0.05)
time <- pmin(T1, T2, C)
cause <- ifelse(time == C, 0L, ifelse(T1 <= T2, 1L, 2L))
fit <- fit_bd_competing(time = time, cause = cause)
cif_compare(fit) # requires cmprsk to be installed
## End(Not run)
Extract Coefficients
Description
Extract Coefficients
Usage
## S3 method for class 'betadanish'
coef(object, ...)
Arguments
object |
An object of class 'betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
A named numeric vector of maximum likelihood parameter estimates.
Compare Beta-Danish with Standard Distributions
Description
Fits standard lifetime distributions (Weibull, Log-Normal, Log-Logistic, Gamma, Exponential) using the 'flexsurv' package and compares them to the Beta-Danish fit.
Usage
compare_distributions(object)
Arguments
object |
A fitted 'betadanish' object. |
Value
A ranked data frame of model comparisons.
Compare Nested Beta-Danish Models
Description
Performs a Likelihood Ratio Test (LRT) between the 4-parameter full model and the 3-parameter submodel.
Usage
compare_models(full_model, sub_model)
Arguments
full_model |
A fitted 4-parameter 'betadanish' object. |
sub_model |
A fitted 3-parameter 'betadanish' object. |
Value
A data frame with the test statistic and p-value.
Fit Beta-Danish AFT Regression Model
Description
Fits an Accelerated Failure Time (AFT) regression model using the Exponentiated Danish (ED) kernel, that is the Beta-Danish distribution with a = 1.
Usage
fit_bd_aft(formula, data, n_starts = 10, method = "BFGS")
Arguments
formula |
A survival formula (e.g., 'Surv(time, status) ~ age + treatment'). |
data |
A data frame containing the variables. |
n_starts |
Integer; number of random starts for optimization. |
method |
Optimization method passed to 'maxLik'. |
Details
To ensure identifiability, the shape parameter 'a' is fixed to 1. The scale parameter 'k' is linked to covariates via 'k_i = exp(X_i Positive coefficients in 'delta' indicate a larger 'k', which corresponds to shorter survival times (accelerated failure).
Value
An object of class 'bd_aft'.
Fit a Beta-Danish Competing Risks Model
Description
Fits a parametric competing risks model assuming independent latent failure times, with each cause-specific baseline following the Beta-Danish distribution. Covariates may be included, entering each cause through an accelerated failure time link.
Usage
fit_bd_competing(
time,
cause,
covariates = NULL,
data = NULL,
submodel = FALSE,
n_starts = 5,
method = "BFGS"
)
Arguments
time |
Numeric vector of observed times. |
cause |
Integer vector of event causes: '0' for right-censored and '1, 2, ..., m' for the competing causes. |
covariates |
Optional covariates. Either a one-sided formula such as '~ age + group', evaluated in 'data', or a numeric matrix or data frame with one row per observation. 'NULL' (default) fits cause-specific baselines with no regression structure. |
data |
Data frame in which to evaluate 'covariates' when it is a formula. |
submodel |
Logical; if 'TRUE', fix 'a = 1' in every cause, giving Exponentiated Danish cause-specific kernels. Default 'FALSE'. |
n_starts |
Integer; number of starting points for the joint optimisation. |
method |
Optimisation method passed to [maxLik::maxLik()]. |
Details
Writing \delta_i for the observed cause and d_i for the event
indicator, the log-likelihood is
\ell = \sum_{i: d_i = 1}\Bigl[\log f_{\delta_i}(y_i)
+ \sum_{j \neq \delta_i}\log S_j(y_i)\Bigr]
+ \sum_{i: d_i = 0}\sum_{j=1}^{m}\log S_j(y_i).
An event contributes the log-density of its own cause and the log-survival of every other cause at the same time; a censored observation contributes the log-survival of every cause.
Value
An object of class '"bd_competing"'.
Covariates
Each cause carries its own coefficient vector \gamma_j, acting on the
time scale:
T_j = T_{0j}\exp(x'\gamma_j),
so that a positive coefficient lengthens time to failure from that cause.
The likelihood contribution of an event at t is evaluated at the
accelerated time t\exp(-x'\gamma_j) with the Jacobian
-x'\gamma_j added on the log scale.
The same design matrix is used for every cause, but the coefficients are free to differ, so a covariate may accelerate one cause and retard another. With 'm' causes, 'p' covariates and the full Beta-Danish kernel the model carries 'm * (4 + p)' parameters, which grows quickly: check 'summary()' for standard errors before interpreting any of them.
Identifiability of the cause-specific marginals
Mutual independence of the latent failure times is an *identifying*
assumption, not an empirically testable property. Tsiatis (1975) showed that
without it infinitely many joint distributions generate the same observable
law of (T, \delta), so the marginals cannot be recovered from the
observed data alone.
Under positive latent dependence the working independence model overstates
each cause-specific survival at moderate times, biasing the fitted
cumulative incidence functions downward; negative dependence reverses both.
The overall survival S(t) = \prod_j S_j(t) is more robust than the
individual marginals. Where conclusions rest on absolute cause-specific
CIFs rather than on model selection, supplement this fit with a
copula-based sensitivity analysis.
References
Tsiatis, A. (1975). A nonidentifiability aspect of the problem of competing risks. *Proceedings of the National Academy of Sciences*, 72(1), 20-22. doi:10.1073/pnas.72.1.20
See Also
[cif_betadanish()], [cif_compare()], [simulate_bd_competing_data()]
Examples
# Without covariates
d <- simulate_bd_competing_data(150, seed = 1)
fit <- fit_bd_competing(d$time, d$cause, submodel = TRUE, n_starts = 1)
fit
# With one binary covariate. Note that simulate_bd_competing_data() only
# creates the covariate column when 'gammas' is supplied.
dx <- simulate_bd_competing_data(150, gammas = c(0.5, -0.5), seed = 2)
fit2 <- fit_bd_competing(dx$time, dx$cause, covariates = ~ x, data = dx,
submodel = TRUE, n_starts = 1)
fit2$coefficients
Fit Beta-Danish Cure Models
Description
Fits mixture and promotion-time (non-mixture) cure models using the Beta-Danish AFT baseline.
Usage
fit_bd_cure(
formula_aft,
formula_cure,
data,
type = c("mixture", "promotion"),
n_starts = 10,
method = "BFGS"
)
Arguments
formula_aft |
A formula for the latency component (e.g., 'Surv(time, status) ~ age'). |
formula_cure |
A one-sided formula for the incidence/cure component (e.g., '~ treatment'). |
data |
A data frame containing the variables. |
type |
Character; either '"mixture"' or '"promotion"'. |
n_starts |
Integer; number of random starts for optimization. |
method |
Optimization method passed to 'maxLik'. |
Details
In the **mixture** model, the population is split into susceptible and cured fractions. The susceptible probability is modeled via logistic regression: 'pi = exp(Z
In the **promotion-time** (non-mixture) model, the cure fraction is derived from a latent Poisson process of clonogenic cells: 'theta = exp(Z The cure fraction is 'exp(-theta)'.
Value
An object of class 'bd_cure'.
Fit the Beta-Danish Distribution to Survival Data
Description
Fits the Beta-Danish distribution by maximum likelihood. Complete and right-censored samples are both supported, via a 'survival::Surv' response.
Usage
fit_betadanish(
formula,
data,
submodel = FALSE,
n_starts = 10,
method = "BFGS",
check_identifiability = TRUE,
penalty = 0,
penalty_center = NULL,
grouped = FALSE,
delta = NULL
)
Arguments
formula |
A formula whose left-hand side is a 'Surv' object. Use '~ 1' for a model without covariates. |
data |
A data frame containing the variables in 'formula'. |
submodel |
Logical; if 'TRUE', fits the three-parameter Exponentiated Danish (ED) submodel by fixing 'a = 1'. |
n_starts |
Integer; number of random starting points for the multi-start optimisation. Default 10. |
method |
Character; optimisation method passed to 'maxLik::maxLik'. |
check_identifiability |
Logical; if 'TRUE' (default), issue warnings when the fit lands in a region where the parameters are weakly identified. |
penalty |
Non-negative ridge penalty applied on the log-parameter scale. '0' (default) is ordinary maximum likelihood. A small positive value stabilises the fit when the likelihood is nearly flat, at the cost of bias toward 'penalty_center'. |
penalty_center |
Numeric vector on the log-parameter scale toward which the penalty shrinks, or 'NULL' (default) to shrink toward the best unpenalised start. |
grouped |
Logical; if 'TRUE', use the grouped (interval) likelihood appropriate to times recorded on a coarse grid. Default 'FALSE'. |
delta |
Recording increment for 'grouped = TRUE'. 'NULL' (default) infers it from the spacing of the observed times. |
Details
Optimisation is carried out on log-transformed parameters so that positivity is enforced without constraints; estimates and the variance-covariance matrix are returned on the natural scale, the latter via the delta method.
Value
An object of S3 class '"betadanish"' with components including 'coefficients', 'logLik', 'vcov', 'npar', 'nobs', 'convergence' and 'diagnostics'.
Grouped data
Survival times are often recorded on a grid – whole days, whole months –
and the point-density likelihood is not appropriate for them. It treats a
rounded value as an exact observation, which overstates the information in
the sample and understates every standard error. With 'grouped = TRUE' an
event recorded at t contributes
\log\{F(t + \delta/2) - F(t - \delta/2)\} instead of
\log f(t); censored observations are unchanged. The cell probability
falls back to f(t)\delta only where the difference of two nearly
equal distribution values has cancelled to zero.
'read_survival_data()' reports an inferred 'grid_step' for exactly this purpose, and this function warns when the times look grid-recorded but 'grouped = FALSE'.
Penalised fitting
'penalty > 0' adds \lambda \sum (\theta - \mu)^2 on the
log-parameter scale. This is worth reaching for when the likelihood is flat
along the (a, c) direction and the unpenalised optimiser wanders, but
it is a deliberate bias: the estimates are shrunk toward 'penalty_center'.
The reported 'logLik' is always the **unpenalised** log-likelihood evaluated at the penalised estimate, so that AIC, BIC and likelihood ratio tests remain comparable across fits. The objective actually maximised is stored separately as 'penalised_logLik'. Treat the degrees of freedom as nominal: shrinkage reduces the effective number of parameters, so information criteria are conservative under penalisation.
Identifiability
The four-parameter model is not uniformly well identified, and a converged fit is not by itself evidence that it is. Two regions warrant care.
* **The b = 1 ridge.** At b = 1 the beta generator collapses and
the model is non-identifiable. A fit with \hat b within about two
standard errors of one lies close to that ridge; the likelihood is nearly
flat along it, so the individual estimates carry little information even
though the fitted survival curve may look excellent.
* **Lower-tail (a, c) confounding.** Near the lower tail, a and
c enter almost exclusively through the product ca, so the
expected Fisher information is close to singular in that direction. A
fitted correlation between \hat a and \hat c above about 0.95
in absolute value indicates that only the product is being estimated.
In either case the ED submodel ('submodel = TRUE') is usually the honest report, and a likelihood ratio test via [compare_models()] will normally fail to reject it. Set 'check_identifiability = FALSE' to silence the warnings once you have satisfied yourself that they are understood.
See Also
[compare_models()], [gof_betadanish()], [compare_distributions()]
Examples
set.seed(123)
sim_time <- rbetadanish(150, a = 1.5, b = 3, c = 2, k = 0.5)
sim_status <- rbinom(150, 1, 0.85)
dat <- data.frame(time = sim_time, status = sim_status)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat)
summary(fit)
fit_sub <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
submodel = TRUE)
compare_models(fit, fit_sub)
Goodness-of-Fit Statistics for Beta-Danish Models
Description
Computes Information Criteria (AIC, BIC, HQIC, AICC) and the Kolmogorov-Smirnov (K-S) statistic for a fitted Beta-Danish model.
Usage
gof_betadanish(object)
Arguments
object |
A fitted 'betadanish' object. |
Value
A list containing the Information Criteria and the K-S statistic.
Guinea Pig Survival Times
Description
Survival times, in days, of 72 guinea pigs injected with virulent tubercle bacilli, taken from the principal regimen of the study of Bjerkedal (1960). A complete sample: every animal was observed to death, so 'status' is 1 throughout.
Usage
guinea_pig
Format
A data frame with 72 rows and 2 columns:
- time
Survival time in days
- status
Event indicator, 1 for all observations (no censoring)
Details
These data are the reference case for a well-identified four-parameter
fit. The scaled total-time-on-test transform is unimodal and the upper
tail is determinate rather than heavy, and the maximum-likelihood fit of
the full Beta-Danish model attains a finite interior optimum: every
estimate lies strictly inside the parameter space, with
\hat b = 3.64 (Wald standard error 1.20), so that
(\hat b - 1)/\mathrm{SE} = 2.20 places b more than two
standard errors clear of the b = 1 identifiability ridge.
By contrast, on 'remission' and 'carbon_fibres' the four-parameter fit
sits on the flat (a, c) direction of the likelihood with
\hat a < 1 and is only weakly identified. Use this dataset when
you want to see the parent model behaving well; see the Identifiability
section of [fit_betadanish()] for what to watch for elsewhere.
Source
Bjerkedal, T. (1960). Acquisition of resistance in guinea pigs infected with different doses of virulent tubercle bacilli. *American Journal of Epidemiology*, 72(1), 130-148. doi:10.1093/oxfordjournals.aje.a120129
Examples
data(guinea_pig)
summary(guinea_pig$time)
fit_full <- fit_betadanish(survival::Surv(time, status) ~ 1,
data = guinea_pig)
fit_sub <- fit_betadanish(survival::Surv(time, status) ~ 1,
data = guinea_pig, submodel = TRUE)
compare_models(fit_full, fit_sub)
Acute Myelogenous Leukemia Survival
Description
Survival times (in weeks) for 23 patients with acute myelogenous leukemia. A classic, small dataset perfect for fast testing of censored data workflows.
Usage
leukemia
Format
A data frame with 23 rows and 3 columns:
- time
Survival time in weeks
- status
Event indicator (1 = event, 0 = censored)
- group
Treatment group (Maintained vs Non-maintained)
Source
Miller, R. G. (1997). Survival Analysis. Wiley.
Examples
data(leukemia)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = leukemia)
Extract Log-Likelihood
Description
Extract Log-Likelihood
Usage
## S3 method for class 'betadanish'
logLik(object, ...)
Arguments
object |
An object of class 'betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
An object of class logLik containing the maximized log-likelihood value, with degrees of freedom and number of observations stored as attributes.
Malignant Melanoma Survival After Surgery
Description
Survival times for 205 patients with malignant melanoma after surgery. This rich clinical dataset includes multiple covariates and heavy censoring.
Usage
melanoma
Format
A data frame with 205 rows and 7 columns:
- time
Survival time in days
- status
Event indicator (1 = died from melanoma, 0 = alive, 2 = other death)
- thickness
Tumor thickness in mm
- sex
Patient sex (1 = male, 0 = female)
- age
Patient age in years
- ulcer
Ulceration indicator (1 = present, 0 = absent)
- year
Year of operation
Source
Andersen, P. K., Borgan, O., Gill, R. D., & Keiding, N. (1993). Statistical Models Based on Counting Processes. Springer.
Examples
data(melanoma)
# Treat status 1 as event, others as censored
melanoma$event <- ifelse(melanoma$status == 1, 1, 0)
fit <- fit_betadanish(survival::Surv(time, event) ~ age + thickness, data = melanoma)
Cox-Snell Residual Plot for AFT and Cure Fits
Description
Diagnostic Cox-Snell residual plot for a fitted AFT or cure model. Under a correctly specified model the residuals behave like a unit exponential sample, so the Kaplan-Meier estimate of their cumulative hazard should follow the 45-degree line.
Usage
## S3 method for class 'bd_aft'
plot(x, ...)
## S3 method for class 'bd_cure'
plot(x, ...)
Arguments
x |
A fitted '"bd_aft"' or '"bd_cure"' object. |
... |
Further graphical parameters passed to 'plot'. |
Value
Invisibly returns 'x'.
Examples
set.seed(42)
n <- 300
xcov <- stats::rnorm(n)
k_i <- exp(-0.5 - 0.3 * xcov)
t_sim <- rbetadanish(n, a = 1, b = 2, c = 1.5, k = k_i)
dat <- data.frame(time = t_sim,
status = stats::rbinom(n, 1, 0.85),
x = xcov)
fit <- fit_bd_aft(survival::Surv(time, status) ~ x, data = dat, n_starts = 5)
plot(fit)
Diagnostic Plots for a Bayesian Fit
Description
Trace and posterior density plots for each parameter of a [bayes_betadanish()] fit.
Usage
## S3 method for class 'bd_bayes'
plot(
x,
which = NULL,
type = c("both", "trace", "density"),
col = "steelblue",
...
)
Arguments
x |
An object of class '"bd_bayes"'. |
which |
Optional character vector of parameters to show. Defaults to all of them. |
type |
'"both"' (default) for trace and density side by side, or '"trace"' or '"density"' alone. |
col |
Colour for the traces and densities. |
... |
Further graphical parameters. |
Details
Read the traces first. A well-mixed chain looks like noise around a stable level, with no drift and no long excursions. Visible trend means the burn-in was too short; a chain that sticks at one value for many iterations means the proposal is too wide and almost every move is being rejected, which is worth fixing with 'tune' before interpreting anything.
The graphical parameters are restored on exit, so the function leaves the device as it found it.
Value
Invisibly returns 'x'.
See Also
[bayes_betadanish()]
Examples
if (requireNamespace("MCMCpack", quietly = TRUE) &&
requireNamespace("coda", quietly = TRUE)) {
dat <- simulate_bd_data(80, a = 1, b = 3, c = 2, k = 0.5, seed = 6)
bfit <- bayes_betadanish(dat$time, dat$status, submodel = TRUE,
burnin = 200, mcmc = 800, seed = 1)
plot(bfit)
}
Plot Diagnostics for Beta-Danish Fit
Description
Generates diagnostic plots for a fitted Beta-Danish model, including survival, hazard, density, PP, and QQ plots.
Usage
## S3 method for class 'betadanish'
plot(x, type = c("survival", "hazard", "density", "pp", "qq", "all"), ...)
Arguments
x |
A fitted 'betadanish' object. |
type |
Character string specifying the plot type: '"survival"', '"hazard"', '"density"', '"pp"', '"qq"', or '"all"'. |
... |
Additional arguments passed to the base 'plot' function. |
Value
Invisibly returns the input betadanish object. Called mainly for its side effect of producing diagnostic plots.
Print Method for Beta-Danish Fit
Description
Print Method for Beta-Danish Fit
Usage
## S3 method for class 'betadanish'
print(x, ...)
Arguments
x |
An object of class 'betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
Invisibly returns the input betadanish object. Called mainly for its side effect of printing the fitted model summary.
Print Summary Method for Beta-Danish Fit
Description
Print Summary Method for Beta-Danish Fit
Usage
## S3 method for class 'summary.betadanish'
print(x, ...)
Arguments
x |
An object of class 'summary.betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
Invisibly returns the input summary.betadanish object. Called mainly for its side effect of printing the coefficient table and fit statistics.
Read and Prepare Survival Data
Description
Reads survival data from a delimited text file or an Excel workbook and returns a clean data frame ready for [fit_betadanish()] and the regression fitters. Columns are selected by name, covariates keep their original type, and the result carries a report describing what was read.
Usage
read_survival_data(
file,
time_col = NULL,
status_col = NULL,
covar_cols = NULL,
cause_col = NULL,
sep = ",",
dec = ".",
encoding = "unknown",
na.strings = c("NA", "", ".", "#N/A"),
drop_na = TRUE,
quiet = FALSE
)
Arguments
file |
Path to a '.csv', '.txt', '.tsv', '.xls' or '.xlsx' file. |
time_col |
Name of the time column. If 'NULL' (default), the column is guessed from a list of common names and the choice is reported. |
status_col |
Name of the event indicator (1 = event, 0 = censored). If 'NULL', guessed the same way; if no candidate is found, all observations are treated as uncensored. |
covar_cols |
Covariate columns to retain. Either a character vector of column names, the string '"all"' to retain every column that is not part of the response, or 'NULL' (default) to retain none. Whatever is dropped is named in a message unless 'quiet = TRUE'. |
cause_col |
Name of a competing-risks cause column, or 'NULL'. When supplied, code 0 means censored and positive integers index the causes. |
sep |
Field separator. Defaults to a comma. Use '"\t"' for tab-delimited input, '";"' for semicolon-delimited. |
dec |
Decimal mark. Use '","' for European-format numerics. |
encoding |
File encoding passed to [utils::read.table()], for example '"UTF-8"' or '"latin1"'. |
na.strings |
Strings to treat as missing. |
drop_na |
Logical; drop incomplete rows. Default 'TRUE'. |
quiet |
Logical; suppress the informational messages. |
Details
Column guessing is deliberately conservative. Names meaning "censoring indicator" are excluded from the candidate list, because 'censor = 1' means *censored* in some conventions and *observed* in others, and guessing wrong would silently invert every event. Name the column explicitly if in doubt.
A covariate that happens to be called 'time', 'status' or 'cause' is renamed with a '_cov' suffix and a warning rather than colliding with the response.
Excel input requires the 'readxl' package.
Value
A data frame with columns 'time', 'status', an optional 'cause', and any retained covariates. The '"bd_data_report"' attribute is a list recording the file, which columns were used, rows read and kept, number of events, censoring proportion, retained and dropped columns, and the inferred recording grid.
See Also
[fit_betadanish()], [fit_bd_aft()], [fit_bd_competing()]
Examples
# A complete uncensored sample with a non-standard column name
f <- system.file("extdata", "complete_sample.csv", package = "BetaDanish")
dat <- read_survival_data(f, time_col = "survival_days", quiet = TRUE)
attr(dat, "bd_data_report")$rows_kept
# Column names guessed, and every covariate retained
f2 <- system.file("extdata", "censored_sample.csv", package = "BetaDanish")
dat2 <- read_survival_data(f2, covar_cols = "all", quiet = TRUE)
names(dat2)
# Competing risks
f3 <- system.file("extdata", "competing_sample.csv", package = "BetaDanish")
dat3 <- read_survival_data(f3, time_col = "time", cause_col = "cause",
quiet = TRUE)
table(dat3$cause)
Bladder Cancer Remission Times
Description
Remission times (in months) for 128 bladder cancer patients. This is a complete (uncensored) sample widely used in lifetime distribution literature to demonstrate decreasing or right-skewed hazard rates.
Usage
remission
Format
A data frame with 128 rows and 2 columns:
- time
Remission time in months
- status
Event indicator (1 = event occurred)
Source
Lee, E. T., & Wang, J. W. (2003). Statistical Methods for Survival Data Analysis (3rd ed.). Wiley.
Examples
data(remission)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = remission)
summary(fit)
Create a Compact Report from a Beta-Danish Model Fit
Description
Collects the headline quantities from a fitted model into a small object with a 'print' method. Information criteria are computed from the fitted log-likelihood via the 'logLik' method, so they cannot fall out of step with the fit.
Usage
report_betadanish(fit)
## S3 method for class 'betadanish_report'
print(x, ...)
Arguments
fit |
A fitted '"betadanish"' object. |
x |
A '"betadanish_report"' object. |
... |
Ignored. |
Value
An object of class '"betadanish_report"'.
Invisibly returns 'x'.
Examples
set.seed(1)
dat <- simulate_bd_data(120, a = 1, b = 3, c = 2, k = 0.5)
fit <- fit_betadanish(survival::Surv(time, status) ~ 1, data = dat,
submodel = TRUE)
report_betadanish(fit)
Simulate Competing Risks Data
Description
Simulate Competing Risks Data
Usage
simulate_bd_competing_data(
n,
pars = list(c(a = 1, b = 2.5, c = 1.8, k = 0.04), c(a = 1, b = 3.5, c = 1.2, k = 0.02)),
gammas = NULL,
censor_rate = 0.15,
seed = NULL
)
Arguments
n |
Sample size. |
pars |
List of parameter vectors, one per cause, each a named vector with 'b', 'c', 'k' and optionally 'a'. Defaults to two causes. |
gammas |
Numeric vector of accelerated failure time coefficients, one per cause, acting on a single binary covariate. 'NULL' for no covariate. |
censor_rate |
Approximate proportion of right-censored observations. |
seed |
Optional integer seed. |
Value
A data frame with 'time', 'cause' (0 for censored) and, when 'gammas' is supplied, the covariate 'x'.
See Also
[fit_bd_competing()]
Examples
d <- simulate_bd_competing_data(200, seed = 1)
table(d$cause)
Simulate Beta-Danish Cure Data
Description
Generates synthetic survival data from a Beta-Danish mixture or promotion-time cure model, incorporating covariates.
Usage
simulate_bd_cure_data(
n,
type = c("mixture", "promotion"),
a = 1,
b = 2,
c = 1.5,
delta,
gamma,
X,
Z,
target_censor = 0.3,
seed = NULL
)
Arguments
n |
Integer; number of observations. |
type |
Character; '"mixture"' or '"promotion"'. |
a, b, c |
Numeric; baseline shape parameters. |
delta |
Numeric vector; coefficients for the latency scale 'k'. |
gamma |
Numeric vector; coefficients for the incidence/cure component. |
X |
Matrix; design matrix for latency (must match length of 'delta'). |
Z |
Matrix; design matrix for incidence (must match length of 'gamma'). |
target_censor |
Numeric; target proportion of censoring to calibrate the exponential censoring rate. Default is 0.3. |
seed |
Integer; optional seed. |
Value
A list containing the simulated 'data' (time, status), the 'cured' indicator, and the true parameters.
Simulate Data from the Beta-Danish Distribution
Description
Generates synthetic survival data from the Beta-Danish distribution, with optional right-censoring.
Usage
simulate_bd_data(n, a, b, c, k, censor_rate = 0, seed = NULL)
Arguments
n |
Integer; number of observations to simulate. |
a, b, c, k |
Numeric; parameters of the Beta-Danish distribution. |
censor_rate |
Numeric; rate parameter for the exponential censoring distribution. If '0' (default), no censoring is applied. |
seed |
Integer; optional seed for reproducibility. |
Value
A data frame with columns 'time' and 'status'.
Examples
# Simulate complete data
dat <- simulate_bd_data(n = 100, a = 1.5, b = 2, c = 3, k = 0.5)
# Simulate censored data
dat_cens <- simulate_bd_data(n = 100, a = 1.5, b = 2, c = 3, k = 0.5, censor_rate = 0.1)
Summary Method for Beta-Danish Fit
Description
Summary Method for Beta-Danish Fit
Usage
## S3 method for class 'betadanish'
summary(object, ...)
Arguments
object |
An object of class 'betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
An object of class summary.betadanish containing coefficient estimates, standard errors, test statistics, p-values, log-likelihood, and model selection criteria.
Bone Marrow Transplant Survival
Description
Survival times for 91 patients with refractory acute lymphoblastic leukemia who received either an allogeneic or autologous bone marrow transplant. This dataset includes right-censoring and a treatment covariate, making it ideal for demonstrating cure-rate models and AFT regression.
Usage
transplant
Format
A data frame with 91 rows and 3 columns:
- time
Survival time in days
- status
Event indicator (1 = death/relapse, 0 = censored)
- group
Treatment group (0 = Allogeneic, 1 = Autologous)
Source
Klein, J. P., & Moeschberger, M. L. (2003). Survival Analysis: Techniques for Censored and Truncated Data (2nd ed.). Springer.
Examples
data(transplant)
# Fit a model with a covariate
fit <- fit_bd_aft(survival::Surv(time, status) ~ group, data = transplant)
Extract Variance-Covariance Matrix
Description
Extract Variance-Covariance Matrix
Usage
## S3 method for class 'betadanish'
vcov(object, ...)
Arguments
object |
An object of class 'betadanish'. |
... |
Further arguments passed to or from other methods. |
Value
A numeric variance-covariance matrix for the estimated model parameters.