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'.
Survival distribution container for efficient storage, management, and interpolation of survival model predictions.
Install the development version from GitHub:
# install.packages("pak")
pak::pak("mlr-org/survdistr")
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
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.