
Simulation Workflow for Primary Analysis
Lei Shi
2026-05-06
Source:vignettes/primary_simulation_workflow.Rmd
primary_simulation_workflow.RmdPrimary analysis
This vignette demonstrates Monte Carlo simulation for evaluating the EC-IPW and EC-AIPW weighting estimators proposed in Zhou et al. (2024) for the primary (placebo-controlled) phase.
1 Simulate a list of datasets for primary analysis
1.1 Create basic setup
# Initialize an empty data list
set.seed(2023)
data_matrix_list_null <- list()
data_matrix_list_alt <- list()
ntrial <- 3
# Specify the significance level alpha
alpha <- 0.05
# Specify the true effect size at the end of the study
true_effect <- 0
alt_effect <- 2.0 # tune this
# Specify column names
covariates_col_name <- c("x1", "x2", "x3", "x4", "x5")
outcome_col_name <- c("y1", "y2")
treatment_col_name <- "A"
trial_status_col_name <- "S"1.2 Generate simulation data list for null hypothesis
# Sequentially adding in datasets
for (trial_iter in 1:ntrial) {
# simulate 300 sample
normal <- copula::normalCopula(param = c(0.8), dim = 4, dispstr = "ar1")
# ========== generate internal covariates =============
X_int <- simulate_X_copula(
n = 200,
p = 4,
cp = normal, # copula
margins = c("binom", "binom", "binom", "exp"), # specify marginal distributions
paramMargins = list(
list(size = 1, prob = 0.7), # specify parameters for marginals
list(size = 1, prob = 0.9),
list(size = 1, prob = 0.3),
list(rate = 1 / 10)
)
)
X_int$x4 <- round(X_int$x4) + 1
X_int$x5 <- 30 + 10 * X_int$x1 + (7) * X_int$x2 + (-6) * X_int$x3 + (-0.5) * X_int$x4 + rnorm(200, mean = 0, sd = 10)
varnames <- c("1", paste0("x", 1:5))
# ============ generate external covariates ==============
X_ext <- simulate_X_copula(
n = 100,
p = 4,
cp = normal, # copula
margins = c("binom", "binom", "binom", "exp"), # specify marginal distributions
paramMargins = list(
list(size = 1, prob = 0.7), # specify parameters for marginals
list(size = 1, prob = 0.9),
list(size = 1, prob = 0.3),
list(rate = 1 / 10)
)
)
X_ext$x4 <- round(X_ext$x4) + 1
X_ext$x5 <- 50 + 10 * X_ext$x1 + (2) * X_ext$x2 + (-1) * X_ext$x3 + (-0.3) * X_ext$x4 + rnorm(100, mean = 0, sd = 10)
varnames <- c("1", paste0("x", 1:5))
# ============ Specify outcome models ==============
model_form_x_t1 <- setNames(c(10.0, 0.05, -1.5, -1.0, -0.2, -0.1), varnames) # 1.5*A, sigma = 4.0
model_form_x_t2 <- setNames(c(6.0, 0.5, -0.5, -1.0, -0.3, -0.06), varnames) # 1.8*A, sigma = 4.0
# model_form_x_t3 = setNames(c(5.0, 1.9, 1.4, -1.3, -0.4, -0.15), varnames) # 1.6*A, sigma = 4.0
# model_form_x_t4 = setNames(c(1.2, 1.0, 2.0, -0.5, -0.4, -0.10), varnames) # 2.5*A, sigma = 5.0
outcome_model_specs <- list(
list(
effect = 0, model_form_x = model_form_x_t1, # from data: true_effect = 1.5
noise_mean = 0, noise_sd = 4
), # model form for the first time point, given by model_form1
list(
effect = true_effect, model_form_x = model_form_x_t2, # from data: true_effect = 1.8
noise_mean = 0, noise_sd = 4
) # model form for the second time point, given by model_form2
)
# =========== generate trial data ============
Data <- simulate_trial(X_int,
X_ext,
num_treated = 100,
OLE_flag = FALSE,
T_cross = 2,
outcome_model_specs
)
data_matrix_list_null[[trial_iter]] <- Data
}
print(data_matrix_list_null[[1]])
#> x1 x2 x3 x4 x5 A S y1 y2
#> 1 0 0 0 2 37.5603081 1 1 3.075203642 7.45621850
#> 2 1 1 0 15 32.1146653 0 1 0.381477734 1.42373454
#> 3 1 1 0 5 29.6587853 1 1 -2.130905759 4.81962650
#> 4 1 1 0 14 48.5637699 1 1 -0.799045928 -3.66426849
#> 5 1 1 1 21 15.3740131 1 1 1.754322822 -0.51657158
#> 6 1 1 1 13 23.4719849 1 1 -2.133593495 -4.05330445
#> 7 0 0 0 2 50.7202315 0 1 5.962476866 -4.54171259
#> 8 1 1 1 38 2.6471921 1 1 -7.191029833 -6.24260229
#> 9 0 1 0 3 15.9047730 0 1 16.514041795 4.59707834
#> 10 1 1 1 15 41.7453103 1 1 1.199888278 -10.72581032
#> 11 1 1 1 9 62.1601058 1 1 -0.830153061 -7.05515174
#> 12 1 1 1 41 37.6820580 0 1 -3.685376633 -5.04604142
#> 13 1 1 0 5 30.0277076 0 1 7.946195020 3.06339072
#> 14 1 1 1 61 11.9858260 0 1 -2.721134439 -8.13413788
#> 15 0 1 0 10 38.7797178 1 1 0.696826361 1.52657345
#> 16 1 1 0 1 32.6633519 0 1 8.825422542 -0.34872182
#> 17 1 1 1 9 38.9149324 1 1 2.831337282 4.75986552
#> 18 1 1 0 3 47.3929214 0 1 7.689814398 3.98255977
#> 19 1 1 0 8 33.3032491 0 1 1.846732978 4.06533880
#> 20 1 1 0 2 40.3086754 1 1 5.048769526 7.57812377
#> 21 1 1 1 17 35.8673310 1 1 1.408072606 -6.52927481
#> 22 1 1 1 8 35.5738624 0 1 2.355902619 1.48923500
#> 23 0 0 0 3 36.4871818 1 1 14.221294669 10.04524564
#> 24 1 1 0 21 43.6444015 0 1 1.504631451 -4.48904761
#> 25 0 0 0 1 39.0939825 1 1 5.791261825 3.38649296
#> 26 1 1 1 22 34.4696395 1 1 5.169686536 -8.45002855
#> 27 1 1 0 9 42.5600600 0 1 5.178442878 -0.00574162
#> 28 1 1 1 12 25.4530562 1 1 6.033407556 6.51891931
#> 29 1 1 0 7 37.0078510 1 1 4.317151782 4.21681855
#> 30 1 1 1 48 13.3659760 1 1 -2.529625799 -10.10212520
#> 31 1 1 0 11 53.3449732 0 1 -1.268245457 0.42579792
#> 32 1 1 0 6 62.5674984 0 1 -0.035132127 3.73896813
#> 33 1 1 1 46 29.5398281 1 1 -7.232475830 -16.75129079
#> 34 1 1 1 25 34.1611966 1 1 -6.310601723 -6.24973287
#> 35 0 1 0 9 50.5697458 0 1 -0.940042283 -2.09208922
#> 36 1 1 0 2 59.2844278 1 1 -2.381938000 0.69958573
#> 37 1 1 1 12 26.7502103 1 1 -3.124249415 3.72682864
#> 38 1 1 1 48 8.4188701 1 1 0.021994764 -11.89391092
#> 39 0 1 0 14 31.5817246 1 1 -1.774609729 1.02601889
#> 40 1 1 1 33 35.5539803 0 1 7.287270087 -6.31798116
#> 41 1 1 1 24 31.4864937 0 1 2.582841580 -3.27331014
#> 42 0 1 0 6 41.8732525 1 1 3.538229831 -1.88630130
#> 43 1 1 1 13 34.9407762 0 1 -0.904686460 1.30916105
#> 44 0 0 0 2 24.7275346 0 1 8.458858952 5.73576881
#> 45 1 1 0 17 33.2005973 0 1 -0.144114624 -1.99432668
#> 46 1 1 1 14 24.5751342 1 1 4.600735296 -1.33123954
#> 47 1 1 0 14 41.3675116 1 1 1.280984300 -0.02149687
#> 48 1 1 0 6 35.3607367 1 1 3.014727397 4.92354245
#> 49 0 1 0 15 39.2538158 1 1 0.902976356 -1.51170530
#> 50 1 1 1 26 27.3968577 1 1 4.880239084 -9.75745142
#> 51 0 1 1 44 5.7430797 0 1 2.833011329 -4.83340592
#> 52 1 1 1 13 31.9376438 1 1 1.060765267 -3.47340652
#> 53 1 1 0 4 42.2355042 1 1 16.309419757 1.30724037
#> 54 0 1 0 3 49.1288583 0 1 7.873948344 0.76088083
#> 55 0 0 0 16 27.6019738 1 1 3.565313746 -0.40002555
#> 56 0 0 0 1 46.2540922 1 1 7.464643345 1.08132156
#> 57 0 0 0 2 27.9749729 0 1 11.954805960 11.04427109
#> 58 0 0 0 4 25.3115246 1 1 9.841692801 4.23263144
#> 59 0 0 0 1 13.0255130 0 1 14.135784963 4.37819036
#> 60 1 1 0 14 35.9372737 1 1 -3.091712751 -4.70379163
#> 61 1 1 1 12 34.1645138 0 1 7.226973304 -2.28704193
#> 62 1 1 0 6 38.6438845 0 1 8.757476773 -0.53951007
#> 63 0 0 0 1 24.7505475 0 1 3.969988925 -0.76164336
#> 64 1 1 0 16 26.8920055 0 1 -4.829597498 -1.97152291
#> 65 0 1 0 2 38.2065929 1 1 6.141742699 0.76003508
#> 66 1 1 0 3 48.0203115 1 1 -1.484896308 2.43057383
#> 67 1 1 0 3 50.6571361 1 1 -2.283192349 -7.91324278
#> 68 1 1 1 22 51.0384836 0 1 4.279950429 -12.58826958
#> 69 0 1 0 6 18.4636806 1 1 3.227434053 -0.03468554
#> 70 1 1 1 55 -12.2207630 0 1 -4.104989145 -3.51922221
#> 71 0 1 1 14 17.0680297 0 1 9.102903468 4.40232222
#> 72 1 1 0 10 42.0852768 0 1 -0.004508644 -0.85792673
#> 73 1 1 1 40 25.7495427 0 1 -2.578962842 -8.23788435
#> 74 1 1 0 9 40.1091723 1 1 6.476537129 -0.45297852
#> 75 1 1 0 6 52.5575380 1 1 3.902718001 3.15459318
#> 76 1 1 1 8 23.1863185 1 1 3.960243627 2.83576160
#> 77 1 1 0 8 25.2787604 1 1 3.707312698 6.99831174
#> 78 0 1 0 6 37.3064287 1 1 3.503436266 -0.82577066
#> 79 0 1 0 2 46.5617539 0 1 0.815870248 1.94562025
#> 80 1 1 1 8 22.5175890 1 1 2.386857080 2.29523603
#> 81 1 1 1 24 18.8015337 0 1 2.433449269 -0.10860873
#> 82 1 1 0 16 33.6566603 0 1 -0.442065218 -1.65898891
#> 83 1 1 0 2 36.9100071 1 1 0.885519416 5.71096317
#> 84 1 1 1 6 29.1342888 0 1 0.117629145 -1.72846878
#> 85 0 0 0 5 25.8840624 0 1 -1.964567148 3.34356731
#> 86 1 1 1 47 0.4941219 0 1 -2.044523138 -12.02973333
#> 87 1 1 0 9 22.1768281 0 1 0.184333776 5.62510080
#> 88 0 1 0 1 25.7304073 1 1 -0.274078414 -1.29641996
#> 89 0 1 0 8 13.1727646 0 1 3.429263138 1.87306518
#> 90 0 1 0 2 39.3949488 1 1 6.997448035 5.66485801
#> 91 0 1 0 7 33.2833402 1 1 4.451467329 2.48833785
#> 92 1 1 0 6 31.0281153 1 1 6.413842388 4.02607795
#> 93 0 1 1 19 23.8078732 0 1 3.715873386 -1.27874880
#> 94 1 1 1 10 33.3401347 1 1 7.110065710 3.77366200
#> 95 1 1 1 13 60.4682105 0 1 3.356686793 -2.97256977
#> 96 1 1 0 7 49.1908291 1 1 0.195708517 1.07293001
#> 97 1 1 1 12 13.2143940 0 1 9.101006089 4.81478162
#> 98 0 1 0 7 30.1483068 1 1 3.017075765 2.17750360
#> 99 1 0 0 2 42.0689923 0 1 12.720019563 11.34614747
#> 100 1 1 1 15 43.4054394 1 1 -3.157330317 -3.24539008
#> 101 1 1 0 26 48.2014307 0 1 -1.959882880 -7.58337968
#> 102 1 1 0 3 32.4666566 1 1 8.255496441 6.78130947
#> 103 1 1 0 4 45.5942012 0 1 -7.875398612 5.25596408
#> 104 0 1 0 13 17.4348667 1 1 10.475257130 -0.70969219
#> 105 0 1 0 3 38.7404466 0 1 5.556020405 -1.45240496
#> 106 1 1 0 2 47.1532808 1 1 2.831671251 2.35375288
#> 107 1 1 0 14 52.6285927 1 1 7.142784932 3.24429987
#> 108 0 1 0 4 16.9215457 1 1 6.778488529 4.71895259
#> 109 1 1 1 7 34.1396317 0 1 -0.970407475 7.41244086
#> 110 1 1 0 8 30.8521686 0 1 3.485029489 -0.04034831
#> 111 0 1 0 4 47.8908514 0 1 -0.701769628 3.54101531
#> 112 0 1 0 2 45.0043439 0 1 3.372541565 0.51694324
#> 113 1 1 1 20 32.0353028 0 1 0.849642183 -3.00784305
#> 114 1 1 0 2 45.5335809 0 1 9.018807311 -3.17656358
#> 115 1 1 1 45 34.5291411 1 1 0.451938348 -3.65866749
#> 116 1 1 1 14 19.3837289 1 1 6.179901877 -2.86997779
#> 117 1 1 0 13 44.3030014 0 1 2.672997338 -0.25144967
#> 118 1 1 0 7 33.9558948 1 1 0.124018346 -2.43331256
#> 119 1 1 0 4 34.4755776 0 1 5.455743994 4.50471343
#> 120 1 1 0 18 39.0194021 0 1 -0.264483084 3.25230901
#> 121 0 0 0 6 16.2678315 0 1 8.973651803 2.42011559
#> 122 1 1 0 2 61.1177034 0 1 0.397484106 0.47560136
#> 123 1 1 0 13 33.2198611 1 1 2.411084218 -5.16544508
#> 124 0 0 0 1 11.9306468 1 1 3.874149609 5.37588814
#> 125 0 1 0 9 32.9802806 1 1 3.930314252 -4.12687935
#> 126 1 1 1 39 19.0729522 0 1 -6.442307758 -5.36285584
#> 127 1 1 0 3 36.4321415 0 1 4.501506208 5.16902758
#> 128 1 1 0 11 47.5347132 0 1 0.808219399 -4.98571898
#> 129 0 1 0 12 30.4011158 0 1 5.605023923 0.46510354
#> 130 1 1 0 4 38.2891327 0 1 0.899017294 1.31508289
#> 131 0 0 0 2 41.8918274 0 1 0.506068724 1.64951044
#> 132 0 0 0 1 32.3466843 0 1 8.866848390 6.24132404
#> 133 1 1 1 12 31.8448497 1 1 3.946398340 -0.41130701
#> 134 1 1 1 17 45.2523503 1 1 1.047137966 -0.30446564
#> 135 1 1 0 14 53.6106454 1 1 -0.241653619 9.53564341
#> 136 0 1 1 15 21.2571883 0 1 4.447186968 -3.34806309
#> 137 0 1 0 9 38.3872327 0 1 8.596404961 3.22393463
#> 138 1 1 0 9 45.8138906 0 1 -2.227486872 -2.28137765
#> 139 1 1 0 14 45.8708825 0 1 -1.561372385 -2.86792555
#> 140 1 1 0 4 36.2898825 0 1 1.299902169 7.60841100
#> 141 1 1 1 6 40.9606946 1 1 1.960107852 0.61466452
#> 142 1 1 1 31 21.4016916 1 1 -2.538158979 -7.32179997
#> 143 1 1 1 17 41.4513162 1 1 -2.425483211 0.35857204
#> 144 1 1 0 7 39.8775720 0 1 6.499808475 1.29344926
#> 145 0 1 0 5 43.8650397 0 1 3.618236835 1.10949922
#> 146 1 1 0 5 46.4908690 1 1 -1.798058167 4.46131596
#> 147 0 1 0 3 21.1972585 0 1 4.742926399 4.83834356
#> 148 0 1 0 5 24.8993021 0 1 3.358159587 9.59492210
#> 149 1 1 0 18 38.6337062 0 1 -6.187297190 -0.41732823
#> 150 1 1 0 1 45.9840515 1 1 6.146320366 -0.98154531
#> 151 1 1 0 7 50.3456633 0 1 -5.584796795 -2.09989060
#> 152 1 1 1 7 41.1768084 1 1 0.501850659 -0.29843918
#> 153 1 1 0 6 56.5627229 1 1 0.360288491 -1.15335184
#> 154 1 1 1 22 25.7522474 1 1 0.240935562 -6.83717136
#> 155 1 0 0 2 28.7304987 1 1 5.205924601 6.86351502
#> 156 1 0 0 3 35.0132978 0 1 4.395808059 -2.88725410
#> 157 0 0 0 7 31.8890214 1 1 5.503212863 -1.51667575
#> 158 0 1 1 12 29.3771704 1 1 2.218541205 -1.07763848
#> 159 0 0 0 1 30.6882627 0 1 9.483555733 4.66514501
#> 160 1 1 1 46 19.9025923 0 1 -5.169762651 -9.60454508
#> 161 0 1 0 2 42.4725001 0 1 6.356233934 -0.48218216
#> 162 0 1 0 2 28.5852672 0 1 4.595356931 3.98118541
#> 163 1 1 1 23 23.3866153 1 1 -3.498122471 -2.75990811
#> 164 0 1 0 29 20.3282278 1 1 -3.718587010 -7.10006186
#> 165 1 1 1 15 41.6775239 0 1 -0.809392218 -1.03785256
#> 166 1 1 0 20 36.0221293 0 1 -3.082310627 0.33652664
#> 167 1 1 1 20 24.1303190 0 1 -1.381555075 -4.97636808
#> 168 1 0 0 1 70.9466396 0 1 1.625106095 0.58454296
#> 169 0 1 0 8 18.7778262 0 1 6.691733264 -1.42982192
#> 170 1 1 1 16 31.8843699 1 1 10.604740708 -5.03686887
#> 171 0 0 0 1 36.5714578 0 1 9.343093547 4.36004667
#> 172 0 0 0 1 25.1194737 1 1 4.418592486 2.34014833
#> 173 1 1 0 4 63.6633988 1 1 0.093453200 -2.50118685
#> 174 0 1 0 5 33.8398871 1 1 0.346727263 1.69985813
#> 175 1 1 0 5 45.9588836 1 1 7.878192986 1.83214978
#> 176 1 1 1 38 14.6665157 0 1 -3.419124591 -6.72980828
#> 177 0 1 0 6 51.6144203 1 1 -2.198424752 -0.12239560
#> 178 0 1 1 22 5.9955172 1 1 5.083166955 -3.84894908
#> 179 0 1 0 2 31.1788443 1 1 8.215530010 6.29555630
#> 180 0 0 0 1 26.5685717 0 1 10.821503811 7.54052459
#> 181 1 1 0 4 48.3884763 1 1 -1.311741075 0.46511282
#> 182 1 1 1 5 35.3934581 1 1 9.592036076 -0.32793975
#> 183 0 0 0 1 42.9569732 0 1 10.361030771 0.59581139
#> 184 0 1 0 5 25.3945511 1 1 4.777217092 -2.51484526
#> 185 0 1 1 29 11.9691693 1 1 2.820150167 -8.06754314
#> 186 1 1 1 10 30.7630154 0 1 -8.314911956 3.87746810
#> 187 1 1 0 9 41.2177491 0 1 3.657733552 -3.57149593
#> 188 1 1 0 10 35.3378391 1 1 1.111448397 4.21638139
#> 189 1 1 1 28 38.4179197 0 1 -1.622783508 -7.72900380
#> 190 1 1 0 5 48.8763655 1 1 4.252398849 1.43914640
#> 191 1 1 0 5 39.7744593 1 1 7.153678607 10.07220279
#> 192 0 1 0 3 21.4320087 0 1 8.458354484 1.64644222
#> 193 1 1 0 11 26.0721352 0 1 -4.245121377 -3.97672340
#> 194 1 1 0 13 24.6338933 0 1 9.968325845 -0.94484221
#> 195 0 0 0 3 42.9386900 1 1 7.720257840 5.23752984
#> 196 1 1 0 4 34.0509556 1 1 4.623901255 0.79051517
#> 197 1 1 1 47 42.5215659 0 1 -3.209677453 -15.95963515
#> 198 0 0 0 13 18.7326432 0 1 4.715168038 -2.19951576
#> 199 1 1 1 15 30.9626611 0 1 -1.952325112 -5.36231784
#> 200 1 1 1 7 31.9620581 1 1 1.237580727 -3.91531277
#> 201 1 1 0 20 63.1965348 0 0 -2.444298536 -7.29624901
#> 202 1 1 1 46 57.6653637 0 0 -12.207023370 -12.85619462
#> 203 1 1 0 4 77.1027243 0 0 4.006991997 -2.73118773
#> 204 1 1 0 4 53.1286322 0 0 3.621213753 0.85043730
#> 205 0 1 0 1 37.9229870 0 0 -0.276341841 0.33794536
#> 206 0 1 1 20 44.2027760 0 0 2.043458800 -5.36421079
#> 207 1 1 0 4 52.2181566 0 0 4.437677316 -2.93761168
#> 208 1 1 0 5 57.9917084 0 0 -0.363418765 -2.62310292
#> 209 1 1 0 5 70.7165076 0 0 -2.179194184 -2.80896649
#> 210 0 0 0 2 53.0343987 0 0 8.335053104 3.92286377
#> 211 1 1 0 2 58.7571253 0 0 3.659601659 5.31659079
#> 212 0 1 0 11 75.6343374 0 0 -3.535379262 -7.97235419
#> 213 1 1 0 8 63.0743024 0 0 -0.111930981 -5.47466777
#> 214 1 1 0 16 58.8544585 0 0 0.948732569 -1.93567604
#> 215 0 1 0 21 51.2075613 0 0 0.222697442 -9.05090531
#> 216 0 1 1 22 33.1623543 0 0 0.749079440 -8.31277001
#> 217 1 1 1 41 53.5087749 0 0 -7.534471008 -14.58945199
#> 218 1 1 1 9 60.4359544 0 0 -8.126199710 -7.51163316
#> 219 0 1 0 2 41.0180698 0 0 1.021457738 1.37975433
#> 220 0 1 0 6 15.0761720 0 0 10.898856675 -1.84168727
#> 221 0 0 0 5 28.4446940 0 0 4.307244584 1.88834349
#> 222 1 1 0 21 73.4465890 0 0 -2.078290560 -0.53833381
#> 223 0 1 0 2 43.7708876 0 0 0.559037936 2.28192711
#> 224 0 0 0 2 63.6230895 0 0 5.966953408 7.17252969
#> 225 1 1 0 11 59.8030919 0 0 2.532957992 1.32623618
#> 226 1 1 0 12 60.5887267 0 0 -6.181094581 -1.37821406
#> 227 0 1 0 4 57.9056095 0 0 8.367747309 -1.38591080
#> 228 1 1 0 8 63.8449283 0 0 1.012991275 -3.90546157
#> 229 0 1 0 10 44.9315741 0 0 2.382958148 -3.78948552
#> 230 0 1 0 4 45.3027053 0 0 5.392342399 2.66052756
#> 231 0 0 0 1 51.5390682 0 0 5.148661538 3.46363558
#> 232 1 1 0 4 56.9472354 0 0 4.475234214 5.92835022
#> 233 1 1 1 25 50.3778185 0 0 0.172788219 -10.84998123
#> 234 1 1 1 18 42.3671845 0 0 -8.112540902 0.28091227
#> 235 0 1 0 21 44.0855040 0 0 9.029575420 1.59547486
#> 236 1 1 1 6 75.1275465 0 0 -8.160574993 -0.41628672
#> 237 1 1 0 13 61.0621704 0 0 0.851140808 1.14958964
#> 238 1 1 1 23 30.4159586 0 0 -8.781369221 -2.51427976
#> 239 1 1 0 22 69.0255484 0 0 -1.703878926 -1.48389741
#> 240 0 0 0 4 45.5890032 0 0 0.601643048 6.32686700
#> 241 1 1 0 4 64.7496858 0 0 0.577035720 5.08481337
#> 242 1 1 0 11 51.4372758 0 0 0.509589398 -1.73241030
#> 243 1 1 0 5 86.7691152 0 0 -5.932143970 4.64159871
#> 244 1 1 1 10 57.4790367 0 0 1.072779332 2.40782878
#> 245 1 1 0 15 59.0601175 0 0 3.605957091 -2.29447519
#> 246 1 1 0 15 45.1830906 0 0 1.052370011 -0.85663807
#> 247 1 1 0 1 78.4350451 0 0 -2.604111890 -10.16229559
#> 248 0 0 0 2 60.9647516 0 0 0.449859071 6.64007631
#> 249 1 1 0 34 39.3957131 0 0 0.728027683 -2.49460354
#> 250 1 1 1 14 56.5739291 0 0 2.277809332 -2.71039178
#> 251 1 1 1 11 56.0442344 0 0 -0.499873593 1.99349235
#> 252 1 1 1 31 58.3228659 0 0 -4.011933496 -2.73883825
#> 253 0 1 0 10 53.0719040 0 0 -7.557560637 -4.20763811
#> 254 1 1 1 4 86.0092815 0 0 -0.818019685 0.79766561
#> 255 1 1 0 7 62.3726806 0 0 1.950563641 2.41669326
#> 256 1 1 0 15 34.8199036 0 0 4.270444367 -2.43645361
#> 257 1 1 1 6 59.5523464 0 0 -0.932827936 -1.77962178
#> 258 1 1 0 10 56.1689677 0 0 -8.249337934 0.12545600
#> 259 1 1 1 20 47.3884400 0 0 0.535175566 -3.68847725
#> 260 0 1 0 5 50.9371848 0 0 4.716750639 -0.16226102
#> 261 0 1 0 9 51.6879265 0 0 2.746664790 1.81720560
#> 262 1 1 1 36 50.1160484 0 0 -4.443971784 -12.10342551
#> 263 0 1 0 6 41.8281244 0 0 5.652235233 -3.61615541
#> 264 1 1 1 34 47.9582504 0 0 -6.230636660 -14.88327803
#> 265 1 1 0 6 48.3344133 0 0 4.821840501 -8.44777578
#> 266 1 1 1 12 50.4778184 0 0 -3.526596551 5.46747036
#> 267 1 1 0 13 71.7342798 0 0 -3.285930622 -0.82070231
#> 268 1 1 0 12 50.7578611 0 0 -2.589446496 -2.98981515
#> 269 1 1 1 37 64.7104672 0 0 -12.309920468 -2.66240764
#> 270 1 1 0 12 63.4989082 0 0 2.636784107 0.74373463
#> 271 1 1 1 16 66.1763359 0 0 3.291501245 -0.89272932
#> 272 1 1 0 7 42.6529820 0 0 3.409993586 9.33705848
#> 273 1 1 0 12 53.4023140 0 0 1.711409411 -10.30126800
#> 274 1 1 0 22 54.6985525 0 0 -6.728632465 -2.38562884
#> 275 1 1 1 22 61.6196111 0 0 2.994381694 -2.42029920
#> 276 1 1 0 5 60.6770611 0 0 1.246957421 4.27014620
#> 277 1 1 1 24 55.3123860 0 0 -1.644267140 -10.83516007
#> 278 1 1 1 10 48.9057230 0 0 -1.744191468 3.43764148
#> 279 1 1 1 19 57.7143632 0 0 -2.173513206 0.14071492
#> 280 0 1 0 2 42.1102266 0 0 4.979981925 -1.18530447
#> 281 0 1 0 2 37.2667303 0 0 9.379075635 -2.46586133
#> 282 0 0 0 3 43.9881339 0 0 -0.258646620 5.01505822
#> 283 0 1 0 2 47.7276168 0 0 8.084957836 2.81210917
#> 284 0 1 0 15 48.8734056 0 0 0.711032962 -7.98474270
#> 285 1 1 0 7 72.6454219 0 0 3.672367962 -4.30472468
#> 286 1 1 1 16 59.3650670 0 0 0.847882940 -5.13275941
#> 287 1 1 0 9 53.9955659 0 0 -1.032226323 -2.43403527
#> 288 1 1 1 18 60.4618862 0 0 1.899826497 -2.41898353
#> 289 1 1 0 8 43.1785916 0 0 2.526079032 10.48152263
#> 290 0 1 0 1 40.7328806 0 0 -1.834091980 -1.10294101
#> 291 1 1 1 8 50.3261719 0 0 2.030938003 -5.53981914
#> 292 1 1 0 16 50.2501787 0 0 -4.231275656 -2.29075985
#> 293 1 1 0 5 64.7339229 0 0 4.211328948 2.06594070
#> 294 1 1 0 2 62.9977790 0 0 -0.735591330 4.50034713
#> 295 1 1 1 19 73.6038336 0 0 -5.580242048 -7.05821337
#> 296 1 1 0 6 50.2970948 0 0 8.840696277 2.28512482
#> 297 0 1 0 9 55.9872578 0 0 -1.223892628 -4.32031437
#> 298 0 1 0 4 54.3395130 0 0 8.196583699 -2.57249833
#> 299 1 1 1 22 50.5536610 0 0 -2.264154765 -1.59288706
#> 300 0 1 0 2 58.1739082 0 0 0.102428756 -2.241990481.3 Generate simulation data list for alternative hypothesis
# Sequentially adding in datasets
for (trial_iter in 1:ntrial) {
# simulate 300 sample
normal <- copula::normalCopula(param = c(0.8), dim = 4, dispstr = "ar1")
# ========== generate internal covariates =============
X_int <- simulate_X_copula(
n = 200,
p = 4,
cp = normal, # copula
margins = c("binom", "binom", "binom", "exp"), # specify marginal distributions
paramMargins = list(
list(size = 1, prob = 0.7), # specify parameters for marginals
list(size = 1, prob = 0.9),
list(size = 1, prob = 0.3),
list(rate = 1 / 10)
)
)
X_int$x4 <- round(X_int$x4) + 1
X_int$x5 <- 30 + 10 * X_int$x1 + (7) * X_int$x2 + (-6) * X_int$x3 + (-0.5) * X_int$x4 + rnorm(200, mean = 0, sd = 10)
varnames <- c("1", paste0("x", 1:5))
# ============ generate external covariates ==============
X_ext <- simulate_X_copula(
n = 100,
p = 4,
cp = normal, # copula
margins = c("binom", "binom", "binom", "exp"), # specify marginal distributions
paramMargins = list(
list(size = 1, prob = 0.7), # specify parameters for marginals
list(size = 1, prob = 0.9),
list(size = 1, prob = 0.3),
list(rate = 1 / 10)
)
)
X_ext$x4 <- round(X_ext$x4) + 1
X_ext$x5 <- 50 + 10 * X_ext$x1 + (2) * X_ext$x2 + (-1) * X_ext$x3 + (-0.3) * X_ext$x4 + rnorm(100, mean = 0, sd = 10)
varnames <- c("1", paste0("x", 1:5))
# ============ Specify outcome models ==============
model_form_x_t1 <- setNames(c(10.0, 0.05, -1.5, -1.0, -0.2, -0.1), varnames) # 1.5*A, sigma = 4.0
model_form_x_t2 <- setNames(c(6.0, 0.5, -0.5, -1.0, -0.3, -0.06), varnames) # 1.8*A, sigma = 4.0
# model_form_x_t3 = setNames(c(5.0, 1.9, 1.4, -1.3, -0.4, -0.15), varnames) # 1.6*A, sigma = 4.0
# model_form_x_t4 = setNames(c(1.2, 1.0, 2.0, -0.5, -0.4, -0.10), varnames) # 2.5*A, sigma = 5.0
outcome_model_specs <- list(
list(
effect = 0, model_form_x = model_form_x_t1, # from data: true_effect = 1.5
noise_mean = 0, noise_sd = 4
), # model form for the first time point, given by model_form1
list(
effect = alt_effect, model_form_x = model_form_x_t2, # from data: true_effect = 1.8
noise_mean = 0, noise_sd = 4
) # model form for the second time point, given by model_form2
)
# =========== generate trial data ============
Data <- simulate_trial(X_int,
X_ext,
num_treated = 100,
OLE_flag = FALSE,
T_cross = 2,
outcome_model_specs
)
data_matrix_list_alt[[trial_iter]] <- Data
}
data_matrix_list_alt[[1]]
#> x1 x2 x3 x4 x5 A S y1 y2
#> 1 1 1 1 13 35.442355 0 1 1.349538310 6.291669e+00
#> 2 1 1 1 5 49.586503 1 1 -0.449368560 2.971647e+00
#> 3 1 1 1 34 32.973820 1 1 -4.584786013 -1.827476e+00
#> 4 1 1 1 11 20.151827 0 1 -1.989204575 1.957438e+00
#> 5 1 1 1 18 35.865134 0 1 -0.186250017 -4.106981e+00
#> 6 0 0 0 5 27.194010 0 1 6.263828751 4.383721e+00
#> 7 1 1 0 5 37.307901 0 1 10.750582360 5.970860e+00
#> 8 0 1 0 6 33.718675 0 1 11.579961007 2.762997e+00
#> 9 1 1 0 19 23.423115 0 1 0.512074494 1.753591e+00
#> 10 1 1 0 3 36.895219 0 1 2.701222246 -2.246097e-01
#> 11 1 1 1 23 30.191550 1 1 -1.901610805 -7.140430e+00
#> 12 1 1 0 5 52.049761 1 1 -5.035504568 3.580281e+00
#> 13 0 1 0 7 38.925682 1 1 0.061292685 3.832844e+00
#> 14 1 1 0 13 52.908906 0 1 0.796538147 -7.724948e+00
#> 15 1 0 0 2 28.904642 1 1 2.990283317 4.120050e+00
#> 16 1 1 0 4 45.747794 0 1 -6.818650286 -4.794554e+00
#> 17 1 1 1 18 41.097981 1 1 -1.097480617 -1.258643e+00
#> 18 1 1 0 7 38.631905 1 1 -6.691173345 2.287341e+00
#> 19 0 1 0 6 33.215909 1 1 2.882357037 -2.751520e+00
#> 20 0 0 0 2 30.989967 0 1 3.651744875 2.115557e+00
#> 21 1 1 0 4 39.130958 0 1 4.011106137 8.115064e-01
#> 22 0 1 1 16 41.565332 0 1 -3.026944303 -4.542342e+00
#> 23 0 1 0 6 34.260044 1 1 5.086452377 5.237283e+00
#> 24 1 0 0 4 41.272343 1 1 5.182016719 7.593877e+00
#> 25 0 0 0 2 23.489069 0 1 10.137784437 4.409927e+00
#> 26 0 0 0 16 23.180514 1 1 10.323924141 4.426560e+00
#> 27 1 1 1 36 23.488800 0 1 -2.584434893 -4.275898e+00
#> 28 1 1 0 3 36.678963 0 1 3.616763694 1.066941e+01
#> 29 1 1 1 16 27.736193 0 1 7.837609604 2.803492e+00
#> 30 0 1 0 5 31.751606 1 1 7.799294181 2.310870e+00
#> 31 0 1 0 2 52.791177 1 1 2.614904177 6.472740e+00
#> 32 1 1 0 4 37.371305 1 1 0.844377738 9.500988e-01
#> 33 0 0 0 2 28.724307 1 1 10.812225119 7.221198e+00
#> 34 1 1 1 16 30.268554 0 1 -0.478242919 -1.075619e+00
#> 35 0 1 0 4 39.163197 0 1 2.456012133 -6.487862e+00
#> 36 0 1 0 10 38.448730 1 1 -0.173874959 -4.892193e+00
#> 37 0 0 0 10 15.992956 0 1 5.957159137 -2.481722e+00
#> 38 1 1 0 4 35.034818 1 1 13.116863376 1.640977e+00
#> 39 0 1 0 2 44.273638 1 1 3.520757496 2.936721e+00
#> 40 1 1 0 8 43.543319 1 1 1.368641211 4.806571e+00
#> 41 0 0 0 7 20.675894 0 1 7.027547681 3.761781e+00
#> 42 1 1 0 18 44.104271 0 1 3.367206143 -2.547090e+00
#> 43 0 1 0 3 21.396381 0 1 1.903025876 5.884687e+00
#> 44 1 1 0 5 46.101102 0 1 7.630473437 1.750287e+00
#> 45 0 1 0 3 27.501733 1 1 -0.248864147 7.869156e-04
#> 46 1 1 0 2 52.268020 0 1 0.953852825 -2.549435e+00
#> 47 1 1 0 9 47.452973 1 1 -2.597474772 1.808324e+00
#> 48 1 1 1 9 22.525403 0 1 8.503838444 5.907012e-02
#> 49 0 1 0 8 27.517209 1 1 7.426515851 5.840611e+00
#> 50 0 1 1 13 26.025872 0 1 -2.794188661 2.534802e+00
#> 51 0 1 0 4 36.641890 1 1 7.614641363 -1.791254e+00
#> 52 1 1 0 3 55.395664 1 1 5.919850053 1.007380e+01
#> 53 1 1 1 16 36.023317 0 1 3.243913882 1.963504e-01
#> 54 0 1 0 10 37.271345 1 1 1.820655260 9.433370e+00
#> 55 1 1 0 5 40.919396 1 1 -0.103100933 5.880794e+00
#> 56 0 0 0 2 41.872291 0 1 10.034182492 5.289093e+00
#> 57 1 1 1 9 46.664984 0 1 -5.674405358 -1.125178e+00
#> 58 1 1 0 5 39.290681 1 1 1.999584701 1.301038e+01
#> 59 1 1 1 15 31.814272 0 1 5.760368379 -1.838452e+00
#> 60 0 1 0 11 43.801589 1 1 -3.186791774 4.707087e+00
#> 61 1 1 1 31 28.723381 1 1 1.606517507 -1.870806e+00
#> 62 1 1 1 20 23.351298 0 1 -0.349422614 -2.535798e+00
#> 63 0 1 0 4 37.415712 0 1 -0.468626658 6.101452e+00
#> 64 0 1 0 3 46.666853 1 1 4.366744996 4.616129e+00
#> 65 1 1 1 14 37.503553 1 1 -3.879668466 2.413113e+00
#> 66 0 1 0 17 33.017942 0 1 -0.007281941 9.514808e-01
#> 67 1 1 1 14 33.291920 1 1 0.191736625 1.259315e+00
#> 68 1 1 0 13 39.612933 0 1 10.472010757 -5.298127e+00
#> 69 1 1 0 5 21.422581 1 1 3.173117271 -1.519817e+00
#> 70 0 0 0 1 28.430169 1 1 -0.236131444 5.085025e+00
#> 71 0 0 0 1 32.797318 1 1 7.650188962 5.122753e+00
#> 72 1 1 0 6 42.899633 1 1 7.210545581 2.745525e+00
#> 73 0 1 0 3 43.940869 0 1 4.822927475 5.751443e+00
#> 74 1 1 1 11 34.519400 0 1 0.789673850 3.929452e+00
#> 75 1 1 1 32 29.535124 0 1 -0.861930842 -1.276077e+01
#> 76 0 1 0 7 16.526412 1 1 -0.570000936 5.473148e+00
#> 77 1 1 1 8 30.526095 1 1 -4.865909070 -6.326808e-01
#> 78 1 1 1 22 46.117786 0 1 0.457928560 1.335517e+00
#> 79 1 1 0 3 46.267882 1 1 5.541055700 2.497815e+00
#> 80 0 1 0 5 27.904987 1 1 1.972943040 7.042751e+00
#> 81 1 1 0 3 37.885196 0 1 2.626322561 3.843130e+00
#> 82 1 1 0 5 46.513803 1 1 -4.607023024 2.684941e+00
#> 83 1 1 1 21 19.637491 1 1 2.603373093 5.931987e+00
#> 84 0 0 0 4 40.704521 0 1 2.587160265 8.685697e-01
#> 85 1 1 0 4 52.265413 0 1 1.894521955 4.167531e+00
#> 86 1 1 1 14 34.920267 1 1 6.218975839 -9.582841e-01
#> 87 1 1 0 3 46.716557 0 1 0.447785880 3.578840e+00
#> 88 1 1 0 26 65.066558 0 1 -4.988676736 -1.131726e+01
#> 89 1 1 0 23 48.981807 0 1 -1.014015028 3.135925e-01
#> 90 0 1 0 2 37.067304 0 1 1.748162812 8.509572e+00
#> 91 1 1 0 6 39.954251 1 1 -3.491521788 6.826596e+00
#> 92 0 1 0 2 39.100328 0 1 -1.541104281 -5.697422e-01
#> 93 1 1 1 26 27.883569 0 1 -3.926224175 -5.909639e+00
#> 94 1 1 1 30 35.842789 0 1 1.595190215 -5.696599e+00
#> 95 0 1 0 16 34.358836 1 1 -0.529566604 -1.391987e+00
#> 96 1 1 1 41 9.358633 1 1 -2.190837827 -4.919920e+00
#> 97 0 1 0 12 30.711228 0 1 6.537517881 6.072199e+00
#> 98 1 1 0 3 41.950357 1 1 17.547688699 8.329940e+00
#> 99 1 1 0 4 44.330523 1 1 3.494345680 5.738566e+00
#> 100 1 1 1 19 36.510759 1 1 2.390989368 -2.907259e+00
#> 101 0 0 0 2 38.001895 0 1 6.156874788 -2.371060e+00
#> 102 1 1 0 4 45.185000 0 1 4.248050791 1.407905e+01
#> 103 1 1 0 4 42.278255 0 1 5.431483311 -4.466170e+00
#> 104 1 1 0 17 26.626111 1 1 2.524184922 3.083569e-01
#> 105 1 1 0 16 45.412152 1 1 3.428917697 -1.865726e+00
#> 106 0 1 0 5 35.253565 1 1 7.282947272 -2.051720e+00
#> 107 1 1 1 46 21.237435 0 1 -6.065507050 -4.966847e+00
#> 108 1 1 1 9 28.285223 0 1 0.144158222 2.693203e+00
#> 109 0 0 0 5 4.619796 0 1 10.045400591 6.609732e+00
#> 110 1 1 0 14 56.052158 0 1 3.120492621 -3.572048e+00
#> 111 1 1 1 15 41.162481 1 1 -3.770932143 1.578133e+00
#> 112 1 1 0 3 44.899680 1 1 5.181459252 7.917960e+00
#> 113 0 0 0 3 22.930086 1 1 14.023014447 7.103636e+00
#> 114 1 1 1 23 22.710884 1 1 2.434417789 1.015722e+01
#> 115 1 1 1 19 40.490930 1 1 2.130495963 -9.303208e+00
#> 116 0 1 0 3 26.009219 0 1 5.854970685 2.827342e+00
#> 117 1 1 0 5 58.918488 1 1 -2.554004111 8.441769e-01
#> 118 1 1 1 34 26.650817 0 1 -5.335798277 -6.310101e+00
#> 119 1 1 0 5 56.288934 0 1 -3.994989837 -1.479328e+00
#> 120 1 1 1 27 22.044333 1 1 -3.026383907 7.885740e+00
#> 121 1 1 0 20 45.624542 1 1 -1.797282113 5.077926e+00
#> 122 0 1 0 4 51.864028 1 1 3.582482710 8.193542e-01
#> 123 0 0 0 3 29.040195 0 1 7.781707944 5.419172e+00
#> 124 1 1 0 3 32.994642 0 1 2.964118043 3.564354e+00
#> 125 0 1 0 13 35.972618 0 1 2.886909507 -5.054099e-01
#> 126 1 1 1 59 8.478800 1 1 -5.739226850 -1.301118e+01
#> 127 0 1 0 12 32.543020 0 1 4.102331341 -1.609089e+00
#> 128 1 1 0 5 51.723383 0 1 2.714410888 4.525786e-02
#> 129 1 1 1 26 14.991910 1 1 4.270095101 -7.084196e+00
#> 130 1 1 0 10 48.770226 0 1 -4.888969685 1.805537e-01
#> 131 1 1 1 38 18.146026 1 1 -3.880505656 3.157017e-01
#> 132 0 1 0 3 40.788395 0 1 7.961190096 4.663814e+00
#> 133 0 0 0 5 12.993538 0 1 7.361239240 1.356610e+00
#> 134 0 1 0 3 28.311642 1 1 7.181566305 1.941842e+00
#> 135 1 1 1 13 30.949106 0 1 -0.883808425 1.941705e+00
#> 136 0 1 1 2 29.221468 1 1 5.902295264 -3.410918e-01
#> 137 1 1 0 14 44.902163 0 1 4.822441133 1.312065e-01
#> 138 1 1 1 7 42.509307 0 1 7.334822891 7.718419e+00
#> 139 1 1 0 10 47.702488 0 1 1.529452324 1.425834e+00
#> 140 1 1 0 4 34.176443 0 1 7.542730996 -4.765842e+00
#> 141 1 1 0 18 32.465144 0 1 -1.713704982 -3.916108e-01
#> 142 0 0 0 3 25.483288 1 1 5.610669865 2.016199e+00
#> 143 1 1 1 21 51.628045 0 1 -4.752098446 -1.448500e+01
#> 144 0 1 0 18 35.077328 1 1 -1.488719626 2.153938e+00
#> 145 1 1 0 3 54.059494 0 1 4.541514157 2.554679e+00
#> 146 1 1 1 24 16.626234 0 1 0.756198895 -1.148362e-01
#> 147 0 1 0 6 43.018953 0 1 4.280823476 -1.201513e+00
#> 148 1 1 1 9 27.322222 1 1 1.094239914 4.761473e+00
#> 149 0 1 0 6 27.372964 1 1 13.161864406 -1.776289e-01
#> 150 1 1 0 5 31.449755 1 1 3.064072788 6.179469e+00
#> 151 0 1 0 2 34.765346 1 1 -0.293727754 1.968829e+00
#> 152 0 0 0 2 23.014373 0 1 11.643865296 1.717710e+00
#> 153 1 1 0 15 30.021389 0 1 -6.432525642 3.634063e+00
#> 154 1 1 0 4 45.428253 0 1 4.621060470 9.852192e+00
#> 155 1 1 0 9 41.479016 0 1 -1.492585310 2.519367e+00
#> 156 0 0 0 6 29.005840 0 1 3.684629033 5.649944e+00
#> 157 1 1 0 3 37.337961 1 1 1.525139606 6.857763e+00
#> 158 0 1 0 2 36.303637 1 1 4.618928762 1.078725e+01
#> 159 1 1 1 29 34.986754 0 1 1.372185131 -4.479922e+00
#> 160 1 1 0 17 52.518406 1 1 -4.131790399 3.497415e-01
#> 161 1 1 0 15 41.277959 1 1 6.986456083 5.509697e+00
#> 162 1 1 0 7 44.296648 1 1 1.115520738 8.023837e+00
#> 163 1 1 0 2 36.413633 1 1 6.071399720 3.546403e+00
#> 164 1 1 0 9 58.410189 1 1 0.295539963 2.134367e+00
#> 165 1 1 0 8 37.458134 1 1 1.017079178 5.172254e+00
#> 166 1 0 0 2 26.997427 1 1 7.616857775 3.624702e+00
#> 167 0 0 0 2 20.637388 0 1 -0.859290188 4.987197e+00
#> 168 1 1 0 3 61.090667 1 1 1.609086054 -2.362048e+00
#> 169 1 1 0 13 36.375783 0 1 2.774471845 5.671862e+00
#> 170 0 1 0 15 34.882981 1 1 5.673664408 5.466838e+00
#> 171 1 1 0 6 34.763254 1 1 0.459654818 3.805094e+00
#> 172 0 1 0 6 37.324697 1 1 5.594464591 5.330910e+00
#> 173 1 1 0 14 25.358521 1 1 -0.984900502 -3.221854e-01
#> 174 1 1 0 7 31.612651 0 1 10.394417136 3.285327e+00
#> 175 1 1 1 21 18.244359 0 1 7.394219814 -4.232451e+00
#> 176 1 1 0 1 35.669727 0 1 7.960395226 2.256255e+00
#> 177 1 1 0 6 49.840236 0 1 4.520134362 -1.007556e+00
#> 178 1 1 1 12 34.898897 1 1 -2.684915712 4.262859e-01
#> 179 1 1 0 10 39.659768 0 1 1.923470165 2.008199e+00
#> 180 1 1 0 18 27.116443 1 1 2.368573756 3.624667e+00
#> 181 1 1 0 10 43.694632 0 1 10.021517697 3.539580e+00
#> 182 0 1 0 1 38.457687 1 1 9.420267628 4.811611e+00
#> 183 1 1 1 15 25.688932 0 1 2.318800385 -9.523796e-01
#> 184 1 1 0 6 42.700996 0 1 7.911003073 9.197241e+00
#> 185 1 1 1 10 53.775189 1 1 9.353047497 1.484935e+00
#> 186 1 1 0 1 39.351433 0 1 1.133712863 3.899058e+00
#> 187 1 1 0 7 53.167769 1 1 2.305935909 1.556100e+00
#> 188 0 1 0 5 31.564142 0 1 4.289296616 7.427771e+00
#> 189 1 1 1 13 25.352937 1 1 4.979046672 -3.290437e+00
#> 190 1 1 0 16 31.411083 1 1 -2.940314579 -5.717119e+00
#> 191 1 1 1 11 32.813555 1 1 3.361253118 -1.982160e+00
#> 192 1 1 1 15 36.121487 1 1 -0.970711939 -1.360632e+00
#> 193 0 0 0 3 26.346076 1 1 9.115394580 6.228697e+00
#> 194 0 1 0 3 48.828934 0 1 2.793638778 -3.379844e-01
#> 195 0 1 0 7 22.521061 0 1 7.097008285 3.603588e+00
#> 196 1 1 0 5 32.589594 0 1 0.092793759 3.382757e+00
#> 197 1 1 0 4 53.354020 1 1 -0.619647071 -1.040542e+00
#> 198 1 1 0 7 24.877663 0 1 3.020977314 5.012234e+00
#> 199 1 1 1 48 9.658688 1 1 -3.126033387 -1.015658e+01
#> 200 0 1 0 10 21.185143 1 1 2.979364745 -1.164414e+00
#> 201 1 1 1 16 45.574533 0 0 -1.170599356 -4.090475e+00
#> 202 1 1 0 19 49.753978 0 0 -4.327878076 -4.250967e+00
#> 203 1 1 0 13 51.656140 0 0 3.741221078 -2.428570e+00
#> 204 0 1 0 2 50.628283 0 0 7.818202719 4.185474e+00
#> 205 1 0 0 4 60.632831 0 0 3.215703409 -4.333667e-01
#> 206 0 1 0 6 37.539300 0 0 3.574192537 1.737581e+00
#> 207 1 1 0 12 56.761941 0 0 -0.139090496 -2.532402e+00
#> 208 1 1 0 3 57.853619 0 0 7.557400607 4.969039e+00
#> 209 1 1 1 12 66.597793 0 0 3.286716258 -2.479280e+00
#> 210 0 0 0 2 44.266250 0 0 4.688569486 9.119320e-01
#> 211 1 1 0 11 61.868042 0 0 2.769021799 -3.280917e-01
#> 212 1 1 1 4 52.319535 0 0 -3.046927075 1.031815e+00
#> 213 1 1 1 13 53.607806 0 0 -4.190965420 -6.206818e+00
#> 214 1 1 0 4 64.761844 0 0 3.251485182 8.106464e+00
#> 215 1 1 0 12 69.659561 0 0 -0.777709923 -6.300584e+00
#> 216 0 0 0 10 50.602525 0 0 9.006588379 2.832018e+00
#> 217 1 1 0 4 58.713556 0 0 4.959681503 -2.555234e+00
#> 218 1 1 0 11 60.464910 0 0 2.946985272 -8.358593e+00
#> 219 0 1 0 3 60.319858 0 0 4.341655227 -5.199369e+00
#> 220 1 1 0 5 47.907573 0 0 -2.324928678 -1.578833e+00
#> 221 1 1 1 15 49.576180 0 0 5.794106892 -6.828809e+00
#> 222 0 1 0 11 43.841274 0 0 -0.130090805 3.662391e+00
#> 223 1 1 1 32 55.751752 0 0 -10.453345679 -1.111238e+01
#> 224 1 1 0 6 74.411148 0 0 -2.169225680 3.226771e+00
#> 225 1 1 1 11 49.734210 0 0 -1.931145376 -3.971801e+00
#> 226 1 1 0 13 49.732330 0 0 4.609875096 -6.604396e+00
#> 227 1 1 0 3 67.788006 0 0 3.100369676 -2.056888e+00
#> 228 1 1 1 17 76.980958 0 0 -7.342542390 -3.822280e+00
#> 229 1 1 0 6 63.181816 0 0 -1.601939090 2.684047e+00
#> 230 1 1 1 11 51.263317 0 0 8.063756245 -4.684002e+00
#> 231 1 1 0 10 52.024749 0 0 5.771868866 -1.153793e-01
#> 232 1 1 0 4 58.931850 0 0 6.224035594 1.106523e+00
#> 233 1 1 0 13 57.013748 0 0 -1.912009218 -7.253637e-01
#> 234 1 1 0 16 55.729810 0 0 4.134071680 -3.477954e+00
#> 235 1 1 0 12 49.066143 0 0 2.988151796 -1.121441e+00
#> 236 1 1 0 3 44.829800 0 0 2.044378960 5.978712e+00
#> 237 1 1 1 15 51.567513 0 0 6.762654249 -9.509159e+00
#> 238 1 1 1 41 50.531709 0 0 -6.592139153 -9.086373e+00
#> 239 0 1 0 23 52.291445 0 0 -6.071196833 -6.970973e+00
#> 240 1 1 1 12 77.663707 0 0 -4.922886804 -5.714324e-01
#> 241 1 1 1 27 25.515318 0 0 -2.652526333 -2.848093e+00
#> 242 1 1 0 5 55.415496 0 0 3.592604380 7.966650e+00
#> 243 1 1 1 17 64.579670 0 0 -3.221181015 1.296604e+00
#> 244 1 1 0 6 66.508481 0 0 4.627543467 2.179390e+00
#> 245 1 1 0 7 59.091816 0 0 -8.408961802 5.103764e-02
#> 246 0 1 0 8 50.042419 0 0 -0.430111768 -4.657210e+00
#> 247 1 1 0 7 65.007360 0 0 -2.741167629 -4.278488e+00
#> 248 1 1 0 11 46.871372 0 0 -3.869868379 -1.002395e+00
#> 249 1 1 0 7 73.139472 0 0 0.503698676 2.862762e+00
#> 250 1 1 0 7 52.239344 0 0 -6.499449555 -2.662292e+00
#> 251 1 1 0 6 69.994952 0 0 0.010246021 -2.598719e-01
#> 252 1 1 1 22 46.565566 0 0 0.701982124 -3.489101e-01
#> 253 1 1 1 14 38.143550 0 0 -3.508046394 1.198510e+00
#> 254 1 1 0 23 29.623060 0 0 -0.981949005 -1.085873e+00
#> 255 1 1 0 5 46.806545 0 0 6.084062711 1.277967e+01
#> 256 0 0 0 8 48.560871 0 0 7.858508434 -3.974427e+00
#> 257 0 0 0 1 48.173303 0 0 3.728417032 6.815746e+00
#> 258 1 1 0 18 59.498943 0 0 -7.864016460 3.785880e+00
#> 259 0 1 0 9 39.661727 0 0 -0.857362361 4.678610e+00
#> 260 1 1 0 7 51.704950 0 0 0.506825570 3.257549e+00
#> 261 1 1 0 3 56.666767 0 0 8.726400555 4.092377e+00
#> 262 1 1 1 11 54.997869 0 0 5.933517834 -7.105224e+00
#> 263 0 1 0 3 40.651027 0 0 7.911677709 -1.754221e+00
#> 264 0 1 0 3 40.633093 0 0 5.661701859 2.859294e+00
#> 265 0 0 0 1 44.443386 0 0 10.861168751 6.124480e+00
#> 266 0 1 0 5 33.232676 0 0 11.283366543 4.688796e+00
#> 267 0 0 0 2 55.141531 0 0 6.565700861 1.045512e+01
#> 268 1 1 1 18 36.415495 0 0 1.798054608 -2.352087e+00
#> 269 1 1 1 20 54.664660 0 0 -10.825340414 -4.683654e-01
#> 270 0 0 0 1 35.132614 0 0 2.293742834 6.665232e+00
#> 271 0 1 0 6 62.605645 0 0 1.310315140 -7.079218e+00
#> 272 0 0 0 4 65.468136 0 0 3.199886566 1.603639e+00
#> 273 1 0 0 5 44.521618 0 0 8.572710905 1.689092e+00
#> 274 1 1 0 5 50.471602 0 0 2.366519938 4.536772e+00
#> 275 1 1 0 3 78.548154 0 0 0.001722342 1.501911e+00
#> 276 1 1 0 11 62.598449 0 0 2.935686924 6.109858e+00
#> 277 0 1 0 5 37.400524 0 0 4.837331288 -1.625488e+00
#> 278 1 1 0 2 54.434229 0 0 3.331882369 -3.318821e+00
#> 279 1 1 1 27 56.090926 0 0 -1.766101876 -4.768352e+00
#> 280 1 1 0 2 53.827240 0 0 1.513664220 1.722110e+00
#> 281 1 1 0 5 49.276569 0 0 6.058501339 4.883755e+00
#> 282 1 1 0 5 56.612655 0 0 -3.571116867 1.411234e+00
#> 283 1 1 0 3 77.898292 0 0 -4.678598047 4.983867e-01
#> 284 1 1 0 6 43.275675 0 0 0.806299963 7.442646e-01
#> 285 1 1 0 7 80.352773 0 0 -6.091429948 4.934305e-01
#> 286 1 1 1 21 53.749187 0 0 1.806389941 -8.111033e+00
#> 287 0 1 0 12 65.240309 0 0 -8.534078353 -1.735507e+00
#> 288 1 1 0 18 50.040557 0 0 1.212823358 -5.091146e+00
#> 289 1 1 1 11 53.634794 0 0 -5.886473049 2.696330e+00
#> 290 1 1 0 12 60.263171 0 0 -2.063153265 5.381447e+00
#> 291 1 1 0 1 68.690202 0 0 2.047042138 1.373103e+00
#> 292 1 1 0 5 62.255806 0 0 -6.405501927 4.154659e+00
#> 293 0 1 0 6 62.252765 0 0 8.705988613 1.494095e+00
#> 294 1 1 0 4 55.842818 0 0 -1.172166353 1.684951e+00
#> 295 0 1 1 11 47.286530 0 0 9.243057043 -8.070466e+00
#> 296 1 1 0 14 63.199598 0 0 5.047776664 1.983845e+00
#> 297 1 1 0 2 51.258889 0 0 5.180440423 2.956244e+00
#> 298 1 1 1 17 67.846810 0 0 -0.861282396 -7.833959e+00
#> 299 1 1 0 5 62.657655 0 0 -1.649690833 -3.240491e+00
#> 300 1 1 0 8 58.151316 0 0 5.018996445 -2.420345e+002 Parametric inference:
# Specify a list of methods to be tested
## IPW - optimal weight
method_IPW_optimal_weight <- setup_method_weighting(
method_name = "IPW",
optimal_weight_flag = TRUE,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5"
)
## AIPW - optimal weight
method_AIPW_optimal_weight <- setup_method_weighting(
method_name = "AIPW",
optimal_weight_flag = TRUE,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5",
model_form_mu0_ext = c(
"y1 ~ x1 + x2 + x3 + x4 + x5",
"y2 ~ x1 + x2 + x3 + x4 + x5"
)
)
## IPW - zero weight
method_IPW_zero_weight <- setup_method_weighting(
method_name = "IPW",
wt = 0,
optimal_weight_flag = FALSE,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5"
)
## AIPW - zero weight
method_AIPW_zero_weight <- setup_method_weighting(
method_name = "AIPW",
wt = 0,
optimal_weight_flag = FALSE,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5",
model_form_mu0_ext = c(
"y1 ~ x1 + x2 + x3 + x4 + x5",
"y2 ~ x1 + x2 + x3 + x4 + x5"
)
)
## method list
method_obj_list <- list(
method_IPW_optimal_weight,
method_AIPW_optimal_weight,
method_IPW_zero_weight,
method_AIPW_zero_weight
)
# create a simulation object for primary analysis
simulation_primary_obj <- setup_simulation_primary(
data_matrix_list_null = data_matrix_list_null, # two scenarios
data_matrix_list_alt = data_matrix_list_alt,
trial_status_col_name = trial_status_col_name,
treatment_col_name = treatment_col_name,
outcome_col_name = outcome_col_name,
covariates_col_name = covariates_col_name,
method_obj_list = method_obj_list,
true_effect = true_effect,
alt_effect = alt_effect,
alpha = alpha,
method_description = c(
"IPW, optimal weight",
"AIPW, optimal weight",
"IPW, zero weight",
"AIPW, zero weight"
)
)
simulation_report <- run_simulation(simulation_primary_obj, quiet = FALSE)
#> Null: | method setting: 1 | data setting: 1
#> Null: | method setting: 1 | data setting: 2
#> Null: | method setting: 1 | data setting: 3
#> Null: | method setting: 2 | data setting: 1
#> Null: | method setting: 2 | data setting: 2
#> Null: | method setting: 2 | data setting: 3
#> Null: | method setting: 3 | data setting: 1
#> Null: | method setting: 3 | data setting: 2
#> Null: | method setting: 3 | data setting: 3
#> Null: | method setting: 4 | data setting: 1
#> Null: | method setting: 4 | data setting: 2
#> Null: | method setting: 4 | data setting: 3
#> Alternative: | method setting: 1 | data setting: 1
#> Alternative: | method setting: 1 | data setting: 2
#> Alternative: | method setting: 1 | data setting: 3
#> Alternative: | method setting: 2 | data setting: 1
#> Alternative: | method setting: 2 | data setting: 2
#> Alternative: | method setting: 2 | data setting: 3
#> Alternative: | method setting: 3 | data setting: 1
#> Alternative: | method setting: 3 | data setting: 2
#> Alternative: | method setting: 3 | data setting: 3
#> Alternative: | method setting: 4 | data setting: 1
#> Alternative: | method setting: 4 | data setting: 2
#> Alternative: | method setting: 4 | data setting: 3
simulation_report # Type I error and Power
#> method_description bias variance mse coverage type_I_error
#> 1 IPW, optimal weight 0.7112827 1.28839749 1.7943206 0.6666667 0.3333333
#> 2 AIPW, optimal weight 0.1711321 0.09574202 0.1250282 1.0000000 0.0000000
#> 3 IPW, zero weight 0.7433970 1.34009734 1.8927365 0.6666667 0.3333333
#> 4 AIPW, zero weight 0.1449855 0.12189665 0.1429174 1.0000000 0.0000000
#> power
#> 1 1.0000000
#> 2 1.0000000
#> 3 0.6666667
#> 4 1.00000003 Bootstrap inference:
# Specify a list of methods to be tested
bootstrap_obj <- setup_bootstrap(
replicates = 50,
bootstrap_CI_type = "perc"
)
## IPW - optimal weight
method_IPW_optimal_weight <- setup_method_weighting(
method_name = "IPW",
optimal_weight_flag = TRUE,
bootstrap_flag = TRUE,
bootstrap_obj = bootstrap_obj,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5"
)
## AIPW - optimal weight
method_AIPW_optimal_weight <- setup_method_weighting(
method_name = "AIPW",
optimal_weight_flag = TRUE,
bootstrap_flag = TRUE,
bootstrap_obj = bootstrap_obj,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5",
model_form_mu0_ext = c(
"y1 ~ x1 + x2 + x3 + x4 + x5",
"y2 ~ x1 + x2 + x3 + x4 + x5 + y1"
)
)
## IPW - zero weight
method_IPW_zero_weight <- setup_method_weighting(
method_name = "IPW",
wt = 0,
optimal_weight_flag = FALSE,
bootstrap_flag = TRUE,
bootstrap_obj = bootstrap_obj,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5"
)
## AIPW - zero weight
method_AIPW_zero_weight <- setup_method_weighting(
method_name = "AIPW",
wt = 0,
optimal_weight_flag = FALSE,
bootstrap_flag = TRUE,
bootstrap_obj = bootstrap_obj,
model_form_piS = "S ~ x1 + x2 + x3 + x4 + x5",
model_form_mu0_ext = c(
"y1 ~ x1 + x2 + x3 + x4 + x5",
"y2 ~ x1 + x2 + x3 + x4 + x5 + y1"
)
)
## method list
method_obj_list <- list(
method_IPW_optimal_weight,
method_AIPW_optimal_weight,
method_IPW_zero_weight,
method_AIPW_zero_weight
)
# create a simulation object for primary analysis
simulation_primary_obj <- setup_simulation_primary(
data_matrix_list_null = data_matrix_list_null,
data_matrix_list_alt = data_matrix_list_alt,
trial_status_col_name = trial_status_col_name,
treatment_col_name = treatment_col_name,
outcome_col_name = outcome_col_name,
covariates_col_name = covariates_col_name,
method_obj_list = method_obj_list,
true_effect = true_effect,
alt_effect = alt_effect,
alpha = alpha,
method_description = c(
"IPW, optimal weight, bootstrap",
"AIPW, optimal weight, bootstrap",
"IPW, zero weight, bootstrap",
"AIPW, zero weight, bootstrap"
)
)
simulation_report_bs <- run_simulation(simulation_primary_obj, quiet = FALSE)
#> Null: | method setting: 1 | data setting: 1
#> Null: | method setting: 1 | data setting: 2
#> Null: | method setting: 1 | data setting: 3
#> Null: | method setting: 2 | data setting: 1
#> Null: | method setting: 2 | data setting: 2
#> Null: | method setting: 2 | data setting: 3
#> Null: | method setting: 3 | data setting: 1
#> Null: | method setting: 3 | data setting: 2
#> Null: | method setting: 3 | data setting: 3
#> Null: | method setting: 4 | data setting: 1
#> Null: | method setting: 4 | data setting: 2
#> Null: | method setting: 4 | data setting: 3
#> Alternative: | method setting: 1 | data setting: 1
#> Alternative: | method setting: 1 | data setting: 2
#> Alternative: | method setting: 1 | data setting: 3
#> Alternative: | method setting: 2 | data setting: 1
#> Alternative: | method setting: 2 | data setting: 2
#> Alternative: | method setting: 2 | data setting: 3
#> Alternative: | method setting: 3 | data setting: 1
#> Alternative: | method setting: 3 | data setting: 2
#> Alternative: | method setting: 3 | data setting: 3
#> Alternative: | method setting: 4 | data setting: 1
#> Alternative: | method setting: 4 | data setting: 2
#> Alternative: | method setting: 4 | data setting: 3
simulation_report_bs
#> method_description bias variance mse coverage
#> 1 IPW, optimal weight, bootstrap 0.7112827 1.28839749 1.7943206 0.6666667
#> 2 AIPW, optimal weight, bootstrap 0.1706491 0.09260821 0.1217293 0.6666667
#> 3 IPW, zero weight, bootstrap 0.7433970 1.34009734 1.8927365 0.6666667
#> 4 AIPW, zero weight, bootstrap 0.1429335 0.11738462 0.1378146 0.6666667
#> type_I_error power
#> 1 0.3333333 0.6666667
#> 2 0.3333333 0.3333333
#> 3 0.3333333 0.6666667
#> 4 0.3333333 0.3333333The above code generates a report for the simulation results.
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.
- 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.