Displays event counts, median survival time and survival rates at specified times points for the entire cohort and by group. The logrank test of differences in survival curves is displayed.

rm_survsum(
  data,
  time,
  status,
  group = NULL,
  survtimes = NULL,
  survtimeunit,
  survtimesLbls = NULL,
  CIwidth = 0.95,
  unformattedp = FALSE,
  conf.type = "log",
  na.action = "na.omit",
  showCounts = TRUE,
  showLogrank = TRUE,
  eventProb = FALSE,
  digits = getOption("reportRmd.digits", 2),
  caption = NULL,
  tableOnly = FALSE,
  fontsize
)

Arguments

data

data frame containing survival data

time

string indicating survival time variable

status

string indicating event status variable

group

string or character vector indicating the variable(s) to group observations by. If this is left as NULL (the default) then summaries are provided for the entire cohort.

survtimes

numeric vector specifying when survival probabilities should be calculated.

survtimeunit

unit of time to suffix to the time column label if survival probabilities are requested, should be plural

survtimesLbls

if supplied, a vector the same length as survtimes with descriptions (useful for displaying years with data provided in months)

CIwidth

width of the survival probabilities, default is 95%

unformattedp

boolean indicating if you would like the p-value to be returned unformatted (ie not rounded or prefixed with '<'). Should be used in conjunction with the digits argument.

conf.type

type of confidence interval see survival::survfit for details. Default is 'log'.

na.action

default is to omit missing values, but can be set to throw and error using na.action='na.fail'

showCounts

boolean indicating if the at risk, events and censored columns should be output; default is TRUE

showLogrank

boolean indicating if the log-rank test statistic and p-value should be output; default is TRUE

eventProb

boolean indicating if event probabilities, rather than survival probabilities, should be displayed; default is FALSE

digits

the number of digits in the survival rate, default is 2, unless the reportRmd.digits option is set

caption

table caption for markdown output

tableOnly

should a dataframe or a formatted object be returned

fontsize

PDF/HTML output only, manually set the table fontsize

Value

A character vector of the survival table source code, unless tableOnly=TRUE in which case a data frame is returned

Details

This summary table is supplied for simple group comparisons only. To examine differences in groups with stratification see rm_survdiff. To summarise differences in survival rates controlling for covariates see rm_survtime.

Examples

# Simple median survival table
data("pembrolizumab")
rm_survsum(data=pembrolizumab,time='os_time',status='os_status')
#> <table class="table table" style="margin-left: auto; margin-right: auto; margin-left: auto; margin-right: auto;">
#>  <thead>
#>   <tr>
#>    <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Events/Total </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Median (95%CI) </th>
#>   </tr>
#>  </thead>
#> <tbody>
#>   <tr>
#>    <td style="text-align:left;"> 64/94 </td>
#>    <td style="text-align:right;"> 13.96 (9.00, 20.14) </td>
#>   </tr>
#> </tbody>
#> </table>

# Survival table with yearly survival rates
rm_survsum(data=pembrolizumab,time='os_time',status='os_status',
survtimes=c(12,24),survtimesLbls=1:2, survtimeunit='yr')
#> <table class="table table" style="margin-left: auto; margin-right: auto; margin-left: auto; margin-right: auto;">
#>  <thead>
#>   <tr>
#>    <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Events/Total </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Median (95%CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 1yr (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 2yr (95% CI) </th>
#>   </tr>
#>  </thead>
#> <tbody>
#>   <tr>
#>    <td style="text-align:left;"> 64/94 </td>
#>    <td style="text-align:right;"> 13.96 (9.00, 20.14) </td>
#>    <td style="text-align:right;"> 0.53 (0.44, 0.64) </td>
#>    <td style="text-align:right;"> 0.33 (0.24, 0.44) </td>
#>   </tr>
#> </tbody>
#> </table>

#Median survival by group
rm_survsum(data=pembrolizumab,time='os_time',status='os_status',group='sex')
#> <table class="table table" style="margin-left: auto; margin-right: auto; margin-left: auto; margin-right: auto;">
#>  <thead>
#>   <tr>
#>    <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Group </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Events/Total </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Median (95%CI) </th>
#>   </tr>
#>  </thead>
#> <tbody>
#>   <tr>
#>    <td style="text-align:left;"> Female </td>
#>    <td style="text-align:right;"> 39/58 </td>
#>    <td style="text-align:right;"> 14.29 (9.69, 23.82) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> Male </td>
#>    <td style="text-align:right;"> 25/36 </td>
#>    <td style="text-align:right;"> 11.24 (6.14, 25.33) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> Log Rank Test </td>
#>    <td style="text-align:right;"> ChiSq </td>
#>    <td style="text-align:right;"> 0.5 on 1 df </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;">  </td>
#>    <td style="text-align:right;"> p-value </td>
#>    <td style="text-align:right;"> 0.46 </td>
#>   </tr>
#> </tbody>
#> </table>

# Survival Summary by cohort, displayed in years
rm_survsum(data=pembrolizumab,time='os_time',status='os_status',
group="cohort",survtimes=seq(12,72,12),
survtimesLbls=seq(1,6,1),
survtimeunit='years')
#> <table class="table table" style="margin-left: auto; margin-right: auto; margin-left: auto; margin-right: auto;">
#>  <thead>
#>   <tr>
#>    <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Group </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Events/Total </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Median (95%CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 1years (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 2years (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 3years (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 4years (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 5years (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 6years (95% CI) </th>
#>   </tr>
#>  </thead>
#> <tbody>
#>   <tr>
#>    <td style="text-align:left;"> A </td>
#>    <td style="text-align:right;"> 12/16 </td>
#>    <td style="text-align:right;"> 8.30 (4.24, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.38 (0.20, 0.71) </td>
#>    <td style="text-align:right;"> 0.23 (0.09, 0.59) </td>
#>    <td style="text-align:right;"> 0.23 (0.09, 0.59) </td>
#>    <td style="text-align:right;"> 0.23 (0.09, 0.59) </td>
#>    <td style="text-align:right;"> 0.23 (0.09, 0.59) </td>
#>    <td style="text-align:right;"> 0.23 (0.09, 0.59) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> B </td>
#>    <td style="text-align:right;"> 16/18 </td>
#>    <td style="text-align:right;"> 8.82 (4.67, 20.73) </td>
#>    <td style="text-align:right;"> 0.32 (0.16, 0.64) </td>
#>    <td style="text-align:right;"> 0.06 (9.6e-03, 0.42) </td>
#>    <td style="text-align:right;"> 0.06 (9.6e-03, 0.42) </td>
#>    <td style="text-align:right;"> 0.06 (9.6e-03, 0.42) </td>
#>    <td style="text-align:right;"> 0.06 (9.6e-03, 0.42) </td>
#>    <td style="text-align:right;"> 0.06 (9.6e-03, 0.42) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> C </td>
#>    <td style="text-align:right;"> 12/18 </td>
#>    <td style="text-align:right;"> 17.56 (7.95, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.61 (0.42, 0.88) </td>
#>    <td style="text-align:right;"> 0.44 (0.27, 0.74) </td>
#>    <td style="text-align:right;"> 0.31 (0.15, 0.64) </td>
#>    <td style="text-align:right;"> 0.31 (0.15, 0.64) </td>
#>    <td style="text-align:right;"> 0.31 (0.15, 0.64) </td>
#>    <td style="text-align:right;"> 0.31 (0.15, 0.64) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> D </td>
#>    <td style="text-align:right;"> 4/12 </td>
#>    <td style="text-align:right;"> Not Estimable (6.44, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>    <td style="text-align:right;"> 0.67 (0.45, 0.99) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> E </td>
#>    <td style="text-align:right;"> 20/30 </td>
#>    <td style="text-align:right;"> 14.26 (9.69, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.63 (0.48, 0.83) </td>
#>    <td style="text-align:right;"> 0.34 (0.20, 0.57) </td>
#>    <td style="text-align:right;"> 0.29 (0.15, 0.53) </td>
#>    <td style="text-align:right;"> 0.29 (0.15, 0.53) </td>
#>    <td style="text-align:right;"> 0.29 (0.15, 0.53) </td>
#>    <td style="text-align:right;"> 0.29 (0.15, 0.53) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;"> Log Rank Test </td>
#>    <td style="text-align:right;"> ChiSq </td>
#>    <td style="text-align:right;"> 11.3 on 4 df </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;"> p-value </td>
#>    <td style="text-align:right;"> 0.023 </td>
#>   </tr>
#> </tbody>
#> </table>

# Survival Summary by Sex and ctDNA group
rm_survsum(data=pembrolizumab,time='os_time',status='os_status',
group=c('sex','change_ctdna_group'),survtimes=c(12,24),survtimeunit='mo')
#> 21 observations with missing data were removed.
#> <table class="table table" style="margin-left: auto; margin-right: auto; margin-left: auto; margin-right: auto;">
#>  <thead>
#>   <tr>
#>    <th style="text-align:left;position: sticky; top:0; background-color: #FFFFFF;"> Group </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Events/Total </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> Median (95%CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 12mo (95% CI) </th>
#>    <th style="text-align:right;position: sticky; top:0; background-color: #FFFFFF;"> 24mo (95% CI) </th>
#>   </tr>
#>  </thead>
#> <tbody>
#>   <tr>
#>    <td style="text-align:left;"> Female, Decrease from baseline </td>
#>    <td style="text-align:right;"> 7/19 </td>
#>    <td style="text-align:right;"> Not Estimable (23.82, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.84 (0.69, 1.00) </td>
#>    <td style="text-align:right;"> 0.67 (0.48, 0.93) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> Female, Increase from baseline </td>
#>    <td style="text-align:right;"> 17/21 </td>
#>    <td style="text-align:right;"> 13.90 (7.89, 27.47) </td>
#>    <td style="text-align:right;"> 0.52 (0.35, 0.79) </td>
#>    <td style="text-align:right;"> 0.24 (0.11, 0.51) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> Male, Decrease from baseline </td>
#>    <td style="text-align:right;"> 7/14 </td>
#>    <td style="text-align:right;"> 25.33 (14.26, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.71 (0.51, 0.99) </td>
#>    <td style="text-align:right;"> 0.55 (0.34, 0.90) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;"> Male, Increase from baseline </td>
#>    <td style="text-align:right;"> 15/19 </td>
#>    <td style="text-align:right;"> 6.54 (5.68, Not Estimable) </td>
#>    <td style="text-align:right;"> 0.42 (0.25, 0.71) </td>
#>    <td style="text-align:right;"> 0.16 (0.05, 0.51) </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;"> Log Rank Test </td>
#>    <td style="text-align:right;"> ChiSq </td>
#>    <td style="text-align:right;"> 15.1 on 3 df </td>
#>   </tr>
#>   <tr>
#>    <td style="text-align:left;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;">  </td>
#>    <td style="text-align:right;"> p-value </td>
#>    <td style="text-align:right;"> 0.002 </td>
#>   </tr>
#> </tbody>
#> </table>