# Mock-only validation: exact references and 20,000 simulated future cohorts.
set.seed(2)
n <- 300; p <- .68; target <- .68
sims <- rbinom(20000, n, p)
print(list(exact_band=qbinom(c(.025, .975), n, p),
           probability=pbinom(ceiling(n*target-1e-10)-1, n, p, lower.tail=FALSE),
           simulation=quantile(sims, c(.025,.975), type=1)))
# Machine-readable fixtures for the independent JavaScript comparison.
cases <- data.frame(n=c(1,10,300,10000,20,20), baseline=c(50,50,65,90,0,100), change=c(0,0,3,0,0,0), target=c(100,50,68,90,0,100))
cases$p <- (cases$baseline+cases$change)/100
cases$low <- qbinom(.025,cases$n,cases$p)
cases$high <- qbinom(.975,cases$n,cases$p)
cases$probability <- pbinom(ceiling(cases$n*cases$target/100-1e-10)-1,cases$n,cases$p,lower.tail=FALSE)
write.csv(cases, stdout(), row.names=FALSE)
