Description
Survival Distribution Container with Flexible Interpolation Methods.
Description
Efficient containers for storing and managing prediction outputs from survival models, including Cox proportional hazards, random survival forests, and modern machine learning estimators. Provides fast C++ methods to evaluate survival probabilities, hazards, probability densities, and related quantities at arbitrary time points, with support for multiple interpolation methods via 'Rcpp'.
README.md
survdistr
Survival distribution container for efficient storage, management, and interpolation of survival model predictions.
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.