fitdistrBayes 0.8.0 fits common univariate distributions
under registered objective Bayesian priors through a deliberately small
interface:
fitdistrBayes(x, distr, prior)For a built-in route, the package checks the sampling support and the known posterior-propriety condition before computation. It also records whether the posterior mean and variance of each parameter are mathematically certified to exist, so a finite chain is not used to justify a divergent moment.
Install the source archive supplied with this research release and load it:
install.packages("fitdistrBayes_0.8.0.tar.gz", repos = NULL,
type = "source")
library(fitdistrBayes)library(survival)
fit <- fitAFTBayes(Surv(time, event) ~ age10 + group, data = dat,
distr = "weibull", prior = "reference", seed = 40)
coef(fit, type = "time_ratio")
confint(fit, type = "time_ratio")
predict(fit, newdata = profiles, times = c(1, 3, 5))Use a numeric response for complete data.
fitAFTBayes_models() lists nine families: Prentice
generalized gamma (the default), Weibull, lognormal, log-logistic,
log-Laplace, fixed-degree log-Student-t, exponential, Rayleigh, and
gamma. Factors and interactions are supported. Right censoring is
conditional non-informative censoring; left truncation, other censoring
types, offsets and weights are not supported. The function checks
sufficient failure-design conditions before fitting. It reports sampling
diagnostics and applies model-specific propriety checks.
GG offers prior="reference" and
prior="simple" and rejects joint Jeffreys because its
posterior is improper. Other families offer reference and joint
Jeffreys, with the prior specified in each model’s own parameters. Gamma
estimates its unrestricted positive shape by default; the two shape
factors and boundary proof are documented. A fixed shape is
optional. Log-Student-t requires a fixed df and passes a
conservative pointwise certificate that protects against partially
interpolated/rounded samples. Exponential/Rayleigh fix scale, so both
prior names reduce to flat beta. No prior hyperparameters or arbitrary
shape truncation are introduced.
GG uses quantile-centered slice sampling to improve exploration of the curved scale-shape tails under heavy censoring. Centering is a change of coordinates with unit intercept Jacobian; the priors and observed-data likelihood are unchanged. Each iteration is a full sweep. Inspect rank-normalized R-hat and bulk/tail ESS; numerical convergence is not guaranteed merely by posterior propriety. Complete lognormal regression and selected intercept-only models use exact posterior simulation. Other families use fixed-basis slice sweeps.
summary, coef, confint,
predict, plot, log_lik,
WAIC, LOOIC, DIC and
compare_models support the AFT class. DIC reports
unavailability under both GG priors because the posterior absolute mean
of Q diverges. Other families allow DIC only when the needed parameter
means are certified. Survival summaries distinguish the predictive mean
survival probability from the posterior median and interval of the
conditional survival curve.
See help("fitAFTBayes"),
help("fitAFTBayes-methods"), the synthetic-data
inst/examples/tutorial_aft_gg.R,
inst/examples/tutorial_aft_models.R,
inst/doc/gg-aft-theory.txt, and
inst/doc/aft-models-theory.txt.
The complete-data and censored interfaces accept
"dhillon", with survival 1/(1 + theta*t^beta)
and positive parameters beta, theta. The aliases
"log-logistic" and "loglogistic" use exactly
this parameterization. Jeffreys and "reference-beta"
coincide; "reference-theta" is a distinct ordered prior.
"reference" means "reference-beta". MDI is
rejected.
set.seed(19)
x <- exp((rlogis(100) - log(2)) / 3)
fit <- fitdistrBayes(x, "dhillon", "reference-beta", seed = 20)
observed <- pmin(x, 1)
status <- as.integer(x <= 1)
fit_cens <- fitcensBayes(observed, status, "dhillon", "reference-theta", seed = 21)
fit$moment_status
fit$predictive_moments
help("Dhillon")Both observed-likelihood and augmentation methods are available.
Exact observed-data propriety and parameter-moment checks run before
sampling. Predictive lifetime means are infinite: use quantiles and
survival probabilities. The console tutorial is
inst/examples/tutorial_dhillon.R; the censored-data
derivation is in inst/doc/dhillon-theory.txt (installed as
doc/).
Both fitting functions default to criteria = FALSE: no
additional likelihood matrix or information criterion is computed.
Existing R-hat/ESS diagnostics are independent of this option. Use
criteria = TRUE to compute all criteria after sampling, or
choose criteria = c("waic", "dic") without extra
dependencies. PSIS-LOO requires the optional loo package.
The fitting chains are unchanged.
set.seed(20)
x <- rexp(60)
fit <- fitdistrBayes(x, "exponential", "reference", seed = 21,
criteria = c("waic", "dic"))
fit$criteria
WAIC(fit) # May also be computed later
# install.packages("loo") # Once, if PSIS-LOO is desired
# LOOIC(fit)The same functions accept fitcensBayes fits and use log
survival for censored observations, never imputed-data densities. DIC is
unavailable if necessary posterior means are not certified finite. LOO
is withheld if a training posterior is not certified proper. Inspect
diagnostic warnings before model comparison.
compare_models() requires the same observations, censoring
status, and scale. See help("criteria") for definitions,
output components, and limitations.
The separate function
fitcensBayes(x, status, distr, prior) uses
status = 1 for exact observations and
status = 0 for the strict event T > x. For
discrete distributions this distinction is important: a record meaning
T >= 3 must be supplied as
x = 2, status = 0.
set.seed(20)
lifetime <- rexp(80, rate = 0.7)
censoring <- rexp(80, rate = 0.3)
x <- pmin(lifetime, censoring)
status <- as.integer(lifetime <= censoring)
fit <- fitcensBayes(x, status, "exponential", "reference", seed = 21)
summary(fit)
confint(fit)
predict(fit, type = "survival", times = c(1, 2, 3), draws = 5)
log_lik(fit, draws = 5)The catalogue fitcensBayes_models() lists 59 registered
model-prior routes for 21 distributions. The priors are inherited from
the complete-data model; they are not claimed to be
Jeffreys or reference priors rederived for a particular censoring
design. Posterior propriety is certified by sufficient conditions on the
exact-event subset, with an additional analytic Exponential case and an
exact observed-data condition for Dhillon. An uncertified case is
rejected before sampling. Imputed observations are never used to satisfy
these conditions.
method = "auto" uses the observed likelihood when
censoring is present; method = "augmentation" alternates
truncated lifetime simulation with parameter updates. Without censoring,
method = "auto" uses the original complete-data sampler.
Posterior medians, credible intervals, rank-based diagnostics and
justified moment summaries are returned. Heavy censoring may require
substantially longer chains. A diagnostic pass is not a convergence
proof. Densities or priors defined by the user remain available through
the original fitdistrBayes() interface, but not the new
censored interface.
See help("fitcensBayes") and the installed English
tutorial:
system.file("examples", "tutorial_fitcensBayes.R", package = "fitdistrBayes")An exact-posterior example:
set.seed(10)
x <- rexp(40, rate = 2)
fit_exp <- fitdistrBayes(x, "exponential", "jeffreys", seed = 11)
fit_exp
confint(fit_exp)An MCMC example with a parameter-specific reference prior:
set.seed(20)
x <- rgamma(50, shape = 2.5, rate = 1.3)
fit_gamma <- fitdistrBayes(
x, "gamma", "reference-shape",
iter = 6000, warmup = 1000, chains = 4, seed = 21
)
summary(fit_gamma)
plot(fit_gamma, type = "trace")
plot(fit_gamma, type = "acf")fit$summary contains posterior medians, equal-tail
intervals, R-hat, bulk and tail ESS, and MCSE when the relevant moments
exist. Acceptance rates labelled overall use post-warmup
iterations; warmup and all-iteration rates are stored separately.
Posterior prediction and pointwise log likelihood are computed on demand:
yrep <- predict(fit_gamma, draws = 500, size = length(x), seed = 22)
ll <- log_lik(fit_gamma, draws = 500, seed = 23)
dim(yrep)
dim(ll)The package has 59 enabled model–prior combinations for 21 distributions. For Student-t with unknown degrees of freedom, the independence Jeffreys prior requires at least two pairwise distinct observations; samples with ties are rejected because the posterior is improper. Fixed-df Student-t models use their separate, multiplicity-dependent conditions. The public machine-readable catalogue is the concise way to inspect them:
fitdistrBayes_routes()
fitdistrBayes_routes("gamma")
fitdistrBayes_routes("t")
fitdistrBayes_routes("weighted lindley")The catalogue reports the estimated parameters, any required fixed
parameter, the computational engine, and a concise propriety condition.
The fitting function performs the authoritative sample-dependent check.
In particular, the negative-binomial routes estimate mu
with known positive size:
x <- rnbinom(40, size = 5, mu = 3)
fit_nb <- fitdistrBayes(
x, "negative binomial", "reference", fixed = list(size = 5), seed = 30
)When start = NULL and numerical initialization is
required, the package uses classical estimators: ordinary moments where
they exist, quantile matching for Cauchy and heavy-tailed Student-t
cases, and closed-form L-moments for Weibull, Frechet, and Lomax. The
Exponential-Logarithmic model uses a stable scalar moment equation.
Exact independent posterior simulation does not require a starting
point. The selected rule and center are stored in
fit$initialization.
For weighted Lindley data, the package uses the model’s closed-form
likelihood estimator (with a numerical maximum-likelihood fallback) and
samples in the exactly Fisher-orthogonal mean/shape parameterization.
The public output remains on the original lambda, phi
scale. The one-group reference prior equals
Fisher-information Jeffreys; reference-lambda and
reference-phi select the two exact ordered reference
priors.
For the implemented Frechet parameterization,
F(x) = exp(-scale * x^(-shape)); hence the argument named
scale is the positive coefficient in the exponent, while
the conventional quantile scale is scale^(1 / shape).
A custom density requires named starting values and a prior function.
Log mode is inferred only from an explicit log argument;
the presence of ... alone does not imply that
log = TRUE is honored. The contract can be set explicitly
with control$density_is_log and
control$prior_is_log. Use
control$prior_style = "scalar" or "vector"
when automatic prior calling is ambiguous. Bounds are supplied through
control$lower and control$upper; the package
constructs the componentwise transform and Jacobian. A predictive RNG
and its optional support validator can be supplied through
control$rng and control$rng_validator.
Posterior propriety and posterior-moment existence remain the user’s responsibility for every custom target.
The package handles complete iid univariate samples and independent,
noninformative right censoring through fitcensBayes().
Optional WAIC, DIC, and PSIS-LOO calculations use the observed-data
likelihood. It refuses routes known to be improper, including the Lomax
independent Jeffreys/reference posterior and the Nakagami-m MDI
posterior, and it does not substitute an approximation when full-model
propriety has not been established. Numerical overflow or underflow
stops with an explicit error; values are not silently clipped into the
floating-point range.
A console-oriented walkthrough is installed at
inst/examples/teaching.R. For the complete mathematical
catalogue and computational validation, cite the accompanying
manuscript, fitdistrBayes: Objective Bayesian Distribution Fitting
in R. Until a public issue tracker is announced, reproducible
problem reports can be sent to the maintainer address in
DESCRIPTION.
This research version is licensed under GPL-3.