Predict outcomes from flexible survival models at the covariate values
specified in newdata
.
Arguments
- object
Output from
flexsurvreg
orflexsurvspline
, representing a fitted survival model object.- newdata
Data frame containing covariate values at which to produce fitted values. There must be a column for every covariate in the model formula used to fit
object
, and one row for every combination of covariate values at which to obtain the fitted predictions.If
newdata
is omitted, then the original data used to fit the model are used, as extracted bymodel.frame(object)
. However this will currently not work if the model formula contains functions, e.g.~ factor(x)
. The names of the model frame must correspond to variables in the original data.- type
Character vector for the type of predictions desired.
"response"
for mean survival time (the default)."mean"
is an acceptable synonym"quantile"
for quantiles of the survival distribution as specified byp
"rmst"
for restricted mean survival time"survival"
for survival probabilities"cumhaz"
for cumulative hazards"hazard"
for hazards"link"
for fitted values of the location parameter, analogous to the linear predictor in generalized linear models (type = "lp"
andtype = "linear"
are acceptable synonyms). This is on the natural scale of the parameter, not the log scale.
- times
Vector of time horizons at which to compute fitted values. Only applies when
type
is"survival"
,"cumhaz"
,"hazard"
, or"rmst"
. Will be silently ignored for all other types.If not specified, predictions for
"survival"
,"cumhaz"
, and"hazard"
will be made at each observed event time inmodel.frame(object)
.For
"rmst"
, whentimes
is not specified predictions will be made at the maximum observed event time from the data used to fitobject
. Specifyingtimes = Inf
is valid, and will return mean survival (equal totype = "response"
).- start
Optional left-truncation time or times. The returned survival, hazard, or cumulative hazard will be conditioned on survival up to this time.
start
must be length 1 or the same length astimes
. Predicted times returned withtype
"rmst"
or"quantile"
will be times since time zero, not times since thestart
time.- conf.int
Logical. Should confidence intervals be returned? Default is
FALSE
.- conf.level
Width of symmetric confidence intervals, relative to 1.
- se.fit
Logical. Should standard errors of fitted values be returned? Default is
FALSE
.- p
Vector of quantiles at which to return fitted values when
type = "quantile"
. Default isc(0.1, 0.9)
.- ...
Not currently used.
Value
A tibble
with same number of rows as
newdata
and in the same order. If multiple predictions are
requested, a tibble
containing a single list-column
of data frames.
For the list-column of data frames - the dimensions of each data frame
will be identical. Rows are added for each value of times
or
p
requested.
This function is a wrapper around summary.flexsurvreg
,
designed to help flexsurv to integrate with the "tidymodels"
ecosystem, in particular the censored package.
summary.flexsurvreg
returns the same results but in a more
conventional format.
Author
Matthew T. Warkentin (https://github.com/mattwarkentin)
Examples
fitg <- flexsurvreg(formula = Surv(futime, fustat) ~ age, data = ovarian, dist = "gengamma")
## Simplest prediction: mean or median, for covariates defined by original dataset
predict(fitg)
#> # A tibble: 26 × 1
#> .pred_time
#> <dbl>
#> 1 246.
#> 2 204.
#> 3 411.
#> 4 1295.
#> 5 1687.
#> 6 990.
#> 7 947.
#> 8 734.
#> 9 503.
#> 10 1105.
#> # ℹ 16 more rows
predict(fitg, type = "quantile", p = 0.5)
#> # A tibble: 26 × 2
#> .quantile .pred_quantile
#> <dbl> <dbl>
#> 1 0.5 194.
#> 2 0.5 161.
#> 3 0.5 325.
#> 4 0.5 1022.
#> 5 0.5 1331.
#> 6 0.5 781.
#> 7 0.5 747.
#> 8 0.5 579.
#> 9 0.5 397.
#> 10 0.5 872.
#> # ℹ 16 more rows
## Simple prediction for user-defined covariate values
predict(fitg, newdata = data.frame(age = c(40, 50, 60)))
#> # A tibble: 3 × 1
#> .pred_time
#> <dbl>
#> 1 4169.
#> 2 1738.
#> 3 724.
predict(fitg, type = "quantile", p = 0.5, newdata = data.frame(age = c(40,50,60)))
#> # A tibble: 3 × 2
#> .quantile .pred_quantile
#> <dbl> <dbl>
#> 1 0.5 3291.
#> 2 0.5 1372.
#> 3 0.5 572.
## Predict multiple quantiles and unnest
require(tidyr)
#> Loading required package: tidyr
pr <- predict(fitg, type = "survival", times = c(600, 800))
tidyr::unnest(pr, .pred)
#> # A tibble: 52 × 2
#> .eval_time .pred_survival
#> <dbl> <dbl>
#> 1 600 0.0548
#> 2 800 0.0202
#> 3 600 0.0292
#> 4 800 0.00926
#> 5 600 0.200
#> 6 800 0.104
#> 7 600 0.751
#> 8 800 0.624
#> 9 600 0.841
#> 10 800 0.742
#> # ℹ 42 more rows