## ===== Packages =====
suppressPackageStartupMessages({
library(MASS)
library(Matrix)
library(dplyr)
library(tidyr)
library(ggplot2)
library(forcats)
library(scales)
library(tibble)
})
## Warning: package 'forcats' was built under R version 4.4.3
set.seed(12345)
## ===== Global config =====
nsim <- 10000
n_per_arm <- 225
alpha_tot <- 0.05
sided <- "two"
pC <- 0.50
endpts <- c("H1","H2","H3","H4","H5","H6")
## ===== Correlation =====
Sigma <- matrix(c(
1.0, 0.1, 0.5, 0.1, 0.1, 0.1,
0.1, 1.0, 0.1, 0.8, 0.5, 0.5,
0.5, 0.1, 1.0, 0.1, 0.1, 0.1,
0.1, 0.8, 0.1, 1.0, 0.5, 0.5,
0.1, 0.5, 0.1, 0.5, 1.0, 0.5,
0.1, 0.5, 0.1, 0.5, 0.5, 1.0
), 6, 6, byrow=TRUE, dimnames=list(endpts,endpts))
if (min(eigen(Sigma, symmetric=TRUE, only.values=TRUE)$values) < 1e-8) {
Sigma <- as.matrix(nearPD(Sigma)$mat)
}
Sigma <- (Sigma + t(Sigma))/2
## ===== Graphs for D1–D6 =====
G13 <- rbind(
H1 = c(0,0,1,0,0,0),
H2 = c(0,0,1,0,0,0),
H3 = c(0,0,0,1,0,0),
H4 = c(0,0,0,0,1,0),
H5 = c(0,0,0,0,0,1),
H6 = c(0,0,0,0,0,0)
); colnames(G13) <- rownames(G13) <- endpts
G4 <- rbind(
H1 = c(0,0,1,0,0,0),
H2 = c(0,0,0,1,0,0),
H3 = c(0,1,0,0,0,0),
H4 = c(0,0,0,0,1,0),
H5 = c(1,0,0,0,0,0),
H6 = c(0,0,0,0,0,0)
); colnames(G4) <- rownames(G4) <- endpts
G5 <- rbind(
H1 = c(0, 2/3, 1/3, 0, 0, 0),
H2 = c(0, 0, 1, 0, 0, 0),
H3 = c(0, 0, 0, 1, 0, 0),
H4 = c(0, 0, 0, 0, 1, 0),
H5 = c(0, 0, 0, 0, 0, 1),
H6 = c(1, 0, 0, 0, 0, 0)
); colnames(G5) <- rownames(G5) <- endpts
G6 <- rbind(
H1 = c(0,0,1,0,0,0),
H2 = c(0,0,0,1,0,0),
H3 = c(0,0,0,0,1,0),
H4 = c(1,0,0,0,0,0),
H5 = c(0,1,0,0,0,0),
H6 = c(0,0,0,0,0,0)
); colnames(G6) <- rownames(G6) <- endpts
## ===== Initial weights =====
w_D1 <- c(H1=1/2, H2=1/2, H3=0, H4=0, H5=0, H6=0)
w_D2 <- c(H1=4/5, H2=1/5, H3=0, H4=0, H5=0, H6=0)
w_D3 <- c(H1=2/3, H2=1/3, H3=0, H4=0, H5=0, H6=0)
w_D4 <- c(H1=1/2, H2=1/2, H3=0, H4=0, H5=0, H6=0)
w_D5 <- c(H1=4/5, H2=1/5, H3=0, H4=0, H5=0, H6=0)
w_D6 <- c(H1=4/5, H2=1/5, H3=0, H4=0, H5=0, H6=0)
## ===== Colors =====
cols <- c("D1"="#1f77b4","D2"="#ff7f0e","D3"="#2ca02c",
"D4"="#9467bd","D5"="#8c564b","D6"="#17becf")
## ===== Helpers =====
axis_limits <- function(mx) {
if (is.na(mx) || mx <= 0) return(c(0, 0.05))
top <- min(1.00, ceiling(mx / 0.05) * 0.05)
c(0, top)
}
breaks_for_limits <- function(ylim) seq(0, ylim[2], by = 0.05)
has_path_to_nonrejected <- function(start, rejected, G) {
q <- which(names(rejected)==start)
visited <- setNames(rep(FALSE, length(rejected)), names(rejected))
while (length(q)) {
i <- q[1]; q <- q[-1]
if (visited[i]) next
visited[i] <- TRUE
nbrs <- names(which(G[i,] > 0))
for (jname in nbrs) {
j <- which(names(rejected)==jname)
if (!rejected[j]) return(TRUE)
if (!visited[j]) q <- c(q, j)
}
}
FALSE
}
push_alpha_through_rejected <- function(a, rejected, G) {
repeat {
moved <- FALSE
for (i in seq_along(a)) {
if (rejected[i] && a[i] > 0) {
if (has_path_to_nonrejected(names(a)[i], rejected, G)) {
ai <- a[i]; a <- a + ai * G[i, ]; a[i] <- 0; moved <- TRUE
} else { a[i] <- 0; moved <- TRUE }
}
}
if (!moved) break
}
a
}
run_graph <- function(p, w, G, alpha_tot=0.05) {
stopifnot(abs(sum(w)-1) < 1e-12, identical(names(w), colnames(G)))
a <- alpha_tot * w
tested <- setNames(rep(FALSE, 6), names(w))
rejected <- setNames(rep(FALSE, 6), names(w))
tested[a > 0] <- TRUE
repeat {
can_reject <- (!rejected) & (p <= a)
if (!any(can_reject)) break
rej_nodes <- names(which(can_reject))
for (i in rej_nodes) {
ai <- a[i]
if (ai > 0) { a <- a + ai * G[i, ]; a[i] <- 0 }
rejected[i] <- TRUE
}
a <- push_alpha_through_rejected(a, rejected, G)
tested[a > 0] <- TRUE
}
list(tested=tested, rejected=rejected)
}
run_andgate_H6 <- function(p, w, G, alpha_tot=0.05) {
a <- alpha_tot * w
tested <- setNames(rep(FALSE, 6), names(w))
rejected <- setNames(rep(FALSE, 6), names(w))
tested[a > 0] <- TRUE
repeat {
can_reject <- (!rejected[1:5]) & (p[1:5] <= a[1:5])
if (!any(can_reject)) break
rej_nodes <- names(which(can_reject))
for (i in rej_nodes) {
ai <- a[i]
if (ai > 0) { a <- a + ai * G[i, ]; a[i] <- 0 }
rejected[i] <- TRUE
}
a <- push_alpha_through_rejected(a, rejected, G)
tested[a > 0] <- TRUE
}
if (all(rejected[1:5])) {
tested["H6"] <- TRUE
rejected["H6"] <- (p["H6"] <= 0.05)
}
list(tested=tested, rejected=rejected)
}
## ===== Data generation & p-values =====
gen_arm <- function(trt, n, Sigma, Delta, SD, pC) {
Z <- mvrnorm(n, mu=rep(0,6), Sigma=Sigma); colnames(Z) <- endpts
means <- setNames(rep(0,6), endpts)
if (trt==1) means[c("H1","H2","H4","H5","H6")] <- Delta[c("H1","H2","H4","H5","H6")]
dat <- data.frame(
kccq = means["H1"] + SD["H1"] * Z[,"H1"],
pvo2 = means["H2"] + SD["H2"] * Z[,"H2"],
zscore = means["H4"] + SD["H4"] * Z[,"H4"],
ntprob = means["H5"] + SD["H5"] * Z[,"H5"],
lavi = means["H6"] + SD["H6"] * Z[,"H6"],
trt = trt
)
p <- if (trt==1) pmin(pmax(pC + Delta["H3"], 1e-8), 1-1e-8) else pC
dat$imp <- as.integer(Z[,"H3"] <= qnorm(p))
dat
}
p_two_or_one <- function(tstat, sided=c("two","one"), delta_sign=1) {
sided <- match.arg(sided)
if (sided=="two") 2*pnorm(-abs(tstat)) else pnorm(-delta_sign*tstat)
}
pvals_from_data <- function(dt, Delta) {
pv <- setNames(rep(NA_real_,6), endpts)
pv["H1"] <- p_two_or_one(t.test(kccq ~ trt, data=dt, var.equal=FALSE)$statistic, sided=sided, delta_sign=sign(Delta["H1"]))
pv["H2"] <- p_two_or_one(t.test(pvo2 ~ trt, data=dt, var.equal=FALSE)$statistic, sided=sided, delta_sign=sign(Delta["H2"]))
pv["H3"] <- suppressWarnings(chisq.test(table(dt$trt, dt$imp), correct=FALSE)$p.value)
pv["H4"] <- p_two_or_one(t.test(zscore ~ trt, data=dt, var.equal=FALSE)$statistic, sided=sided, delta_sign=sign(Delta["H4"]))
pv["H5"] <- p_two_or_one(t.test(ntprob ~ trt, data=dt, var.equal=FALSE)$statistic, sided=sided, delta_sign=sign(Delta["H5"]))
pv["H6"] <- p_two_or_one(t.test(lavi ~ trt, data=dt, var.equal=FALSE)$statistic, sided=sided, delta_sign=sign(Delta["H6"]))
pv
}
## ===== Scenarios =====
H5_fix <- list(diff=-1.0, sd=1.0)
H6_fix <- list(diff=-3.5, sd=10.0)
scenarios <- list(
"Scenario 1" = list(H1=list(diff=5.00, sd=15), H2=list(diff=1.00, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 2" = list(H1=list(diff=5.00, sd=15), H2=list(diff=0.75, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 3" = list(H1=list(diff=5.00, sd=15), H2=list(diff=0.54, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 4" = list(H1=list(diff=5.00, sd=15), H2=list(diff=0.30, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 5" = list(H1=list(diff=3.75, sd=15), H2=list(diff=1.00, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 6" = list(H1=list(diff=3.75, sd=15), H2=list(diff=0.75, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 7" = list(H1=list(diff=3.75, sd=15), H2=list(diff=0.54, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 8" = list(H1=list(diff=3.75, sd=15), H2=list(diff=0.30, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 9" = list(H1=list(diff=2.70, sd=15), H2=list(diff=1.00, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 10" = list(H1=list(diff=2.70, sd=15), H2=list(diff=0.75, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 11" = list(H1=list(diff=2.70, sd=15), H2=list(diff=0.54, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 12" = list(H1=list(diff=2.70, sd=15), H2=list(diff=0.30, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 13" = list(H1=list(diff=1.50, sd=15), H2=list(diff=1.00, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 14" = list(H1=list(diff=1.50, sd=15), H2=list(diff=0.75, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 15" = list(H1=list(diff=1.50, sd=15), H2=list(diff=0.54, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix),
"Scenario 16" = list(H1=list(diff=1.50, sd=15), H2=list(diff=0.30, sd=3), H3=0.15, H4=list(diff=0.2, sd=1), H5=H5_fix, H6=H6_fix)
)
stopifnot(length(scenarios) == 16)
## ===== Simulation per scenario =====
simulate_designs_for_scenario <- function(sc) {
Delta <- c(H1=sc$H1$diff, H2=sc$H2$diff, H3=sc$H3, H4=sc$H4$diff, H5=sc$H5$diff, H6=sc$H6$diff)
SD <- c(H1=sc$H1$sd, H2=sc$H2$sd, H4=sc$H4$sd, H5=sc$H5$sd, H6=sc$H6$sd)
p_list <- vector("list", nsim)
for (b in seq_len(nsim)) {
trt <- gen_arm(1, n_per_arm, Sigma, Delta, SD, pC)
ctl <- gen_arm(0, n_per_arm, Sigma, Delta, SD, pC)
dt <- rbind(trt, ctl)
p_list[[b]] <- pvals_from_data(dt, Delta)
}
simulate_with_p <- function(label, w_init, Gmat, mode=c("generic","andgate")) {
mode <- match.arg(mode)
tested_acc <- matrix(0L, nsim, 6, dimnames=list(NULL,endpts))
reject_acc <- matrix(0L, nsim, 6, dimnames=list(NULL,endpts))
for (b in seq_len(nsim)) {
p <- p_list[[b]]
out <- if (mode=="andgate") run_andgate_H6(p, w_init, Gmat, alpha_tot)
else run_graph (p, w_init, Gmat, alpha_tot)
tested_acc[b, ] <- as.integer(out$tested)
reject_acc[b, ] <- as.integer(out$rejected)
}
tibble(endpoint=endpts,
prob_tested=colMeans(tested_acc),
power=colMeans(reject_acc),
design=label)
}
bind_rows(
simulate_with_p("D1", w_D1, G13, "generic"),
simulate_with_p("D2", w_D2, G13, "generic"),
simulate_with_p("D3", w_D3, G13, "generic"),
simulate_with_p("D4", w_D4, G4, "andgate"),
simulate_with_p("D5", w_D5, G5, "generic"),
simulate_with_p("D6", w_D6, G6, "andgate")
)
}
## ===== Output dir for CSVs =====
out_dir <- "C:/Users/admin/Downloads"
if (!dir.exists(out_dir)) dir.create(out_dir, recursive = TRUE)
## ===== Run all scenarios and plot (5% ticks) =====
for (sc_name in names(scenarios)) {
res <- simulate_designs_for_scenario(scenarios[[sc_name]])
## Probability of being tested: ONLY H3–H6
res_prob <- res %>%
filter(endpoint %in% paste0("H",3:6)) %>%
mutate(endpoint=factor(endpoint, levels=paste0("H",3:6)))
ylims_prob <- axis_limits(max(res_prob$prob_tested, na.rm=TRUE))
# SAVE dataframe used by the prob-tested bar plot
prob_file <- file.path(out_dir, paste0(gsub("\\s+","_", tolower(sc_name)), "_prob_tested.csv"))
write.csv(res_prob, prob_file, row.names = FALSE)
p_prob <- ggplot(res_prob, aes(endpoint, prob_tested, fill=design)) +
geom_col(position=position_dodge(width=0.82), width=0.72) +
labs(title=paste("Probability of Being Tested —", sc_name),
x="Endpoint", y="Probability tested") +
scale_y_continuous(limits=ylims_prob,
breaks = breaks_for_limits(ylims_prob),
labels = scales::percent_format(accuracy=1),
expand = expansion(mult=c(0,0))) +
theme_minimal(base_size=12) +
scale_fill_manual(values=cols)
print(p_prob)
## Power: H1–H6
res_power <- res %>% mutate(endpoint=fct_inorder(endpoint))
ylims_pow <- axis_limits(max(res_power$power, na.rm=TRUE))
# SAVE dataframe used by the power bar plot
power_file <- file.path(out_dir, paste0(gsub("\\s+","_", tolower(sc_name)), "_power.csv"))
write.csv(res_power, power_file, row.names = FALSE)
p_pow <- ggplot(res_power, aes(endpoint, power, fill=design)) +
geom_col(position=position_dodge(width=0.82), width=0.72) +
labs(title=paste("Power by Endpoint —", sc_name),
x="Endpoint", y="Power") +
scale_y_continuous(limits=ylims_pow,
breaks = breaks_for_limits(ylims_pow),
labels = scales::percent_format(accuracy=1),
expand = expansion(mult=c(0,0))) +
theme_minimal(base_size=12) +
scale_fill_manual(values=cols)
print(p_pow)
cat("\n===== ", sc_name, " — Table =====\n", sep = "")
print(res %>% arrange(endpoint, design), n = Inf)
}


##
## ===== Scenario 1 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.901 D1
## 2 H1 1 0.930 D2
## 3 H1 1 0.920 D3
## 4 H1 1 0.919 D4
## 5 H1 1 0.933 D5
## 6 H1 1 0.934 D6
## 7 H2 1 0.904 D1
## 8 H2 1 0.830 D2
## 9 H2 1 0.874 D3
## 10 H2 1 0.933 D4
## 11 H2 1 0.920 D5
## 12 H2 1 0.921 D6
## 13 H3 0.988 0.879 D1
## 14 H3 0.985 0.876 D2
## 15 H3 0.988 0.879 D3
## 16 H3 0.919 0.786 D4
## 17 H3 0.985 0.872 D5
## 18 H3 0.934 0.819 D6
## 19 H4 0.879 0.487 D1
## 20 H4 0.876 0.481 D2
## 21 H4 0.879 0.483 D3
## 22 H4 0.933 0.536 D4
## 23 H4 0.872 0.483 D5
## 24 H4 0.921 0.519 D6
## 25 H5 0.487 0.487 D1
## 26 H5 0.481 0.481 D2
## 27 H5 0.483 0.483 D3
## 28 H5 0.536 0.536 D4
## 29 H5 0.483 0.483 D5
## 30 H5 0.819 0.819 D6
## 31 H6 0.487 0.453 D1
## 32 H6 0.481 0.447 D2
## 33 H6 0.483 0.448 D3
## 34 H6 0.460 0.430 D4
## 35 H6 0.483 0.448 D5
## 36 H6 0.464 0.434 D6


##
## ===== Scenario 2 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.905 D1
## 2 H1 1 0.934 D2
## 3 H1 1 0.922 D3
## 4 H1 1 0.921 D4
## 5 H1 1 0.936 D5
## 6 H1 1 0.936 D6
## 7 H2 1 0.664 D1
## 8 H2 1 0.536 D2
## 9 H2 1 0.604 D3
## 10 H2 1 0.733 D4
## 11 H2 1 0.704 D5
## 12 H2 1 0.715 D6
## 13 H3 0.963 0.842 D1
## 14 H3 0.964 0.852 D2
## 15 H3 0.964 0.847 D3
## 16 H3 0.921 0.790 D4
## 17 H3 0.964 0.829 D5
## 18 H3 0.936 0.823 D6
## 19 H4 0.842 0.466 D1
## 20 H4 0.852 0.466 D2
## 21 H4 0.847 0.464 D3
## 22 H4 0.733 0.513 D4
## 23 H4 0.829 0.461 D5
## 24 H4 0.715 0.498 D6
## 25 H5 0.466 0.466 D1
## 26 H5 0.466 0.466 D2
## 27 H5 0.464 0.464 D3
## 28 H5 0.513 0.513 D4
## 29 H5 0.461 0.461 D5
## 30 H5 0.823 0.823 D6
## 31 H6 0.466 0.432 D1
## 32 H6 0.466 0.431 D2
## 33 H6 0.464 0.429 D3
## 34 H6 0.445 0.414 D4
## 35 H6 0.461 0.426 D5
## 36 H6 0.449 0.418 D6


##
## ===== Scenario 3 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.903 D1
## 2 H1 1 0.929 D2
## 3 H1 1 0.920 D3
## 4 H1 1 0.913 D4
## 5 H1 1 0.929 D5
## 6 H1 1 0.930 D6
## 7 H2 1 0.370 D1
## 8 H2 1 0.253 D2
## 9 H2 1 0.312 D3
## 10 H2 1 0.450 D4
## 11 H2 1 0.428 D5
## 12 H2 1 0.436 D6
## 13 H3 0.930 0.799 D1
## 14 H3 0.940 0.830 D2
## 15 H3 0.937 0.816 D3
## 16 H3 0.913 0.778 D4
## 17 H3 0.940 0.778 D5
## 18 H3 0.930 0.82 D6
## 19 H4 0.799 0.407 D1
## 20 H4 0.830 0.451 D2
## 21 H4 0.816 0.431 D3
## 22 H4 0.450 0.386 D4
## 23 H4 0.778 0.378 D5
## 24 H4 0.436 0.373 D6
## 25 H5 0.407 0.407 D1
## 26 H5 0.451 0.451 D2
## 27 H5 0.431 0.431 D3
## 28 H5 0.386 0.386 D4
## 29 H5 0.378 0.378 D5
## 30 H5 0.82 0.82 D6
## 31 H6 0.407 0.370 D1
## 32 H6 0.451 0.416 D2
## 33 H6 0.431 0.395 D3
## 34 H6 0.342 0.312 D4
## 35 H6 0.378 0.342 D5
## 36 H6 0.345 0.315 D6


##
## ===== Scenario 4 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.903 D1
## 2 H1 1 0.932 D2
## 3 H1 1 0.922 D3
## 4 H1 1 0.906 D4
## 5 H1 1 0.932 D5
## 6 H1 1 0.933 D6
## 7 H2 1 0.120 D1
## 8 H2 1 0.0647 D2
## 9 H2 1 0.0914 D3
## 10 H2 1 0.171 D4
## 11 H2 1 0.164 D5
## 12 H2 1 0.163 D6
## 13 H3 0.911 0.763 D1
## 14 H3 0.935 0.819 D2
## 15 H3 0.927 0.797 D3
## 16 H3 0.906 0.758 D4
## 17 H3 0.935 0.738 D5
## 18 H3 0.933 0.817 D6
## 19 H4 0.763 0.355 D1
## 20 H4 0.819 0.435 D2
## 21 H4 0.797 0.401 D3
## 22 H4 0.171 0.166 D4
## 23 H4 0.738 0.285 D5
## 24 H4 0.163 0.159 D6
## 25 H5 0.355 0.355 D1
## 26 H5 0.435 0.435 D2
## 27 H5 0.401 0.401 D3
## 28 H5 0.166 0.166 D4
## 29 H5 0.285 0.285 D5
## 30 H5 0.817 0.817 D6
## 31 H6 0.355 0.316 D1
## 32 H6 0.435 0.401 D2
## 33 H6 0.401 0.364 D3
## 34 H6 0.146 0.128 D4
## 35 H6 0.285 0.244 D5
## 36 H6 0.148 0.130 D6


##
## ===== Scenario 5 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.665 D1
## 2 H1 1 0.728 D2
## 3 H1 1 0.704 D3
## 4 H1 1 0.704 D4
## 5 H1 1 0.733 D5
## 6 H1 1 0.737 D6
## 7 H2 1 0.900 D1
## 8 H2 1 0.828 D2
## 9 H2 1 0.869 D3
## 10 H2 1 0.920 D4
## 11 H2 1 0.894 D5
## 12 H2 1 0.895 D6
## 13 H3 0.961 0.855 D1
## 14 H3 0.945 0.831 D2
## 15 H3 0.954 0.843 D3
## 16 H3 0.704 0.591 D4
## 17 H3 0.945 0.827 D5
## 18 H3 0.737 0.638 D6
## 19 H4 0.855 0.471 D1
## 20 H4 0.831 0.441 D2
## 21 H4 0.843 0.458 D3
## 22 H4 0.920 0.514 D4
## 23 H4 0.827 0.442 D5
## 24 H4 0.895 0.479 D6
## 25 H5 0.471 0.471 D1
## 26 H5 0.441 0.441 D2
## 27 H5 0.458 0.458 D3
## 28 H5 0.514 0.514 D4
## 29 H5 0.442 0.442 D5
## 30 H5 0.638 0.638 D6
## 31 H6 0.471 0.432 D1
## 32 H6 0.441 0.401 D2
## 33 H6 0.458 0.419 D3
## 34 H6 0.370 0.342 D4
## 35 H6 0.442 0.402 D5
## 36 H6 0.377 0.350 D6


##
## ===== Scenario 6 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.660 D1
## 2 H1 1 0.723 D2
## 3 H1 1 0.699 D3
## 4 H1 1 0.699 D4
## 5 H1 1 0.728 D5
## 6 H1 1 0.731 D6
## 7 H2 1 0.661 D1
## 8 H2 1 0.522 D2
## 9 H2 1 0.596 D3
## 10 H2 1 0.711 D4
## 11 H2 1 0.659 D5
## 12 H2 1 0.667 D6
## 13 H3 0.866 0.751 D1
## 14 H3 0.849 0.737 D2
## 15 H3 0.859 0.745 D3
## 16 H3 0.699 0.584 D4
## 17 H3 0.849 0.718 D5
## 18 H3 0.731 0.627 D6
## 19 H4 0.751 0.435 D1
## 20 H4 0.737 0.414 D2
## 21 H4 0.745 0.424 D3
## 22 H4 0.711 0.489 D4
## 23 H4 0.718 0.406 D5
## 24 H4 0.667 0.450 D6
## 25 H5 0.435 0.435 D1
## 26 H5 0.414 0.414 D2
## 27 H5 0.424 0.424 D3
## 28 H5 0.489 0.489 D4
## 29 H5 0.406 0.406 D5
## 30 H5 0.627 0.627 D6
## 31 H6 0.435 0.399 D1
## 32 H6 0.414 0.375 D2
## 33 H6 0.424 0.385 D3
## 34 H6 0.352 0.327 D4
## 35 H6 0.406 0.368 D5
## 36 H6 0.355 0.331 D6


##
## ===== Scenario 7 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.662 D1
## 2 H1 1 0.726 D2
## 3 H1 1 0.702 D3
## 4 H1 1 0.690 D4
## 5 H1 1 0.729 D5
## 6 H1 1 0.731 D6
## 7 H2 1 0.373 D1
## 8 H2 1 0.257 D2
## 9 H2 1 0.317 D3
## 10 H2 1 0.427 D4
## 11 H2 1 0.390 D5
## 12 H2 1 0.392 D6
## 13 H3 0.776 0.656 D1
## 14 H3 0.786 0.679 D2
## 15 H3 0.785 0.670 D3
## 16 H3 0.690 0.573 D4
## 17 H3 0.786 0.635 D5
## 18 H3 0.731 0.631 D6
## 19 H4 0.656 0.364 D1
## 20 H4 0.679 0.381 D2
## 21 H4 0.670 0.371 D3
## 22 H4 0.427 0.363 D4
## 23 H4 0.635 0.328 D5
## 24 H4 0.392 0.332 D6
## 25 H5 0.364 0.364 D1
## 26 H5 0.381 0.381 D2
## 27 H5 0.371 0.371 D3
## 28 H5 0.363 0.363 D4
## 29 H5 0.328 0.328 D5
## 30 H5 0.631 0.631 D6
## 31 H6 0.364 0.328 D1
## 32 H6 0.381 0.345 D2
## 33 H6 0.371 0.336 D3
## 34 H6 0.266 0.244 D4
## 35 H6 0.328 0.291 D5
## 36 H6 0.272 0.249 D6


##
## ===== Scenario 8 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.653 D1
## 2 H1 1 0.721 D2
## 3 H1 1 0.696 D3
## 4 H1 1 0.664 D4
## 5 H1 1 0.721 D5
## 6 H1 1 0.722 D6
## 7 H2 1 0.120 D1
## 8 H2 1 0.0662 D2
## 9 H2 1 0.0949 D3
## 10 H2 1 0.155 D4
## 11 H2 1 0.141 D5
## 12 H2 1 0.140 D6
## 13 H3 0.687 0.558 D1
## 14 H3 0.733 0.628 D2
## 15 H3 0.718 0.599 D3
## 16 H3 0.664 0.536 D4
## 17 H3 0.733 0.556 D5
## 18 H3 0.722 0.618 D6
## 19 H4 0.558 0.280 D1
## 20 H4 0.628 0.344 D2
## 21 H4 0.599 0.318 D3
## 22 H4 0.155 0.149 D4
## 23 H4 0.556 0.234 D5
## 24 H4 0.140 0.136 D6
## 25 H5 0.280 0.280 D1
## 26 H5 0.344 0.344 D2
## 27 H5 0.318 0.318 D3
## 28 H5 0.149 0.149 D4
## 29 H5 0.234 0.234 D5
## 30 H5 0.618 0.618 D6
## 31 H6 0.280 0.247 D1
## 32 H6 0.344 0.315 D2
## 33 H6 0.318 0.284 D3
## 34 H6 0.114 0.0995 D4
## 35 H6 0.234 0.197 D5
## 36 H6 0.117 0.103 D6


##
## ===== Scenario 9 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.372 D1
## 2 H1 1 0.444 D2
## 3 H1 1 0.416 D3
## 4 H1 1 0.420 D4
## 5 H1 1 0.450 D5
## 6 H1 1 0.456 D6
## 7 H2 1 0.902 D1
## 8 H2 1 0.829 D2
## 9 H2 1 0.872 D3
## 10 H2 1 0.911 D4
## 11 H2 1 0.866 D5
## 12 H2 1 0.865 D6
## 13 H3 0.932 0.806 D1
## 14 H3 0.895 0.745 D2
## 15 H3 0.918 0.783 D3
## 16 H3 0.420 0.332 D4
## 17 H3 0.895 0.742 D5
## 18 H3 0.456 0.372 D6
## 19 H4 0.806 0.413 D1
## 20 H4 0.745 0.348 D2
## 21 H4 0.783 0.382 D3
## 22 H4 0.911 0.470 D4
## 23 H4 0.742 0.349 D5
## 24 H4 0.865 0.401 D6
## 25 H5 0.413 0.413 D1
## 26 H5 0.348 0.348 D2
## 27 H5 0.382 0.382 D3
## 28 H5 0.470 0.470 D4
## 29 H5 0.349 0.349 D5
## 30 H5 0.372 0.372 D6
## 31 H6 0.413 0.370 D1
## 32 H6 0.348 0.302 D2
## 33 H6 0.382 0.337 D3
## 34 H6 0.222 0.204 D4
## 35 H6 0.349 0.302 D5
## 36 H6 0.226 0.208 D6


##
## ===== Scenario 10 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.372 D1
## 2 H1 1 0.441 D2
## 3 H1 1 0.413 D3
## 4 H1 1 0.419 D4
## 5 H1 1 0.447 D5
## 6 H1 1 0.453 D6
## 7 H2 1 0.654 D1
## 8 H2 1 0.526 D2
## 9 H2 1 0.596 D3
## 10 H2 1 0.681 D4
## 11 H2 1 0.604 D5
## 12 H2 1 0.603 D6
## 13 H3 0.772 0.654 D1
## 14 H3 0.718 0.591 D2
## 15 H3 0.748 0.624 D3
## 16 H3 0.419 0.327 D4
## 17 H3 0.718 0.577 D5
## 18 H3 0.453 0.369 D6
## 19 H4 0.654 0.392 D1
## 20 H4 0.591 0.328 D2
## 21 H4 0.624 0.359 D3
## 22 H4 0.681 0.450 D4
## 23 H4 0.577 0.325 D5
## 24 H4 0.603 0.380 D6
## 25 H5 0.392 0.392 D1
## 26 H5 0.328 0.328 D2
## 27 H5 0.359 0.359 D3
## 28 H5 0.450 0.450 D4
## 29 H5 0.325 0.325 D5
## 30 H5 0.369 0.369 D6
## 31 H6 0.392 0.350 D1
## 32 H6 0.328 0.283 D2
## 33 H6 0.359 0.315 D3
## 34 H6 0.208 0.192 D4
## 35 H6 0.325 0.280 D5
## 36 H6 0.213 0.197 D6


##
## ===== Scenario 11 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.369 D1
## 2 H1 1 0.441 D2
## 3 H1 1 0.413 D3
## 4 H1 1 0.404 D4
## 5 H1 1 0.446 D5
## 6 H1 1 0.451 D6
## 7 H2 1 0.363 D1
## 8 H2 1 0.252 D2
## 9 H2 1 0.313 D3
## 10 H2 1 0.394 D4
## 11 H2 1 0.338 D5
## 12 H2 1 0.335 D6
## 13 H3 0.587 0.477 D1
## 14 H3 0.575 0.47 D2
## 15 H3 0.589 0.479 D3
## 16 H3 0.404 0.314 D4
## 17 H3 0.575 0.440 D5
## 18 H3 0.451 0.368 D6
## 19 H4 0.477 0.307 D1
## 20 H4 0.47 0.285 D2
## 21 H4 0.479 0.296 D3
## 22 H4 0.394 0.331 D4
## 23 H4 0.440 0.253 D5
## 24 H4 0.335 0.276 D6
## 25 H5 0.307 0.307 D1
## 26 H5 0.285 0.285 D2
## 27 H5 0.296 0.296 D3
## 28 H5 0.331 0.331 D4
## 29 H5 0.253 0.253 D5
## 30 H5 0.368 0.368 D6
## 31 H6 0.307 0.270 D1
## 32 H6 0.285 0.244 D2
## 33 H6 0.296 0.256 D3
## 34 H6 0.162 0.148 D4
## 35 H6 0.253 0.212 D5
## 36 H6 0.167 0.153 D6


##
## ===== Scenario 12 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.376 D1
## 2 H1 1 0.451 D2
## 3 H1 1 0.420 D3
## 4 H1 1 0.387 D4
## 5 H1 1 0.453 D5
## 6 H1 1 0.454 D6
## 7 H2 1 0.122 D1
## 8 H2 1 0.0695 D2
## 9 H2 1 0.0941 D3
## 10 H2 1 0.140 D4
## 11 H2 1 0.118 D5
## 12 H2 1 0.116 D6
## 13 H3 0.442 0.338 D1
## 14 H3 0.486 0.394 D2
## 15 H3 0.467 0.368 D3
## 16 H3 0.387 0.290 D4
## 17 H3 0.486 0.342 D5
## 18 H3 0.454 0.368 D6
## 19 H4 0.338 0.195 D1
## 20 H4 0.394 0.228 D2
## 21 H4 0.368 0.212 D3
## 22 H4 0.140 0.135 D4
## 23 H4 0.342 0.159 D5
## 24 H4 0.116 0.112 D6
## 25 H5 0.195 0.195 D1
## 26 H5 0.228 0.228 D2
## 27 H5 0.212 0.212 D3
## 28 H5 0.135 0.135 D4
## 29 H5 0.159 0.159 D5
## 30 H5 0.368 0.368 D6
## 31 H6 0.195 0.165 D1
## 32 H6 0.228 0.198 D2
## 33 H6 0.212 0.180 D3
## 34 H6 0.0715 0.0608 D4
## 35 H6 0.159 0.125 D5
## 36 H6 0.075 0.064 D6


##
## ===== Scenario 13 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.117 D1
## 2 H1 1 0.157 D2
## 3 H1 1 0.139 D3
## 4 H1 1 0.150 D4
## 5 H1 1 0.162 D5
## 6 H1 1 0.167 D6
## 7 H2 1 0.903 D1
## 8 H2 1 0.830 D2
## 9 H2 1 0.872 D3
## 10 H2 1 0.906 D4
## 11 H2 1 0.843 D5
## 12 H2 1 0.842 D6
## 13 H3 0.911 0.774 D1
## 14 H3 0.851 0.664 D2
## 15 H3 0.886 0.726 D3
## 16 H3 0.150 0.110 D4
## 17 H3 0.851 0.663 D5
## 18 H3 0.167 0.126 D6
## 19 H4 0.774 0.392 D1
## 20 H4 0.664 0.278 D2
## 21 H4 0.726 0.337 D3
## 22 H4 0.906 0.468 D4
## 23 H4 0.663 0.278 D5
## 24 H4 0.842 0.354 D6
## 25 H5 0.392 0.392 D1
## 26 H5 0.278 0.278 D2
## 27 H5 0.337 0.337 D3
## 28 H5 0.468 0.468 D4
## 29 H5 0.278 0.278 D5
## 30 H5 0.126 0.126 D6
## 31 H6 0.392 0.346 D1
## 32 H6 0.278 0.223 D2
## 33 H6 0.337 0.285 D3
## 34 H6 0.0802 0.0745 D4
## 35 H6 0.278 0.223 D5
## 36 H6 0.08 0.0743 D6


##
## ===== Scenario 14 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.123 D1
## 2 H1 1 0.167 D2
## 3 H1 1 0.149 D3
## 4 H1 1 0.156 D4
## 5 H1 1 0.170 D5
## 6 H1 1 0.176 D6
## 7 H2 1 0.662 D1
## 8 H2 1 0.529 D2
## 9 H2 1 0.604 D3
## 10 H2 1 0.670 D4
## 11 H2 1 0.561 D5
## 12 H2 1 0.558 D6
## 13 H3 0.695 0.578 D1
## 14 H3 0.598 0.455 D2
## 15 H3 0.654 0.522 D3
## 16 H3 0.156 0.111 D4
## 17 H3 0.598 0.451 D5
## 18 H3 0.176 0.131 D6
## 19 H4 0.578 0.363 D1
## 20 H4 0.455 0.259 D2
## 21 H4 0.522 0.308 D3
## 22 H4 0.670 0.434 D4
## 23 H4 0.451 0.258 D5
## 24 H4 0.558 0.328 D6
## 25 H5 0.363 0.363 D1
## 26 H5 0.259 0.259 D2
## 27 H5 0.308 0.308 D3
## 28 H5 0.434 0.434 D4
## 29 H5 0.258 0.258 D5
## 30 H5 0.131 0.131 D6
## 31 H6 0.363 0.32 D1
## 32 H6 0.259 0.207 D2
## 33 H6 0.308 0.260 D3
## 34 H6 0.0789 0.0721 D4
## 35 H6 0.258 0.206 D5
## 36 H6 0.0809 0.0741 D6


##
## ===== Scenario 15 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.119 D1
## 2 H1 1 0.159 D2
## 3 H1 1 0.142 D3
## 4 H1 1 0.141 D4
## 5 H1 1 0.161 D5
## 6 H1 1 0.164 D6
## 7 H2 1 0.366 D1
## 8 H2 1 0.251 D2
## 9 H2 1 0.312 D3
## 10 H2 1 0.377 D4
## 11 H2 1 0.283 D5
## 12 H2 1 0.281 D6
## 13 H3 0.436 0.350 D1
## 14 H3 0.363 0.275 D2
## 15 H3 0.402 0.312 D3
## 16 H3 0.141 0.0957 D4
## 17 H3 0.363 0.262 D5
## 18 H3 0.164 0.122 D6
## 19 H4 0.350 0.270 D1
## 20 H4 0.275 0.194 D2
## 21 H4 0.312 0.232 D3
## 22 H4 0.377 0.315 D4
## 23 H4 0.262 0.184 D5
## 24 H4 0.281 0.229 D6
## 25 H5 0.270 0.270 D1
## 26 H5 0.194 0.194 D2
## 27 H5 0.232 0.232 D3
## 28 H5 0.315 0.315 D4
## 29 H5 0.184 0.184 D5
## 30 H5 0.122 0.122 D6
## 31 H6 0.270 0.232 D1
## 32 H6 0.194 0.151 D2
## 33 H6 0.232 0.190 D3
## 34 H6 0.0585 0.0537 D4
## 35 H6 0.184 0.141 D5
## 36 H6 0.0627 0.0577 D6


##
## ===== Scenario 16 — Table =====
## # A tibble: 36 × 4
## endpoint prob_tested power design
## <chr> <dbl> <dbl> <chr>
## 1 H1 1 0.114 D1
## 2 H1 1 0.157 D2
## 3 H1 1 0.138 D3
## 4 H1 1 0.120 D4
## 5 H1 1 0.158 D5
## 6 H1 1 0.158 D6
## 7 H2 1 0.120 D1
## 8 H2 1 0.0653 D2
## 9 H2 1 0.0929 D3
## 10 H2 1 0.125 D4
## 11 H2 1 0.0823 D5
## 12 H2 1 0.0792 D6
## 13 H3 0.216 0.156 D1
## 14 H3 0.208 0.151 D2
## 15 H3 0.214 0.153 D3
## 16 H3 0.120 0.0772 D4
## 17 H3 0.208 0.132 D5
## 18 H3 0.158 0.114 D6
## 19 H4 0.156 0.118 D1
## 20 H4 0.151 0.102 D2
## 21 H4 0.153 0.108 D3
## 22 H4 0.125 0.119 D4
## 23 H4 0.132 0.0787 D5
## 24 H4 0.0792 0.076 D6
## 25 H5 0.118 0.118 D1
## 26 H5 0.102 0.102 D2
## 27 H5 0.108 0.108 D3
## 28 H5 0.119 0.119 D4
## 29 H5 0.0787 0.0787 D5
## 30 H5 0.114 0.114 D6
## 31 H6 0.118 0.0956 D1
## 32 H6 0.102 0.0806 D2
## 33 H6 0.108 0.085 D3
## 34 H6 0.0226 0.0192 D4
## 35 H6 0.0787 0.0564 D5
## 36 H6 0.0246 0.0211 D6