Superpower introduction usage

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 group

Main 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.01693651

Test 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