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, D5, D6, D7 =====
# D1 (G13)
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

# D5 (G5)
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

# D6 (G6)
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

# D7 (G7): like D5 but remove H6 from recycling; recycle when H5 rejects within H1–H5;
# H6 is tested at alpha=0.05 only if H1–H5 all reject (AND-gate).
G7 <- 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(1, 0,   0,   0, 0, 0),  # recycle to H1; no flow to H6
  H6 = c(0, 0,   0,   0, 0, 0)
); colnames(G7) <- rownames(G7) <- endpts

## ===== Initial weights (D4 removed) =====
w_D1 <- 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)
w_D7 <- c(H1=4/5, H2=1/5, H3=0, H4=0, H5=0, H6=0)

## ===== Colors (D1, D5, D6, D7) =====
cols <- c("D1"="#1f77b4","D5"="#8c564b","D6"="#17becf","D7"="#e377c2")

## ===== Helpers (dynamic 25/50/75/100 top, ticks every 5%) =====
axis_cap_25_50_75 <- function(mx) {
  if (is.na(mx) || mx <= 0) return(0.25)
  if (mx <= 0.25) return(0.25)
  if (mx <= 0.50) return(0.50)
  if (mx <= 0.75) return(0.75)
  1.00
}
axis_breaks_5pct <- function(top) seq(0, top, by = 0.05)

## ===== Alpha flow helpers =====
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)
}

## AND-gate for H6 only (used by D6 & D7)
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 (Scenario 1 added back) =====
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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, 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.2, H4=list(diff=0.25, sd=1), H5=H5_fix, H6=H6_fix)
)
stopifnot(length(scenarios) >= 1)

## ===== Title helper: show ONLY diffs for H1–H4 =====
mk_title <- function(name, sc) {
  paste0(
    name, " — H1=", sc$H1$diff, "; ",
    "H2=", sc$H2$diff, "; ",
    "H3=", sc$H3, "; ",
    "H4=", sc$H4$diff
  )
}

## ===== Simulation per scenario (D4 removed; include D7; add H1_or_H2) =====
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))
    h1_rej <- logical(nsim); h2_rej <- logical(nsim)

    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)
      h1_rej[b] <- out$rejected["H1"]
      h2_rej[b] <- out$rejected["H2"]
    }

    res_endpt <- tibble(endpoint=endpts,
                        prob_tested=colMeans(tested_acc),
                        power=colMeans(reject_acc),
                        design=label)

    res_comb  <- tibble(endpoint="H1_or_H2",
                        prob_tested=NA_real_,
                        power=mean(h1_rej | h2_rej),
                        design=label)

    bind_rows(res_endpt, res_comb)
  }

  bind_rows(
    simulate_with_p("D1", w_D1, G13, "generic"),
    simulate_with_p("D5", w_D5, G5,  "generic"),
    simulate_with_p("D6", w_D6, G6,  "andgate"),
    simulate_with_p("D7", w_D7, G7,  "andgate")
  )
}

## ===== Run all scenarios and plot (no saving; titles show only diffs) =====
for (sc_name in names(scenarios)) {
  sc  <- scenarios[[sc_name]]
  res <- simulate_designs_for_scenario(sc)

  ## 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)))

  top_prob <- axis_cap_25_50_75(max(res_prob$prob_tested, na.rm = TRUE))

  p_prob <- ggplot(res_prob, aes(endpoint, prob_tested, fill=design)) +
    geom_col(position=position_dodge(width=0.82), width=0.72) +
    labs(
      title = mk_title(sc_name, sc),
      subtitle = "Probability of being tested (H3–H6)",
      x="Endpoint", y="Probability tested"
    ) +
    scale_y_continuous(limits = c(0, top_prob),
                       breaks = axis_breaks_5pct(top_prob),
                       labels = percent_format(accuracy=1),
                       expand = expansion(mult=c(0,0))) +
    theme_minimal(base_size=12) +
    scale_fill_manual(values=cols) +
    theme(plot.title = element_text(face="bold", size=14))
  print(p_prob)

  ## Power: include H1_or_H2 + H1–H6
  res_power <- res %>%
    mutate(endpoint=factor(endpoint, levels=c("H1_or_H2", paste0("H",1:6))))

  top_power <- axis_cap_25_50_75(max(res_power$power, na.rm = TRUE))

  p_pow <- ggplot(res_power, aes(endpoint, power, fill=design)) +
    geom_col(position=position_dodge(width=0.82), width=0.72) +
    labs(
      title = mk_title(sc_name, sc),
      x="Endpoint", y="Power"
    ) +
    scale_y_continuous(limits = c(0, top_power),
                       breaks = axis_breaks_5pct(top_power),
                       labels = percent_format(accuracy=1),
                       expand = expansion(mult=c(0,0))) +
    theme_minimal(base_size=12) +
    scale_fill_manual(values=cols) +
    theme(plot.title = element_text(face="bold", size=14))
  print(p_pow)

  cat("\n===== ", sc_name, " — Table =====\n", sep = "")
  print(res %>% arrange(match(endpoint, c("H1_or_H2", paste0("H",1:6))), design), n = Inf)
}

## 
## ===== Scenario 1 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.988 D1    
##  2 H1_or_H2      NA     0.985 D5    
##  3 H1_or_H2      NA     0.985 D6    
##  4 H1_or_H2      NA     0.985 D7    
##  5 H1             1     0.901 D1    
##  6 H1             1     0.935 D5    
##  7 H1             1     0.936 D6    
##  8 H1             1     0.936 D7    
##  9 H2             1     0.904 D1    
## 10 H2             1     0.921 D5    
## 11 H2             1     0.933 D6    
## 12 H2             1     0.921 D7    
## 13 H3             0.988 0.980 D1    
## 14 H3             0.985 0.977 D5    
## 15 H3             0.936 0.927 D6    
## 16 H3             0.985 0.977 D7    
## 17 H4             0.980 0.733 D1    
## 18 H4             0.977 0.729 D5    
## 19 H4             0.933 0.733 D6    
## 20 H4             0.977 0.729 D7    
## 21 H5             0.733 0.733 D1    
## 22 H5             0.729 0.729 D5    
## 23 H5             0.927 0.927 D6    
## 24 H5             0.729 0.729 D7    
## 25 H6             0.733 0.692 D1    
## 26 H6             0.729 0.686 D5    
## 27 H6             0.702 0.665 D6    
## 28 H6             0.701 0.664 D7

## 
## ===== Scenario 2 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.963 D1    
##  2 H1_or_H2      NA     0.964 D5    
##  3 H1_or_H2      NA     0.964 D6    
##  4 H1_or_H2      NA     0.964 D7    
##  5 H1             1     0.905 D1    
##  6 H1             1     0.937 D5    
##  7 H1             1     0.938 D6    
##  8 H1             1     0.938 D7    
##  9 H2             1     0.664 D1    
## 10 H2             1     0.712 D5    
## 11 H2             1     0.737 D6    
## 12 H2             1     0.713 D7    
## 13 H3             0.963 0.953 D1    
## 14 H3             0.964 0.952 D5    
## 15 H3             0.938 0.929 D6    
## 16 H3             0.964 0.952 D7    
## 17 H4             0.953 0.687 D1    
## 18 H4             0.952 0.666 D5    
## 19 H4             0.737 0.657 D6    
## 20 H4             0.952 0.666 D7    
## 21 H5             0.687 0.687 D1    
## 22 H5             0.666 0.666 D5    
## 23 H5             0.929 0.929 D6    
## 24 H5             0.666 0.666 D7    
## 25 H6             0.687 0.644 D1    
## 26 H6             0.666 0.621 D5    
## 27 H6             0.634 0.595 D6    
## 28 H6             0.622 0.584 D7

## 
## ===== Scenario 3 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.930 D1    
##  2 H1_or_H2      NA     0.940 D5    
##  3 H1_or_H2      NA     0.940 D6    
##  4 H1_or_H2      NA     0.940 D7    
##  5 H1             1     0.903 D1    
##  6 H1             1     0.930 D5    
##  7 H1             1     0.930 D6    
##  8 H1             1     0.930 D7    
##  9 H2             1     0.370 D1    
## 10 H2             1     0.444 D5    
## 11 H2             1     0.460 D6    
## 12 H2             1     0.447 D7    
## 13 H3             0.930 0.918 D1    
## 14 H3             0.940 0.922 D5    
## 15 H3             0.930 0.922 D6    
## 16 H3             0.940 0.922 D7    
## 17 H4             0.918 0.628 D1    
## 18 H4             0.922 0.576 D5    
## 19 H4             0.460 0.447 D6    
## 20 H4             0.922 0.576 D7    
## 21 H5             0.628 0.628 D1    
## 22 H5             0.576 0.576 D5    
## 23 H5             0.922 0.922 D6    
## 24 H5             0.576 0.576 D7    
## 25 H6             0.628 0.582 D1    
## 26 H6             0.576 0.528 D5    
## 27 H6             0.436 0.401 D6    
## 28 H6             0.425 0.391 D7

## 
## ===== Scenario 4 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.911 D1    
##  2 H1_or_H2      NA     0.935 D5    
##  3 H1_or_H2      NA     0.935 D6    
##  4 H1_or_H2      NA     0.935 D7    
##  5 H1             1     0.903 D1    
##  6 H1             1     0.933 D5    
##  7 H1             1     0.933 D6    
##  8 H1             1     0.933 D7    
##  9 H2             1     0.120 D1    
## 10 H2             1     0.172 D5    
## 11 H2             1     0.178 D6    
## 12 H2             1     0.178 D7    
## 13 H3             0.911 0.895 D1    
## 14 H3             0.935 0.911 D5    
## 15 H3             0.933 0.922 D6    
## 16 H3             0.935 0.911 D7    
## 17 H4             0.895 0.608 D1    
## 18 H4             0.911 0.530 D5    
## 19 H4             0.178 0.176 D6    
## 20 H4             0.911 0.530 D7    
## 21 H5             0.608 0.608 D1    
## 22 H5             0.530 0.530 D5    
## 23 H5             0.922 0.922 D6    
## 24 H5             0.530 0.530 D7    
## 25 H6             0.608 0.556 D1    
## 26 H6             0.530 0.465 D5    
## 27 H6             0.174 0.153 D6    
## 28 H6             0.172 0.152 D7

## 
## ===== Scenario 5 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.961 D1    
##  2 H1_or_H2      NA     0.945 D5    
##  3 H1_or_H2      NA     0.945 D6    
##  4 H1_or_H2      NA     0.945 D7    
##  5 H1             1     0.665 D1    
##  6 H1             1     0.739 D5    
##  7 H1             1     0.741 D6    
##  8 H1             1     0.741 D7    
##  9 H2             1     0.900 D1    
## 10 H2             1     0.894 D5    
## 11 H2             1     0.905 D6    
## 12 H2             1     0.894 D7    
## 13 H3             0.961 0.950 D1    
## 14 H3             0.945 0.934 D5    
## 15 H3             0.741 0.732 D6    
## 16 H3             0.945 0.934 D7    
## 17 H4             0.950 0.709 D1    
## 18 H4             0.934 0.683 D5    
## 19 H4             0.905 0.690 D6    
## 20 H4             0.934 0.683 D7    
## 21 H5             0.709 0.709 D1    
## 22 H5             0.683 0.683 D5    
## 23 H5             0.732 0.732 D6    
## 24 H5             0.683 0.683 D7    
## 25 H6             0.709 0.662 D1    
## 26 H6             0.683 0.631 D5    
## 27 H6             0.565 0.533 D6    
## 28 H6             0.564 0.531 D7

## 
## ===== Scenario 6 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.866 D1    
##  2 H1_or_H2      NA     0.849 D5    
##  3 H1_or_H2      NA     0.849 D6    
##  4 H1_or_H2      NA     0.849 D7    
##  5 H1             1     0.660 D1    
##  6 H1             1     0.732 D5    
##  7 H1             1     0.735 D6    
##  8 H1             1     0.735 D7    
##  9 H2             1     0.661 D1    
## 10 H2             1     0.666 D5    
## 11 H2             1     0.687 D6    
## 12 H2             1     0.666 D7    
## 13 H3             0.866 0.855 D1    
## 14 H3             0.849 0.836 D5    
## 15 H3             0.735 0.725 D6    
## 16 H3             0.849 0.836 D7    
## 17 H4             0.855 0.650 D1    
## 18 H4             0.836 0.606 D5    
## 19 H4             0.687 0.602 D6    
## 20 H4             0.836 0.606 D7    
## 21 H5             0.650 0.650 D1    
## 22 H5             0.606 0.606 D5    
## 23 H5             0.725 0.725 D6    
## 24 H5             0.606 0.606 D7    
## 25 H6             0.650 0.605 D1    
## 26 H6             0.606 0.554 D5    
## 27 H6             0.511 0.480 D6    
## 28 H6             0.501 0.470 D7

## 
## ===== Scenario 7 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.776 D1    
##  2 H1_or_H2      NA     0.786 D5    
##  3 H1_or_H2      NA     0.786 D6    
##  4 H1_or_H2      NA     0.786 D7    
##  5 H1             1     0.662 D1    
##  6 H1             1     0.731 D5    
##  7 H1             1     0.732 D6    
##  8 H1             1     0.732 D7    
##  9 H2             1     0.373 D1    
## 10 H2             1     0.402 D5    
## 11 H2             1     0.414 D6    
## 12 H2             1     0.404 D7    
## 13 H3             0.776 0.761 D1    
## 14 H3             0.786 0.766 D5    
## 15 H3             0.732 0.721 D6    
## 16 H3             0.786 0.766 D7    
## 17 H4             0.761 0.550 D1    
## 18 H4             0.766 0.495 D5    
## 19 H4             0.414 0.398 D6    
## 20 H4             0.766 0.495 D7    
## 21 H5             0.550 0.550 D1    
## 22 H5             0.495 0.495 D5    
## 23 H5             0.721 0.721 D6    
## 24 H5             0.495 0.495 D7    
## 25 H6             0.550 0.504 D1    
## 26 H6             0.495 0.445 D5    
## 27 H6             0.347 0.320 D6    
## 28 H6             0.339 0.312 D7

## 
## ===== Scenario 8 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.687 D1    
##  2 H1_or_H2      NA     0.733 D5    
##  3 H1_or_H2      NA     0.733 D6    
##  4 H1_or_H2      NA     0.733 D7    
##  5 H1             1     0.653 D1    
##  6 H1             1     0.721 D5    
##  7 H1             1     0.722 D6    
##  8 H1             1     0.722 D7    
##  9 H2             1     0.120 D1    
## 10 H2             1     0.148 D5    
## 11 H2             1     0.154 D6    
## 12 H2             1     0.153 D7    
## 13 H3             0.687 0.675 D1    
## 14 H3             0.733 0.714 D5    
## 15 H3             0.722 0.715 D6    
## 16 H3             0.733 0.714 D7    
## 17 H4             0.675 0.460 D1    
## 18 H4             0.714 0.425 D5    
## 19 H4             0.154 0.153 D6    
## 20 H4             0.714 0.425 D7    
## 21 H5             0.460 0.460 D1    
## 22 H5             0.425 0.425 D5    
## 23 H5             0.715 0.715 D6    
## 24 H5             0.425 0.425 D7    
## 25 H6             0.460 0.412 D1    
## 26 H6             0.425 0.365 D5    
## 27 H6             0.141 0.122 D6    
## 28 H6             0.140 0.120 D7

## 
## ===== Scenario 9 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.932 D1    
##  2 H1_or_H2      NA     0.895 D5    
##  3 H1_or_H2      NA     0.895 D6    
##  4 H1_or_H2      NA     0.895 D7    
##  5 H1             1     0.372 D1    
##  6 H1             1     0.458 D5    
##  7 H1             1     0.463 D6    
##  8 H1             1     0.463 D7    
##  9 H2             1     0.902 D1    
## 10 H2             1     0.867 D5    
## 11 H2             1     0.871 D6    
## 12 H2             1     0.867 D7    
## 13 H3             0.932 0.920 D1    
## 14 H3             0.895 0.880 D5    
## 15 H3             0.463 0.454 D6    
## 16 H3             0.895 0.880 D7    
## 17 H4             0.920 0.668 D1    
## 18 H4             0.880 0.599 D5    
## 19 H4             0.871 0.608 D6    
## 20 H4             0.880 0.599 D7    
## 21 H5             0.668 0.668 D1    
## 22 H5             0.599 0.599 D5    
## 23 H5             0.454 0.454 D6    
## 24 H5             0.599 0.599 D7    
## 25 H6             0.668 0.612 D1    
## 26 H6             0.599 0.529 D5    
## 27 H6             0.360 0.336 D6    
## 28 H6             0.359 0.335 D7

## 
## ===== Scenario 10 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.772 D1    
##  2 H1_or_H2      NA     0.718 D5    
##  3 H1_or_H2      NA     0.718 D6    
##  4 H1_or_H2      NA     0.718 D7    
##  5 H1             1     0.372 D1    
##  6 H1             1     0.453 D5    
##  7 H1             1     0.458 D6    
##  8 H1             1     0.458 D7    
##  9 H2             1     0.654 D1    
## 10 H2             1     0.608 D5    
## 11 H2             1     0.621 D6    
## 12 H2             1     0.608 D7    
## 13 H3             0.772 0.763 D1    
## 14 H3             0.718 0.705 D5    
## 15 H3             0.458 0.451 D6    
## 16 H3             0.718 0.705 D7    
## 17 H4             0.763 0.609 D1    
## 18 H4             0.705 0.529 D5    
## 19 H4             0.621 0.530 D6    
## 20 H4             0.705 0.529 D7    
## 21 H5             0.609 0.609 D1    
## 22 H5             0.529 0.529 D5    
## 23 H5             0.451 0.451 D6    
## 24 H5             0.529 0.529 D7    
## 25 H6             0.609 0.554 D1    
## 26 H6             0.529 0.463 D5    
## 27 H6             0.322 0.302 D6    
## 28 H6             0.316 0.296 D7

## 
## ===== Scenario 11 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.587 D1    
##  2 H1_or_H2      NA     0.575 D5    
##  3 H1_or_H2      NA     0.575 D6    
##  4 H1_or_H2      NA     0.575 D7    
##  5 H1             1     0.369 D1    
##  6 H1             1     0.449 D5    
##  7 H1             1     0.452 D6    
##  8 H1             1     0.452 D7    
##  9 H2             1     0.363 D1    
## 10 H2             1     0.347 D5    
## 11 H2             1     0.355 D6    
## 12 H2             1     0.349 D7    
## 13 H3             0.587 0.576 D1    
## 14 H3             0.575 0.558 D5    
## 15 H3             0.452 0.446 D6    
## 16 H3             0.575 0.558 D7    
## 17 H4             0.576 0.456 D1    
## 18 H4             0.558 0.393 D5    
## 19 H4             0.355 0.341 D6    
## 20 H4             0.558 0.393 D7    
## 21 H5             0.456 0.456 D1    
## 22 H5             0.393 0.393 D5    
## 23 H5             0.446 0.446 D6    
## 24 H5             0.393 0.393 D7    
## 25 H6             0.456 0.406 D1    
## 26 H6             0.393 0.335 D5    
## 27 H6             0.225 0.207 D6    
## 28 H6             0.219 0.200 D7

## 
## ===== Scenario 12 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested  power design
##    <chr>          <dbl>  <dbl> <chr> 
##  1 H1_or_H2     NA      0.442  D1    
##  2 H1_or_H2     NA      0.486  D5    
##  3 H1_or_H2     NA      0.486  D6    
##  4 H1_or_H2     NA      0.486  D7    
##  5 H1            1      0.376  D1    
##  6 H1            1      0.453  D5    
##  7 H1            1      0.454  D6    
##  8 H1            1      0.454  D7    
##  9 H2            1      0.122  D1    
## 10 H2            1      0.122  D5    
## 11 H2            1      0.126  D6    
## 12 H2            1      0.125  D7    
## 13 H3            0.442  0.427  D1    
## 14 H3            0.486  0.465  D5    
## 15 H3            0.454  0.444  D6    
## 16 H3            0.486  0.465  D7    
## 17 H4            0.427  0.315  D1    
## 18 H4            0.465  0.291  D5    
## 19 H4            0.126  0.124  D6    
## 20 H4            0.465  0.291  D7    
## 21 H5            0.315  0.315  D1    
## 22 H5            0.291  0.291  D5    
## 23 H5            0.444  0.444  D6    
## 24 H5            0.291  0.291  D7    
## 25 H6            0.315  0.275  D1    
## 26 H6            0.291  0.242  D5    
## 27 H6            0.092  0.0776 D6    
## 28 H6            0.0909 0.0767 D7

## 
## ===== Scenario 13 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.911 D1    
##  2 H1_or_H2      NA     0.851 D5    
##  3 H1_or_H2      NA     0.851 D6    
##  4 H1_or_H2      NA     0.851 D7    
##  5 H1             1     0.117 D1    
##  6 H1             1     0.168 D5    
##  7 H1             1     0.172 D6    
##  8 H1             1     0.171 D7    
##  9 H2             1     0.903 D1    
## 10 H2             1     0.843 D5    
## 11 H2             1     0.845 D6    
## 12 H2             1     0.843 D7    
## 13 H3             0.911 0.898 D1    
## 14 H3             0.851 0.828 D5    
## 15 H3             0.172 0.167 D6    
## 16 H3             0.851 0.828 D7    
## 17 H4             0.898 0.661 D1    
## 18 H4             0.828 0.548 D5    
## 19 H4             0.845 0.563 D6    
## 20 H4             0.828 0.548 D7    
## 21 H5             0.661 0.661 D1    
## 22 H5             0.548 0.548 D5    
## 23 H5             0.167 0.167 D6    
## 24 H5             0.548 0.548 D7    
## 25 H6             0.661 0.598 D1    
## 26 H6             0.548 0.457 D5    
## 27 H6             0.135 0.127 D6    
## 28 H6             0.134 0.126 D7

## 
## ===== Scenario 14 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested power design
##    <chr>          <dbl> <dbl> <chr> 
##  1 H1_or_H2      NA     0.695 D1    
##  2 H1_or_H2      NA     0.598 D5    
##  3 H1_or_H2      NA     0.598 D6    
##  4 H1_or_H2      NA     0.598 D7    
##  5 H1             1     0.123 D1    
##  6 H1             1     0.175 D5    
##  7 H1             1     0.179 D6    
##  8 H1             1     0.177 D7    
##  9 H2             1     0.662 D1    
## 10 H2             1     0.562 D5    
## 11 H2             1     0.565 D6    
## 12 H2             1     0.562 D7    
## 13 H3             0.695 0.684 D1    
## 14 H3             0.598 0.579 D5    
## 15 H3             0.179 0.174 D6    
## 16 H3             0.598 0.579 D7    
## 17 H4             0.684 0.577 D1    
## 18 H4             0.579 0.457 D5    
## 19 H4             0.565 0.468 D6    
## 20 H4             0.579 0.457 D7    
## 21 H5             0.577 0.577 D1    
## 22 H5             0.457 0.457 D5    
## 23 H5             0.174 0.174 D6    
## 24 H5             0.457 0.457 D7    
## 25 H6             0.577 0.518 D1    
## 26 H6             0.457 0.374 D5    
## 27 H6             0.133 0.123 D6    
## 28 H6             0.130 0.120 D7

## 
## ===== Scenario 15 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested  power design
##    <chr>          <dbl>  <dbl> <chr> 
##  1 H1_or_H2     NA      0.436  D1    
##  2 H1_or_H2     NA      0.363  D5    
##  3 H1_or_H2     NA      0.363  D6    
##  4 H1_or_H2     NA      0.363  D7    
##  5 H1            1      0.119  D1    
##  6 H1            1      0.163  D5    
##  7 H1            1      0.165  D6    
##  8 H1            1      0.164  D7    
##  9 H2            1      0.366  D1    
## 10 H2            1      0.286  D5    
## 11 H2            1      0.290  D6    
## 12 H2            1      0.288  D7    
## 13 H3            0.436  0.425  D1    
## 14 H3            0.363  0.348  D5    
## 15 H3            0.165  0.16   D6    
## 16 H3            0.363  0.348  D7    
## 17 H4            0.425  0.383  D1    
## 18 H4            0.348  0.290  D5    
## 19 H4            0.290  0.278  D6    
## 20 H4            0.348  0.290  D7    
## 21 H5            0.383  0.383  D1    
## 22 H5            0.290  0.290  D5    
## 23 H5            0.16   0.16   D6    
## 24 H5            0.290  0.290  D7    
## 25 H6            0.383  0.333  D1    
## 26 H6            0.290  0.225  D5    
## 27 H6            0.0886 0.0815 D6    
## 28 H6            0.0854 0.0785 D7

## 
## ===== Scenario 16 — Table =====
## # A tibble: 28 × 4
##    endpoint prob_tested  power design
##    <chr>          <dbl>  <dbl> <chr> 
##  1 H1_or_H2     NA      0.216  D1    
##  2 H1_or_H2     NA      0.208  D5    
##  3 H1_or_H2     NA      0.208  D6    
##  4 H1_or_H2     NA      0.208  D7    
##  5 H1            1      0.114  D1    
##  6 H1            1      0.158  D5    
##  7 H1            1      0.158  D6    
##  8 H1            1      0.158  D7    
##  9 H2            1      0.120  D1    
## 10 H2            1      0.0834 D5    
## 11 H2            1      0.0844 D6    
## 12 H2            1      0.0843 D7    
## 13 H3            0.216  0.208  D1    
## 14 H3            0.208  0.194  D5    
## 15 H3            0.158  0.153  D6    
## 16 H3            0.208  0.194  D7    
## 17 H4            0.208  0.176  D1    
## 18 H4            0.194  0.140  D5    
## 19 H4            0.0844 0.0837 D6    
## 20 H4            0.194  0.140  D7    
## 21 H5            0.176  0.176  D1    
## 22 H5            0.140  0.140  D5    
## 23 H5            0.153  0.153  D6    
## 24 H5            0.140  0.140  D7    
## 25 H6            0.176  0.146  D1    
## 26 H6            0.140  0.107  D5    
## 27 H6            0.0333 0.0285 D6    
## 28 H6            0.0328 0.028  D7