Skip to contents

Parametric survival model. Calls parametric()] from 'survivalmodels'.

Details

This learner allows you to choose a distribution and a model form to compose a predicted survival probability distribution.

The predict method is implemented in survivalmodels::predict.parametric(). Our implementation is more efficient for composition to distributions than survival::predict.survreg().

Three types of prediction are returned for this learner:

  1. lp: a vector of linear predictors (relative risk scores), one per test observation. lp is predicted using the formula \(lp = X\beta\) where \(X\) are the variables in the test data set and \(\beta\) are the fitted coefficients.

  2. crank: same as lp.

  3. distr: a survival matrix in two dimensions, where observations are represented in rows and time points in columns. The distribution distr is composed using the lp predictions and specifying a model form in the form hyper-parameter. These are as follows, with respective survival functions:

  • Accelerated Failure Time (aft) $$S(t) = S_0(\frac{t}{exp(lp)})$$

  • Proportional Hazards (ph) $$S(t) = S_0(t)^{exp(lp)}$$

  • Proportional Odds (po) $$S(t) = \frac{S_0(t)}{exp(-lp) + (1-exp(-lp)) S_0(t)}$$

  • Tobit (tobit) $$S(t) = 1 - \Phi((t - lp)/s)$$

where \(S_0\) is the estimated baseline survival distribution (in this case with a given parametric form), \(lp\) is the predicted linear predictor, \(\Phi\) is the cdf of a N(0, 1) distribution, and \(s\) is the fitted scale parameter.

Whilst any combination of distribution and model form is possible, this does not mean it will necessarily create a sensible or interpretable prediction. The following combinations are 'sensible' (we note that ones mostly used in the literature):

  • dist = "gaussian"; form = "tobit";

  • dist = "weibull"; form = "ph"; (fairly used)

  • dist = "exponential"; form = "ph";

  • dist = "weibull"; form = "aft"; (fairly used, default option)

  • dist = "exponential"; form = "aft";

  • dist = "loglogistic"; form = "aft"; (fairly used)

  • dist = "lognormal"; form = "aft";

  • dist = "loglogistic"; form = "po";

Custom mlr3 parameters

  • discrete determines the class of the returned survival probability distribution. If FALSE (default) continuous probability distributions are returned using distr6::VectorDistribution, otherwise distr6::Matdist (faster to calculate survival measures that require a distr prediction type).

Dictionary

This Learner can be instantiated via lrn():

lrn("surv.parametric")

Meta Information

Parameters

IdTypeDefaultLevelsRange
formcharacteraftaft, ph, po, tobit-
na.actionuntyped--
distcharacterweibullweibull, exponential, gaussian, lognormal, loglogistic-
parmsuntyped--
inituntyped--
scalenumeric0\([0, \infty)\)
maxiterinteger30\((-\infty, \infty)\)
rel.tolerancenumeric1e-09\((-\infty, \infty)\)
toler.cholnumeric1e-10\((-\infty, \infty)\)
debuginteger0\([0, 1]\)
outer.maxinteger10\((-\infty, \infty)\)
robustlogicalFALSETRUE, FALSE-
scorelogicalFALSETRUE, FALSE-
clusteruntyped--
discretelogical-TRUE, FALSE-

Installation

Package 'survivalmodels' is not on CRAN and has to be install from GitHub via remotes::install_github("RaphaelS1/survivalmodels").

References

Kalbfleisch, D J, Prentice, L R (2011). The statistical analysis of failure time data. John Wiley & Sons.

See also

Author

bblodfon

Super classes

mlr3::Learner -> mlr3proba::LearnerSurv -> LearnerSurvParametric

Methods

Inherited methods


Method new()

Creates a new instance of this R6 class. returned risk from survivalmodels is hp-style ie higher value => higher risk

Usage


Method clone()

The objects of this class are cloneable with this method.

Usage

LearnerSurvParametric$clone(deep = FALSE)

Arguments

deep

Whether to make a deep clone.

Examples

# Define the Learner
learner = mlr3::lrn("surv.parametric")
print(learner)
#> <LearnerSurvParametric:surv.parametric>: Fully Parametric Learner
#> * Model: -
#> * Parameters: form=aft, dist=weibull, discrete=FALSE
#> * Packages: mlr3, mlr3proba, mlr3extralearners, survival, pracma
#> * Predict Types:  [crank], distr, lp
#> * Feature Types: logical, integer, numeric, factor
#> * Properties: weights

# Define a Task
task = mlr3::tsk("grace")

# Create train and test set
ids = mlr3::partition(task)

# Train the learner on the training ids
learner$train(task, row_ids = ids$train)

print(learner$model)
#> 
#>  Parametric survival model 
#> 
#> Call:
#>   survivalmodels::parametric(data = data.table::setDF(task$data()),      time_variable = task$target_names[1L], status_variable = task$target_names[2L],      dist = "weibull")
#> 
#> Response:
#>   Surv(time, status)
#> Features:
#>   {(Intercept), age, los, revasc, revascdays, stchange, sysbp} 


# Make predictions for the test rows
predictions = learner$predict(task, row_ids = ids$test)

# Score the predictions
predictions$score()
#> surv.cindex 
#>   0.8457149