Estimates (or 'composes') a survival distribution from a predicted baseline `distr`

and a
`crank`

or `lp`

from two PredictionSurvs.

Compositor Assumptions:

The baseline

`distr`

is a discrete estimator, e.g. surv.kaplan.The composed

`distr`

is of a linear formIf

`lp`

is missing then`crank`

is 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()`

:

## 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`

. Default`aft`

.`overwrite`

::`logical(1)`

If`FALSE`

(default) then if the "pred" input already has a`distr`

, the compositor does nothing and returns the given PredictionSurv. If`TRUE`

then the`distr`

is overwritten with the`distr`

composed from`lp`

/`crank`

- this is useful for changing the prediction`distr`

from one model form to another.

## Internals

The respective `form`

s 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_crankcompose`

## Super class

`mlr3pipelines::PipeOp`

-> `PipeOpDistrCompositor`

## Methods

## Inherited methods

### Method `new()`

Creates a new instance of this R6 class.

#### Usage

`PipeOpDistrCompositor$new(id = "distrcompose", param_vals = list())`

#### 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) { # \dontrun{
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]]
}
} # }
```