Skip to contents

This is a workaround for [tern::s_coxph_pairwise()], which adds a statistic containing the hazard ratio estimate together with the confidence interval.

Usage

a_coxph_hr(
  df,
  .var,
  ref_path,
  .spl_context,
  ...,
  .stats = NULL,
  .formats = NULL,
  .labels = NULL,
  .indent_mods = NULL
)

s_coxph_hr(
  df,
  .ref_group,
  .in_ref_col,
  .var,
  is_event,
  strata = NULL,
  control = control_coxph(),
  alternative = c("two.sided", "less", "greater")
)

Arguments

df

(`data.frame`)
data set containing all analysis variables.

.var

(`string`)
single variable name that is passed by `rtables` when requested by a statistics function.

ref_path

(`character`)
global reference group specification, see [get_ref_info()].

.spl_context

(`data.frame`)
gives information about ancestor split states that is passed by `rtables`.

...

additional arguments for the lower level functions.

.stats

(`character`)
statistics to select for the table.

.formats

(named `character` or `list`)
formats for the statistics. See Details in `analyze_vars` for more information on the `'auto'` setting.

.labels

(named `character`)
labels for the statistics (without indent).

.indent_mods

(named `integer`)
indent modifiers for the labels. Defaults to 0, which corresponds to the unmodified default behavior. Can be negative.

.ref_group

(`data.frame` or `vector`)
the data corresponding to the reference group.

.in_ref_col

(`logical`)
`TRUE` when working with the reference level, `FALSE` otherwise.

is_event

(`character`)
variable name storing Logical values: `TRUE` if event, `FALSE` if time to event is censored.

strata

(`character` or `NULL`)
variable names indicating stratification factors.

control

(`list`)
relevant list of control options.

alternative

(`string`)
whether `two.sided`, or one-sided `less` or `greater` p-value should be displayed.

Functions

  • a_coxph_hr(): Formatted analysis function which is used as `afun`.

  • s_coxph_hr(): Statistics function forked from [tern::s_coxph_pairwise()]. the difference is that: 1) It returns the additional statistic `lr_stat_df` (log rank statistic with degrees of freedom).

Examples

library(dplyr)

adtte_f <- tern::tern_ex_adtte |>
  filter(PARAMCD == "OS") |>
  mutate(is_event = CNSR == 0)

df <- adtte_f |> filter(ARMCD == 'ARM A')
df_ref_group <- adtte_f |> filter(ARMCD == 'ARM B')

basic_table() |>
  split_cols_by(var = 'ARMCD', ref_group = 'ARM A') |>
  add_colcounts() |>
  analyze("AVAL",
    afun = s_coxph_hr,
    extra_args = list(is_event = 'is_event'),
    var_labels = 'Unstratified Analysis',
    show_labels = 'visible'
  ) |>
  build_table(df = adtte_f)
#>                           ARM A                            ARM B                                                  ARM C                        
#>                           (N=69)                          (N=73)                                                  (N=58)                       
#> ———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
#> Unstratified Analysis                                                                                                                          
#>   p-value (log-rank)                                0.0904951081206286                                     0.00860286392158099                 
#>   lr_stat_df                                        2.86554400612335, 1                                    6.90346948570891, 1                 
#>   hr                                                 1.40675529802996                                        1.81062231929339                  
#>   95% CI                                    0.945772426764327, 2.09242774745061                     1.15592003553536, 2.83614184575062         
#>   Hazard Ratio (95% CI)            1.40675529802996, 0.945772426764327, 2.09242774745061   1.81062231929339, 1.15592003553536, 2.83614184575062
#>   n_tot                                                     142                                                    127                         
#>   n_tot_events                                              101                                                     84                         

  basic_table() |>
  split_cols_by(var = 'ARMCD', ref_group = 'ARM A') |>
  add_colcounts() |>
  analyze("AVAL",
          afun = s_coxph_hr,
          extra_args = list(is_event = 'is_event',
                            strata = 'SEX',
                            control = tern::control_coxph(pval_method = 'wald')),
          var_labels = 'Unstratified Analysis',
          show_labels = 'visible'
  ) |>
  build_table(df = adtte_f)
#>                           ARM A                           ARM B                                                  ARM C                        
#>                           (N=69)                          (N=73)                                                 (N=58)                       
#> ——————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
#> Unstratified Analysis                                                                                                                         
#>   p-value (wald)                                    0.0783698773203908                                    0.00662292473338187                 
#>   lr_stat_df                                       3.12966155715821, 1                                    7.60136269697425, 1                 
#>   hr                                                 1.43602612933735                                       1.88581879789238                  
#>   95% CI                                    0.959767646673475, 2.1486148770351                     1.19297959598155, 2.98103383365769         
#>   Hazard Ratio (95% CI)            1.43602612933735, 0.959767646673475, 2.1486148770351   1.88581879789238, 1.19297959598155, 2.98103383365769
#>   n_tot                                                    142                                                    127                         
#>   n_tot_events                                             101                                                     84                         
adtte_f <- tern::tern_ex_adtte |>
  dplyr::filter(PARAMCD == "OS") |>
  dplyr::mutate(is_event = CNSR == 0)
df <- adtte_f |> dplyr::filter(ARMCD == 'ARM A')
df_ref <- adtte_f |> dplyr::filter(ARMCD == 'ARM B')

s_coxph_hr(
  df = df,
  .ref_group = df_ref,
  .in_ref_col = FALSE,
  .var = 'AVAL',
  is_event = 'is_event',
  strata = NULL
)
#> $pvalue
#> [1] 0.09049511
#> attr(,"label")
#> [1] "p-value (log-rank)"
#> 
#> $lr_stat_df
#> [1] 2.865544 1.000000
#> 
#> $hr
#> [1] 0.7108557
#> 
#> $hr_ci
#> [1] 0.4779138 1.0573368
#> attr(,"label")
#> [1] "95% CI"
#> 
#> $hr_ci_3d
#> [1] 0.7108557 0.4779138 1.0573368
#> attr(,"label")
#> [1] "Hazard Ratio (95% CI)"
#> 
#> $n_tot
#> [1] 142
#> 
#> $n_tot_events
#> [1] 101
#>