| output | ||||
|---|---|---|---|---|
|
Dynamic Failure Rate Distributions for Survival Analysis
The dfr.dist package provides a flexible framework for specifying survival
distributions through their hazard (failure rate) functions. Instead of
choosing from a fixed catalog of distributions, you directly specify the hazard
function, giving complete control over time-varying failure patterns.
- Flexible hazard specification: Define any hazard function h(t, par, ...)
- Complete distribution interface: Automatic computation of survival, CDF, PDF, quantiles
- Likelihood model support: Log-likelihood, score, Hessian for MLE
- Censoring support: Handle exact and right-censored survival data
- Integration with ecosystem: Works with
algebraic.dist,likelihood.model,algebraic.mle
Install from GitHub:
# install.packages("devtools")
devtools::install_github("queelius/dfr_dist")library(dfr.dist)
library(algebraic.dist)# Exponential distribution: constant hazard h(t) = lambda
exp_dist <- dfr_dist(
rate = function(t, par, ...) rep(par[1], length(t)),
par = c(lambda = 0.5)
)
# All distribution functions are automatically available
S <- surv(exp_dist)
S(2) # Survival probability at t=2
#> [1] 0.3678794# Simulate failure times
set.seed(42)
times <- rexp(50, rate = 1)
df <- data.frame(t = times, delta = 1)
# Create distribution without fixed parameters
dist <- dfr_dist(
rate = function(t, par, ...) rep(par[1], length(t))
)
# Fit via MLE
solver <- fit(dist)
result <- solver(df, par = c(0.5), method = "BFGS")
params(result)
#> [1] 0.8808457Model complex failure patterns like bathtub curves (infant mortality + useful life + wear-out):
# h(t) = a*exp(-b*t) + c + d*t^k
bathtub <- dfr_dist(
rate = function(t, par, ...) {
par[1] * exp(-par[2] * t) + par[3] + par[4] * t^par[5]
},
par = c(a = 1, b = 2, c = 0.02, d = 0.001, k = 2)
)
h <- hazard(bathtub)
curve(sapply(x, h), 0, 15, xlab = "Time", ylab = "Hazard rate",
main = "Bathtub hazard curve")For a lifetime
From the hazard, all other quantities follow:
| Function | Formula | Method |
|---|---|---|
| Cumulative hazard | cum_haz() |
|
| Survival | surv() |
|
| CDF | cdf() |
|
pdf() |
For exact observations:
For right-censored:
# Mixed data with censoring
df <- data.frame(
t = c(1, 2, 3, 4, 5),
delta = c(1, 1, 0, 1, 0) # 1 = exact, 0 = censored
)
ll <- loglik(dist)
ll(df, par = c(0.5))
#> [1] -9.579442algebraic.dist: Generic distribution interfacelikelihood.model: Likelihood model frameworkalgebraic.mle: MLE utilities
