--- title: "Package Architecture" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Package Architecture} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ## Overview The `goldilocks` package implements the Goldilocks adaptive trial design described in Broglio et al. (2014). This vignette provides a visual overview of how the package functions are interconnected. ## Function dependency diagram The diagram below shows the call graph from the top-level simulation function (`sim_trials()`) down through the core engine (`survival_adapt()`) and into the internal analysis pipeline. **Exported functions** are shown in blue. **Internal functions** are shown in grey. ```{r, echo = FALSE, fig.width = 8, fig.height = 8, fig.alt = "Diagram showing the function call dependencies in the goldilocks package."} DiagrammeR::grViz(" digraph goldilocks { graph [rankdir = TB, fontsize = 12, nodesep = 0.4, ranksep = 0.6] node [shape = box, style = 'filled, rounded', fontname = Helvetica, fontsize = 10] # Exported functions (blue) sim_trials [label = 'sim_trials()', fillcolor = '#dae8fc', color = '#6c8ebf'] survival_adapt [label = 'survival_adapt()', fillcolor = '#dae8fc', color = '#6c8ebf'] summarise_sims [label = 'summarise_sims()', fillcolor = '#dae8fc', color = '#6c8ebf'] sim_comp_data [label = 'sim_comp_data()', fillcolor = '#dae8fc', color = '#6c8ebf'] enrollment [label = 'enrollment()', fillcolor = '#dae8fc', color = '#6c8ebf'] randomization [label = 'randomization()', fillcolor = '#dae8fc', color = '#6c8ebf'] pwe_sim [label = 'pwe_sim()', fillcolor = '#dae8fc', color = '#6c8ebf'] pwe_impute [label = 'pwe_impute()', fillcolor = '#dae8fc', color = '#6c8ebf'] ppwe [label = 'ppwe()', fillcolor = '#dae8fc', color = '#6c8ebf'] # Internal functions (grey) test_stop_success [label = 'test_stop_success()', fillcolor = '#f5f5f5', color = '#999999'] test_final [label = 'test_final()', fillcolor = '#f5f5f5', color = '#999999'] analyse_data [label = 'analyse_data()', fillcolor = '#f5f5f5', color = '#999999'] impute_data [label = 'impute_data()', fillcolor = '#f5f5f5', color = '#999999'] posterior [label = 'posterior()', fillcolor = '#f5f5f5', color = '#999999'] haz_to_prop [label = 'haz_to_prop()', fillcolor = '#f5f5f5', color = '#999999'] logrank_test [label = 'logrank_test()', fillcolor = '#f5f5f5', color = '#999999'] # Edges sim_trials -> survival_adapt sim_trials -> summarise_sims [style = dashed, label = 'output list'] survival_adapt -> sim_comp_data survival_adapt -> posterior survival_adapt -> test_stop_success survival_adapt -> test_final sim_comp_data -> enrollment sim_comp_data -> randomization sim_comp_data -> pwe_sim test_stop_success -> impute_data test_stop_success -> analyse_data test_final -> posterior test_final -> impute_data test_final -> analyse_data analyse_data -> posterior analyse_data -> haz_to_prop analyse_data -> logrank_test haz_to_prop -> ppwe impute_data -> pwe_impute impute_data -> pwe_sim } ") ``` ## Function roles The functions fall into three layers: ### Simulation layer - **`sim_trials()`**: Top-level entry point. Runs `survival_adapt()` across multiple trials (optionally in parallel) and collates results. - **`summarise_sims()`**: Summarizes the output of `sim_trials()`, computing operating characteristics such as power, expected sample size, and stopping probabilities. ### Trial engine - **`survival_adapt()`**: Simulates a single adaptive trial. Generates data via `sim_comp_data()`, conducts interim analyses using `posterior()` and `test_stop_success()`, and performs the final analysis via `test_final()`. ### Data generation and analysis utilities - **`sim_comp_data()`**: Generates a complete trial dataset by calling `enrollment()`, `randomization()`, and `pwe_sim()`. - **`posterior()`**: Estimates the posterior distribution of piecewise exponential hazard rates using a conjugate Gamma model. - **`analyse_data()`**: Applies the chosen analysis method (`logrank`, `cox`, `bayes`, or `chisq`) to an (imputed) dataset. - **`impute_data()`**: Imputes missing event times for censored subjects using `pwe_impute()` or `pwe_sim()`. - **`haz_to_prop()`**: Converts posterior hazard rate draws to cumulative incidence proportions via `ppwe()`.