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.
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)
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)