# Online Supplementary Materials Mulder (2023)

This vignette is a supplement to “Power analysis for the random intercept cross-lagged panel model using the `powRICLPM` R-package” by @mulder_power_2023. It contains the R-code used for performing the power analysis that serves as the illustrative example. In total, there are 171 experimental conditions (19 sample sizes \(\times\) 3 numbers of repeated measures \(\times\) 3 proportions of between person variance). The analysis is partitioned into two parts to reduce total computation time: A preliminary analysis part, and a validation part.

## Preliminary analysis

First, a Monte Carlo power analysis is performed over all 171 experimental conditions using a limited number of replications (`reps = 100`). These preliminary results serve as a basis for selecting those experimental conditions that show promising results (i.e., that meet the desired power- and accuracy levels). These conditions are then validated using a large number of replications (`reps = 2000`) in the next step.

The R-code for the preliminary analysis can be found below:

    # Matrix of standardized lagged effects
    Phi <- matrix(c(0.20, 0.10, 0.15, 0.30), byrow = FALSE, ncol = 2)
    # powRICLPM automatically computes Psi based on Phi and within_cor

    # Setup parallel processing to speed up computations
    plan(multisession, workers = 6)

    # Perform preliminary power analysis (with progress bar)
    with_progress({
      out_preliminary <- powRICLPM(
        target_power = 0.8,
        search_lower = 200,
        search_upper = 2000,
        search_step = 100,
        time_points = c(3, 4, 5),
        ICC = c(0.3, 0.5, 0.7),
        RI_cor = 0.35,
        Phi = Phi,
        within_cor = 0.26,
        reps = 5,
        seed = 123456
      )
    })

    # Tabular summary of results
    summary(out_preliminary)
    summary(out_preliminary, sample_size = 200, time_points = 3, ICC = 0.3, reliability = 1)
    res_wB2wA1 <- give(out_preliminary, what = "results", parameter = "wB2~wA1")

    # Visualize power
    p <- plot(x = out_preliminary, parameter = "wB2~wA1")

    # Tailor visualization for Mulder (under review)
    p <- p +
      labs(color = "Number of time points") +
      scale_x_continuous(
        name = "Sample size",
        breaks = seq(200, 2000, 200),
        guide = guide_axis(n.dodge = 2)
      ) +
      ggplot2::ylab("Power") +
      ggplot2::guides(
        color = ggplot2::guide_legend(title = "Time points", nrow = 1),
        shape = ggplot2::guide_legend(title = "Reliability", nrow = 1),
        fill = "none"
      ) +
      theme(legend.position = "bottom", text = element_text(size = 8))
    p
    ggsave("C:\\Users\\5879167\\surfdrive\\Research\\RICLPM - Power\\Mulder2023_preliminary_power.png", plot = p, height = 6, width = 7)

## Validation

The preliminary results suggest that at least 4 time-points and a sample size upwards of a 1000 are required in the condition with the most advantageous proportion of between-unit variance (where proportion of between-unit variance is 0.3). For conditions with a 0.7 proportion of between-unit variance, sample sizes of approximately 1500 are needed with 5 repeated measures, whereas sample sizes upwards of 1700 are needed for 4 repeated measures. Based on these results, the following experimental conditions for validation are selected: The range of sample sizes is reduced to 900 to 1800, and experimental conditions with 3 repeated measures are omitted. This results in a total of 10 sample sizes \(\times\) 2 numbers of repeated measures \(\times\) 3 proportions of between-unit variance, totaling 60 experimental conditions for validation.

    # Setup parallel processing to speed up computations
    plan(multisession, workers = 6)

    # Perform preliminary power analysis (with progress bar)
    with_progress({
      out_validation <- powRICLPM(
        target_power = 0.8,
        search_lower = 900,
        search_upper = 1800,
        search_step = 100,
        time_points = c(4, 5),
        ICC = c(0.3, 0.5, 0.7),
        RI_cor = 0.35,
        Phi = Phi,
        within_cor = 0.26,
        reps = 2000,
        seed = 123456
      )
    })

    # Tabular summary of results
    summary(out_validation, parameter = "wB2~wA1")
    res_wB2wA1 <- give(out_validation, what = "results", parameter = "wB2~wA1")

    # Visualize power
    p2 <- plot(out_validation, parameter = "wB2~wA1")

    # Tailor visualization of power for Mulder (2022)
    p2 <- p2 +
      labs(color = "Number of time points") +
      scale_x_continuous(
        name = "Sample size",
        breaks = seq(900, 1800, 100),
        guide = guide_axis(n.dodge = 2)) +
      scale_color_manual(values = c("#00BA38", "#619CFF")) +
      theme(legend.position = "bottom", text = element_text(size = 8))
    p2
    ggsave("Mulder2022_validation_power.png", height = 5, width = 7)