# Case 007: planned versus achieved sample, base R only.
# Independent normal outcomes, equal allocation and common SD.
# n is PER GROUP. Hypothetical summaries, not simulated attrition.
n <- c(planned=180L, achieved=60L)
sd_assumed <- 10
important_difference <- 3
alpha <- .05
summarize <- function(n) {
  df <- 2*n-2
  se <- sd_assumed*sqrt(2/n)
  half_width <- qt(1-alpha/2,df)*se
  power <- power.t.test(n=n,delta=important_difference,sd=sd_assumed,
    sig.level=alpha,type="two.sample",alternative="two.sided",strict=TRUE)$power
  # CI below assumes sample SDs = 10 and observed mean difference = 3.
  c(per_group=n,total=2*n,SE=se,CI_low=3-half_width,CI_high=3+half_width,
    power_for_prespecified_difference=power)
}
results <- t(sapply(n,summarize))
print(round(results,6))
mde <- power.t.test(n=n["achieved"],sd=sd_assumed,sig.level=alpha,
  power=.80,tol=1e-10,type="two.sample",alternative="two.sided",strict=TRUE)$delta
print(c(difference_for_80_percent_power=mde,
        SE_ratio=results["achieved","SE"]/results["planned","SE"]))
stopifnot(abs(results["achieved","SE"]/results["planned","SE"]-sqrt(3))<1e-10,
 results["planned","CI_low"]>0, results["achieved","CI_low"]<0,
 results["achieved","power_for_prespecified_difference"]<results["planned","power_for_prespecified_difference"],
 mde>important_difference)
sessionInfo()
