library(pwr)
## Warning: package 'pwr' was built under R version 4.2.3
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
mspn <- seq(10, 110, by = 10)
effect_sizes <- c(1, 0.9, 0.8, 0.7, 0.6, 0.5)
ratio <- 2 / 3
alpha <- 0.05

power_results <- data.frame(mspn = numeric(),
                            EffectSize = numeric(),
                            Power = numeric())

for (effect_size in effect_sizes) {
  for (mspn_value in mspn) {
    n1 <- floor(ceiling(mspn_value * ratio) * 0.95)
    n2 <- floor((mspn_value - ceiling(mspn_value * ratio)) * 0.95)
    power <- pwr.t2n.test(n1 = n1, n2 = n2, d = effect_size, sig.level = alpha, power = NULL)$power
    power_results <- rbind(power_results, data.frame(mspn = mspn_value, EffectSize = effect_size, Power = round(power * 100, 2))) 
  }
}

line_types <- c("solid", "dashed", "dotted", "dotdash", "longdash", "twodash")

plot <- ggplot(power_results, aes(x = mspn, y = Power, color = as.factor(EffectSize), linetype = as.factor(EffectSize))) +
  geom_line() +
  geom_point() +
  scale_x_continuous(breaks = seq(10, 110, by = 10)) + 
  scale_y_continuous(breaks = seq(0, 100, by = 10), limits = c(0, 100), labels = scales::number_format(accuracy = 1)) +
  scale_linetype_manual(values = line_types, breaks = c(1, 0.9, 0.8, 0.7, 0.6, 0.5)) +  
  scale_color_manual(values = scales::hue_pal()(6), breaks = c(1, 0.9, 0.8, 0.7, 0.6, 0.5)) +  
  labs(x = "Randomized MSPN Sample Size", y = "Power (%)", color = "Effect Size", linetype = "Effect Size") +
  theme_minimal() +
  theme(axis.title.x = element_text(size = 14, margin = margin(t = 15)),
        axis.title.y = element_text(size = 14, margin = margin(r = 20)),
        axis.text.x = element_text(size = 12),
        axis.text.y = element_text(size = 12),
        panel.grid.major = element_line(color = "grey90", size = 0.5),
        panel.grid.minor = element_line(color = "grey95", size = 0.25),
        panel.border = element_rect(color = "black", fill = NA, size = 1))
## Warning: The `size` argument of `element_rect()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: The `size` argument of `element_line()` is deprecated as of ggplot2 3.4.0.
## ℹ Please use the `linewidth` argument instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
windows(width = 8, height = 6)

print(plot)