get_n_needed <- Vectorize(
function(my_delta, my_power) {
power.t.test(delta = my_delta, sd = 1, sig.level = 0.05,
power = my_power)$n
}
)
dat <-
expand_grid(power = plogis(-3:3),
effect_size = c(2^(-2:2))) |>
# slice(1:5) |>
mutate(n_needed_exact = get_n_needed(effect_size, power),
n_needed = ceiling(n_needed_exact),
power_simulated = calc_power(effect_size, n_needed, 1e3)) |>
pivot_longer(cols = c(power, power_simulated))
dat |>
ggplot(aes(n_needed_exact, value, colour = name)) +
facet_grid(cols = vars(effect_size),
scales = 'free',
labeller = label_both) +
geom_hline(yintercept = 0.8, lty = 'dashed') +
geom_line() +
scale_x_continuous(trans = 'log10') +
ylim(0, 1) +
labs(colour = 'Effect size')