broom (version 0.4.4)

survfit_tidiers: tidy survival curve fits

Description

Construct tidied data frames showing survival curves over time.

Usage

# S3 method for survfit
tidy(x, ...)

# S3 method for survfit glance(x, ...)

Arguments

x

"survfit" object

...

extra arguments, not used

Value

All tidying methods return a data.frame without rownames, whose structure depends on the method chosen.

tidy returns a row for each time point, with columns

time

timepoint

n.risk

number of subjects at risk at time t0

n.event

number of events at time t

n.censor

number of censored events

estimate

estimate of survival or cumulative incidence rate when multistate

std.error

standard error of estimate

conf.high

upper end of confidence interval

conf.low

lower end of confidence interval

state

state if multistate survfit object inputted

strata

strata if stratified survfit object inputted

glance returns one-row data.frame with the columns displayed by print.survfit

records

number of observations

n.max

n.max

n.start

n.start

events

number of events

rmean

Restricted mean (see print.survfit)

rmean.std.error

Restricted mean standard error

median

median survival

conf.low

lower end of confidence interval on median

conf.high

upper end of confidence interval on median

Details

glance does not work on multi-state survival curves, since the values glance outputs would be calculated for each state. tidy does work for multi-state survival objects, and includes a state column to distinguish between them.

Examples

Run this code
# NOT RUN {
if (require("survival", quietly = TRUE)) {
    cfit <- coxph(Surv(time, status) ~ age + sex, lung)
    sfit <- survfit(cfit)
    
    head(tidy(sfit))
    glance(sfit)
    
    library(ggplot2)
    ggplot(tidy(sfit), aes(time, estimate)) + geom_line() +
        geom_ribbon(aes(ymin=conf.low, ymax=conf.high), alpha=.25)
    
    # multi-state
    fitCI <- survfit(Surv(stop, status * as.numeric(event), type = "mstate") ~ 1,
                  data = mgus1, subset = (start == 0))
    td_multi <- tidy(fitCI)
    head(td_multi)
    tail(td_multi)
    ggplot(td_multi, aes(time, estimate, group = state)) +
        geom_line(aes(color = state)) +
        geom_ribbon(aes(ymin = conf.low, ymax = conf.high), alpha = .25)
 
    # perform simple bootstrapping
    library(dplyr)
    bootstraps <- lung %>% bootstrap(100) %>%
        do(tidy(survfit(coxph(Surv(time, status) ~ age + sex, .))))
    
    ggplot(bootstraps, aes(time, estimate, group = replicate)) +
        geom_line(alpha = .25)
    
    bootstraps_bytime <- bootstraps %>% group_by(time) %>%
        summarize(median = median(estimate),
                  low = quantile(estimate, .025),
                  high = quantile(estimate, .975))
    
    ggplot(bootstraps_bytime, aes(x = time, y = median)) + geom_line() +
        geom_ribbon(aes(ymin = low, ymax = high), alpha = .25)
 
    # bootstrap for median survival
    glances <- lung %>%
        bootstrap(100) %>%
        do(glance(survfit(coxph(Surv(time, status) ~ age + sex, .))))
    
    glances
    
    qplot(glances$median, binwidth = 15)
    quantile(glances$median, c(.025, .975))
}

# }

Run the code above in your browser using DataCamp Workspace