We consider two while-alive estimands for recurrent events data and the mean of the subject specific events per time-unit for two treatment-groups in the case of an RCT. For the laste mean of events per time-unit it has been seen that when the sample size is to great it can improve the finite sample properties to employ a transformation such as √ or cube-root, and thus consider
data(hfaction_cpx12)
dtable(hfaction_cpx12,~status)
#>
#> status
#> 0 1 2
#> 617 1391 124
dd <- WA_recurrent(Event(entry,time,status)~treatment+cluster(id),hfaction_cpx12,time=2,death.code=2)
summary(dd)
#> While-Alive summaries:
#>
#> RMST, E(min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 1.859 0.02108 1.817 1.900 0
#> treatment1 1.924 0.01502 1.894 1.953 0
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... -0.06517 0.02588 -0.1159 -0.01444 0.0118
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> mean events, E(N(min(D,t))):
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 1.572 0.09821 1.379 1.764 1.171e-57
#> treatment1 1.453 0.10825 1.241 1.666 4.205e-41
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... 0.1185 0.1462 -0.168 0.4049 0.4177
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> _______________________________________________________
#> Ratio of means E(N(min(D,t)))/E(min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 0.8457 0.05396 0.7399 0.9514 2.308e-55
#> treatment1 0.7555 0.05696 0.6438 0.8671 3.835e-40
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... 0.09022 0.07846 -0.06357 0.244 0.2502
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> _______________________________________________________
#> Mean of Events per time-unit E(N(min(D,t))/min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treat0 1.0725 0.1222 0.8331 1.3119 1.645e-18
#> treat1 0.7552 0.0643 0.6291 0.8812 7.508e-32
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treat0] - [treat1] 0.3173 0.1381 0.04675 0.5879 0.02153
#>
#> Null Hypothesis:
#> [treat0] - [treat1] = 0
dd <- WA_recurrent(Event(entry,time,status)~treatment+cluster(id),hfaction_cpx12,time=2,death.code=2,trans=.333)
summary(dd,type="log")
#> While-Alive summaries, log-scale:
#>
#> RMST, E(min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 0.6199 0.011340 0.5977 0.6421 0
#> treatment1 0.6543 0.007807 0.6390 0.6696 0
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... -0.03446 0.01377 -0.06145 -0.007478 0.01231
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> mean events, E(N(min(D,t))):
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 0.4523 0.06248 0.3298 0.5747 4.535e-13
#> treatment1 0.3739 0.07448 0.2279 0.5199 5.155e-07
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... 0.07835 0.09721 -0.1122 0.2689 0.4203
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> _______________________________________________________
#> Ratio of means E(N(min(D,t)))/E(min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treatment0 -0.1676 0.0638 -0.2927 -0.04257 0.0086101
#> treatment1 -0.2804 0.0754 -0.4282 -0.13265 0.0001999
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treatment0] - [treat.... 0.1128 0.09877 -0.08078 0.3064 0.2534
#>
#> Null Hypothesis:
#> [treatment0] - [treatment1] = 0
#> _______________________________________________________
#> Mean of Events per time-unit E(N(min(D,t))/min(D,t))
#> Estimate Std.Err 2.5% 97.5% P-value
#> treat0 -0.3833 0.04939 -0.4801 -0.2865 8.487e-15
#> treat1 -0.5380 0.05666 -0.6491 -0.4270 2.191e-21
#>
#> Estimate Std.Err 2.5% 97.5% P-value
#> [treat0] - [treat1] 0.1548 0.07517 0.007459 0.3021 0.03948
#>
#> Null Hypothesis:
#> [treat0] - [treat1] = 0
We see that the ratio of means are not very different, but that the subject specific mean of events per time-unit shows that those on the active treatment has fewer events per time-unit on average.
sessionInfo()
#> R version 4.4.2 (2024-10-31)
#> Platform: x86_64-pc-linux-gnu
#> Running under: Ubuntu 24.04.2 LTS
#>
#> Matrix products: default
#> BLAS: /usr/lib/x86_64-linux-gnu/openblas-pthread/libblas.so.3
#> LAPACK: /usr/lib/x86_64-linux-gnu/openblas-pthread/libopenblasp-r0.3.26.so; LAPACK version 3.12.0
#>
#> locale:
#> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
#> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=C
#> [5] LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
#> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
#> [9] LC_ADDRESS=C LC_TELEPHONE=C
#> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
#>
#> time zone: Etc/UTC
#> tzcode source: system (glibc)
#>
#> attached base packages:
#> [1] splines stats graphics grDevices utils datasets methods
#> [8] base
#>
#> other attached packages:
#> [1] prodlim_2024.06.25 ggplot2_3.5.1 cowplot_1.1.3 timereg_2.0.6
#> [5] survival_3.8-3 mets_1.3.5 rmarkdown_2.29
#>
#> loaded via a namespace (and not attached):
#> [1] sass_0.4.9 future_1.34.0 lattice_0.22-6
#> [4] listenv_0.9.1 digest_0.6.37 magrittr_2.0.3
#> [7] evaluate_1.0.3 grid_4.4.2 mvtnorm_1.3-3
#> [10] fastmap_1.2.0 jsonlite_1.9.0 Matrix_1.7-2
#> [13] scales_1.3.0 isoband_0.2.7 codetools_0.2-20
#> [16] numDeriv_2016.8-1.1 jquerylib_0.1.4 lava_1.8.1
#> [19] cli_3.6.4 rlang_1.1.5 parallelly_1.42.0
#> [22] future.apply_1.11.3 munsell_0.5.1 withr_3.0.2
#> [25] cachem_1.1.0 yaml_2.3.10 tools_4.4.2
#> [28] parallel_4.4.2 ucminf_1.2.2 colorspace_2.1-1
#> [31] globals_0.16.3 buildtools_1.0.0 vctrs_0.6.5
#> [34] R6_2.6.1 lifecycle_1.0.4 MASS_7.3-64
#> [37] pkgconfig_2.0.3 bslib_0.9.0 pillar_1.10.1
#> [40] gtable_0.3.6 data.table_1.17.0 glue_1.8.0
#> [43] Rcpp_1.0.14 xfun_0.51 tibble_3.2.1
#> [46] sys_3.4.3 knitr_1.49 farver_2.1.2
#> [49] htmltools_0.5.8.1 labeling_0.4.3 maketools_1.3.2
#> [52] compiler_4.4.2