--- title: "Primary Analysis Workflow" author: "Lei Shi, Matthew Secrest" date: "`r Sys.Date()`" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Primary Analysis Workflow} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, message=FALSE, warning=FALSE, include=FALSE} library(rdborrow) ``` ## Primary analysis This vignette demonstrates the primary analysis workflow using the EC-IPW and EC-AIPW weighting estimators proposed in [Zhou et al. (2024)](https://doi.org/10.1093/jrsssa/qnae075) for incorporating external controls in randomized trials with longitudinal outcomes. ### 1 Load data ```{r} head(SyntheticData) ``` ### 2 EC-IPW #### 2.1 No borrowing (weight = 0) ```{r} method <- ec_ipw( ps_formula = "S ~ x1 + x2 + x3 + x4 + x5", weight = 0 ) analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` #### 2.2 Optimal weight (data-adaptive) ```{r} method <- ec_ipw(ps_formula = "S ~ x1 + x2 + x3 + x4 + x5") analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` #### 2.3 Bootstrap inference ```{r} method <- ec_ipw( ps_formula = "S ~ x1 + x2 + x3 + x4 + x5", bootstrap = 50, bootstrap_ci_type = "perc" ) analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` ### 3 EC-AIPW EC-AIPW augments the IPW estimator with an outcome regression model, making it doubly robust: consistent if either the propensity score model or the outcome model is correctly specified. #### 3.1 No borrowing (weight = 0) ```{r} method <- ec_aipw( ps_formula = "S ~ x1 + x2 + x3 + x4 + x5", outcome_formula = c( "y1 ~ x1 + x2 + x3 + x4 + x5", "y2 ~ x1 + x2 + x3 + x4 + x5" ), weight = 0 ) analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` #### 3.2 Optimal weight (data-adaptive) ```{r} method <- ec_aipw( ps_formula = "S ~ x1 + x2 + x3 + x4 + x5", outcome_formula = c( "y1 ~ x1 + x2 + x3 + x4 + x5", "y2 ~ x1 + x2 + x3 + x4 + x5" ) ) analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` #### 3.3 Bootstrap inference ```{r} method <- ec_aipw( ps_formula = "S ~ x1 + x2 + x3 + x4 + x5", outcome_formula = c( "y1 ~ x1 + x2 + x3 + x4 + x5", "y2 ~ x1 + x2 + x3 + x4 + x5" ), bootstrap = 50, bootstrap_ci_type = "perc" ) analysis <- setup_analysis_primary( data = SyntheticData, trial_status_col_name = "S", treatment_col_name = "A", outcome_col_name = c("y1", "y2"), covariates_col_name = c("x1", "x2", "x3", "x4", "x5"), method_weighting_obj = method ) run_analysis(analysis) ``` ### 4 Notes 1. When there are missing values in the data, preprocess the dataset (deletion, imputation, etc.) to obtain a complete dataset before applying the package. ## References - Zhou X, Zhu J, Drake C, Pang H (2024). "Causal estimators for incorporating external controls in randomized trials with longitudinal outcomes." *Journal of the Royal Statistical Society Series A: Statistics in Society*. doi: [10.1093/jrsssa/qnae075](https://doi.org/10.1093/jrsssa/qnae075). - Shi L, Pang H, Chen C, Zhu J (2025). "rdborrow: an R package for causal inference incorporating external controls in randomized controlled trials with longitudinal outcomes." *Journal of Biopharmaceutical Statistics*, 35(6), 1043-1066. doi: [10.1080/10543406.2025.2489283](https://doi.org/10.1080/10543406.2025.2489283).