New Superpower package user. Experienced users: does this code appear OK? Why or why not?
Install and load required packages
install.packages("Superpower")
library(Superpower)
Design: 2 (Age: YA vs OA, between) × 3 (Condition: Social, Perceptual, Control, within) × 2 (Viewpoint: Front, Three-quarter, within)
Set parameters
design <- "2b3w2w" # 2 between (Age) × 3 within (Condition) × 2 within (Viewpoint)
n <- 30 # Starting sample size per groupMain effects only (no interactions):
- Social > Perceptual > Control (medium effect, ~0.5 SD between Social and Control)
- Front > Three-quarter (small-medium effect, ~0.3 SD difference)
- YA > OA (medium effect, ~0.5 SD difference)
mu <- c(
-
# YA group (higher accuracy overall) -
0.4, # YA: Social-Front -
0.1, # YA: Social-Quarter -
0.0, # YA: Perceptual-Front -
-0.3, # YA: Perceptual-Quarter -
-0.1, # YA: Control-Front -
-0.4, # YA: Control-Quarter -
# OA group (lower accuracy, ~0.5 SD below YA on average) -
-0.1, # OA: Social-Front -
-0.4, # OA: Social-Quarter -
-0.5, # OA: Perceptual-Front -
-0.8, # OA: Perceptual-Quarter -
-0.6, # OA: Control-Front -
-0.9 # OA: Control-Quarter - )
sd <- 1 # Standard deviation
r <- 0.5 # Correlation among within-subject measures
label_list <- list(
-
Age = c("YA", "OA"), -
Condition = c("Social", "Perceptual", "Control"), -
Viewpoint = c("Front", "Quarter") - )
Create design object
design_result <- ANOVA_design(
-
design = design, -
n = n, -
mu = mu, -
sd = sd, -
r = r, -
label_list = label_list, -
plot = TRUE - )
Run initial power analysis with 1000 simulations
set.seed(123)
power_result <- ANOVA_power(
-
design_result, -
alpha_level = 0.05, -
nsims = 1000, -
verbose = FALSE - )
cat("\n=== first pwr analysis (n=30 per group) ===\n")
=== initial pwr analysis (n=30 per group) ===
print(power_result$main_results)
power effect_size
anova_Age 70.1 0.10957813
anova_Condition 100.0 0.23017192
anova_Age:Condition 5.0 0.01707765
anova_Viewpoint 97.6 0.22068060
anova_Age:Viewpoint 4.3 0.01672093
anova_Condition:Viewpoint 4.9 0.01643502
anova_Age:Condition:Viewpoint 4.7 0.01693651Test different sample sizes for main effects only
sample_sizes <- c(20, 25, 30, 35, 40, 45, 50, 60, 70, 80)
results_df <- data.frame(
-
n = integer(), -
power_age = numeric(), -
power_condition = numeric(), -
power_viewpoint = numeric() - )
cat("\n\n=== pwr analysis for main effects across sample sizes ===\n")
=== pwr analysis for main effects across sample sizes ===
cat("(Running 1000 simulations per sample size - this will take 15-30 minutes)\n\n")
for (n_test in sample_sizes) {
-
design_temp <- ANOVA_design( -
design = design, -
n = n_test, -
mu = mu, -
sd = sd, -
r = r, -
label_list = label_list, -
plot = FALSE -
) -
power_temp <- ANOVA_power( -
design_temp, -
alpha_level = 0.05, -
nsims = 1000, -
verbose = FALSE -
) -
# Extract main effects power only -
age_power <- power_temp$main_results["anova_Age", "power"] -
condition_power <- power_temp$main_results["anova_Condition", "power"] -
viewpoint_power <- power_temp$main_results["anova_Viewpoint", "power"] -
# Store results -
results_df <- rbind(results_df, data.frame( -
n = n_test, -
power_age = age_power, -
power_condition = condition_power, -
power_viewpoint = viewpoint_power -
)) -
cat(" Sample size per group: ", n_test, "\n") -
cat(" Age (YA > OA): ", age_power, "%\n") -
cat(" Condition (Social > others): ", condition_power, "%\n") -
cat(" Viewpoint (Front > Quarter): ", viewpoint_power, "%\n") -
cat("---\n") - }
Sample size per group: 20
Age (YA > OA): 52.3 %
Condition (Social > others): 99.3 %
Viewpoint (Front > Quarter): 89.4 %
Sample size per group: 25
Age (YA > OA): 62.3 %
Condition (Social > others): 99.9 %
Viewpoint (Front > Quarter): 95.1 %
Sample size per group: 30
Age (YA > OA): 69.7 %
Condition (Social > others): 99.9 %
Viewpoint (Front > Quarter): 97.3 %
Sample size per group: 35
Age (YA > OA): 78.3 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 99.5 %
Sample size per group: 40
Age (YA > OA): 83.1 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 99.6 %
Sample size per group: 45
Age (YA > OA): 85.3 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 100 %
Sample size per group: 50
Age (YA > OA): 89.2 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 100 %
Sample size per group: 60
Age (YA > OA): 94.5 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 100 %
Sample size per group: 70
Age (YA > OA): 97.1 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 100 %
Sample size per group: 80
Age (YA > OA): 98.6 %
Condition (Social > others): 100 %
Viewpoint (Front > Quarter): 100 %
(...)
Blank