README.md

survdistr

Survival distribution container for efficient storage, management, and interpolation of survival model predictions.

r-cmd-check Codecov test
coverage CRAN
Status

Installation

Install the development version from GitHub:

# install.packages("pak")
pak::pak("mlr-org/survdistr")

Examples

Linear interpolation of a survival matrix using the survDistr R6 class:

library(survdistr)

# generate survival matrix
mat = matrix(data = c(0.9,0.6,0.4,0.8,0.8,0.7), nrow = 2,
             ncol = 3, byrow = TRUE)
x = survDistr$new(x = mat, times = c(12, 34, 42), method = "linear_surv")
x
## A [2 x 3] survival matrix
## Number of observations: 2
## Number of time points: 3
## Interpolation method: Piecewise Constant Density (Linear Survival)
# stored survival matrix
x$data()
##       12  34  42
## [1,] 0.9 0.6 0.4
## [2,] 0.8 0.8 0.7
# S(t) at requested time points (linear interpolation)
x$survival(times = c(5, 30, 42, 50))
##              5        30  42  50
## [1,] 0.9583333 0.6545455 0.4 0.2
## [2,] 0.9166667 0.8000000 0.7 0.6
# Cumulative hazard H(t)
x$cumhazard(times = c(5, 42))
##               5        42
## [1,] 0.04255961 0.9162907
## [2,] 0.08701138 0.3566749
# Probability density f(t)
x$density(times = c(5, 30, 42))
##                5         30     42
## [1,] 0.008333333 0.01363636 0.0250
## [2,] 0.016666667 0.00000000 0.0125
# Hazard h(t)
x$hazard(times = c(5, 30, 42))
##                5         30         42
## [1,] 0.008695652 0.02083333 0.06250000
## [2,] 0.018181818 0.00000000 0.01785714

Interpolation of a Kaplan-Meier survival curve using exported R function that calls C++ code:

library(survival)

fit = survfit(formula = Surv(time, status) ~ 1, data = veteran)
tab = data.frame(time = fit$time, surv = fit$surv)
head(tab)
##   time      surv
## 1    1 0.9854015
## 2    2 0.9781022
## 3    3 0.9708029
## 4    4 0.9635036
## 5    7 0.9416058
## 6    8 0.9124088
tail(tab)
##     time        surv
## 96   411 0.045022553
## 97   467 0.036018043
## 98   553 0.027013532
## 99   587 0.018009021
## 100  991 0.009004511
## 101  999 0.000000000
# constant S(t) interpolation
interp(
  x = tab$surv,
  times = tab$time,
  eval_times = c(0, 3.5, 995)
)
##           0         3.5         995 
## 1.000000000 0.970802920 0.009004511
# linear S(t) interpolation
interp(
  x = tab$surv,
  times = tab$time,
  eval_times = c(0, 3.5, 995),
  method = "linear_surv"
)
##           0         3.5         995 
## 1.000000000 0.967153285 0.004502255
# exponential S(t) interpolation
interp(
  x = tab$surv,
  times = tab$time,
  eval_times = c(0, 3.5, 995),
  method = "exp_surv"
)
##         0       3.5       995 
## 1.0000000 0.9671464 0.0000000

Code of Conduct

Please note that the survdistr project is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.



Try the survdistr package in your browser

Any scripts or data that you put into this service are public.

survdistr documentation built on April 9, 2026, 5:09 p.m.