Estimates (or 'composes') a survival distribution from a predicted baseline distr and a
crank or lp from two PredictionSurvs.
Compositor Assumptions:
The baseline
distris a discrete estimator, e.g. surv.kaplan.The composed
distris of a linear formIf
lpis missing thencrankis equivalent
These assumptions are strong and may not be reasonable. Future updates will upgrade this compositor to be more flexible.
Dictionary
This PipeOp can be instantiated via the
dictionary mlr3pipelines::mlr_pipeops or with the associated sugar
function mlr3pipelines::po():
PipeOpDistrCompositor$new()
mlr_pipeops$get("distrcompose")
po("distrcompose")Input and Output Channels
PipeOpDistrCompositor has two input channels, "base" and "pred". Both input channels take
NULL during training and PredictionSurv during prediction.
PipeOpDistrCompositor has one output channel named "output", producing NULL during training
and a PredictionSurv during prediction.
The output during prediction is the PredictionSurv from the "pred" input but with an extra
(or overwritten) column for distr predict type; which is composed from the distr of "base"
and lp or crank of "pred".
State
The $state is left empty (list()).
Parameters
The parameters are:
form::character(1)
Determines the form that the predicted linear survival model should take. This is either, accelerated-failure time,aft, proportional hazards,ph, or proportional odds,po. Defaultaft.overwrite::logical(1)
IfFALSE(default) then if the "pred" input already has adistr, the compositor does nothing and returns the given PredictionSurv. IfTRUEthen thedistris overwritten with thedistrcomposed fromlp/crank- this is useful for changing the predictiondistrfrom one model form to another.
Internals
The respective forms above have respective survival distributions:
$$aft: S(t) = S_0(\frac{t}{exp(lp)})$$
$$ph: S(t) = S_0(t)^{exp(lp)}$$
$$po: S(t) = \frac{S_0(t)}{exp(-lp) + (1-exp(-lp)) S_0(t)}$$ # nolint
where \(S_0\) is the estimated baseline survival distribution, and \(lp\) is the
predicted linear predictor. If the input model does not predict a linear predictor then crank
is assumed to be the lp - this may be a strong and unreasonable assumption.
See also
Other survival compositors:
mlr_pipeops_compose_breslow_distr,
mlr_pipeops_compose_crank
Super class
mlr3pipelines::PipeOp -> PipeOpDistrCompositor
Methods
Method new()
Creates a new instance of this R6 class.
Usage
PipeOpDistrCompositor$new(
id = "compose_distr",
param_vals = list(form = "aft", overwrite = FALSE)
)Arguments
id(
character(1))
Identifier of the resulting object.param_vals(
list())
List of hyperparameter settings, overwriting the hyperparameter settings that would otherwise be set during construction.
Examples
if (FALSE) {
if (requireNamespace("mlr3pipelines", quietly = TRUE)) {
library(mlr3)
library(mlr3pipelines)
task = tsk("rats")
base = lrn("surv.kaplan")$train(task)$predict(task)
pred = lrn("surv.coxph")$train(task)$predict(task)
pod = po("distrcompose", param_vals = list(form = "aft", overwrite = TRUE))
pod$predict(list(base = base, pred = pred))[[1]]
}
}