Assumptions:

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.1     ✓ dplyr   1.0.6
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(simr)
## Loading required package: lme4
## Loading required package: Matrix
## 
## Attaching package: 'Matrix'
## The following objects are masked from 'package:tidyr':
## 
##     expand, pack, unpack
## Registered S3 methods overwritten by 'car':
##   method                          from
##   influence.merMod                lme4
##   cooks.distance.influence.merMod lme4
##   dfbeta.influence.merMod         lme4
##   dfbetas.influence.merMod        lme4
## 
## Attaching package: 'simr'
## The following object is masked from 'package:lme4':
## 
##     getData
## The following object is masked from 'package:stringr':
## 
##     fixed
library(lme4)

# Create data

subj <- factor(1:20) # 20 students per class
class_id <- factor(1:50) # 50 classes
time <- 0:1 # 2 time points
group <- c("control", "intervention") # two groups

subj_full <- rep(subj, 15)
class_full <- rep(rep(class_id, each=10), 3)
time_full <- rep(time, each=50)
group_full <- rep(rep(group, each=5), 15)

covars <- data.frame(id=subj_full, class=class_full, treat=group_full, time=factor(time_full))

covars <- as_tibble(covars)
covars
## # A tibble: 1,500 x 4
##    id    class treat        time 
##    <fct> <fct> <chr>        <fct>
##  1 1     1     control      0    
##  2 2     1     control      0    
##  3 3     1     control      0    
##  4 4     1     control      0    
##  5 5     1     control      0    
##  6 6     1     intervention 0    
##  7 7     1     intervention 0    
##  8 8     1     intervention 0    
##  9 9     1     intervention 0    
## 10 10    1     intervention 0    
## # … with 1,490 more rows
# Set betas and other parameters

fixed <- c(0, 0, 0.05, 0.20) # Intercept and slopes for time and intervention and time:intervention)

rand <- list(0.16) # equivalent to an ICC of 20%

res <- .80 # residual variance

# model
model <- makeLmer(y ~ treat*time + (1|class), fixef=fixed, VarCorr=rand, sigma=res, data=covars)
model
## Linear mixed model fit by REML ['lmerMod']
## Formula: y ~ treat * time + (1 | class)
##    Data: covars
## REML criterion at convergence: 3690.646
## Random effects:
##  Groups   Name        Std.Dev.
##  class    (Intercept) 0.4     
##  Residual             0.8     
## Number of obs: 1500, groups:  class, 50
## Fixed Effects:
##             (Intercept)        treatintervention                    time1  
##                    0.00                     0.00                     0.05  
## treatintervention:time1  
##                    0.20
# simulate!
sim_treat <- powerSim(model, nsim=100, test = fcompare(y~time))
## Simulating: |                                                                  |Simulating: |=                                                                 |Simulating: |==                                                                |Simulating: |===                                                               |Simulating: |====                                                              |Simulating: |=====                                                             |Simulating: |======                                                            |Simulating: |=======                                                           |Simulating: |========                                                          |Simulating: |=========                                                         |Simulating: |==========                                                        |Simulating: |===========                                                       |Simulating: |============                                                      |Simulating: |=============                                                     |Simulating: |==============                                                    |Simulating: |===============                                                   |Simulating: |================                                                  |Simulating: |=================                                                 |Simulating: |==================                                                |Simulating: |===================                                               |Simulating: |====================                                              |Simulating: |=====================                                             |Simulating: |======================                                            |Simulating: |=======================                                           |Simulating: |========================                                          |Simulating: |=========================                                         |Simulating: |==========================                                        |Simulating: |===========================                                       |Simulating: |============================                                      |Simulating: |=============================                                     |Simulating: |==============================                                    |Simulating: |===============================                                   |Simulating: |================================                                  |Simulating: |=================================                                 |Simulating: |==================================                                |Simulating: |===================================                               |Simulating: |====================================                              |Simulating: |=====================================                             |Simulating: |======================================                            |Simulating: |=======================================                           |Simulating: |========================================                          |Simulating: |=========================================                         |Simulating: |==========================================                        |Simulating: |===========================================                       |Simulating: |============================================                      |Simulating: |=============================================                     |Simulating: |==============================================                    |Simulating: |===============================================                   |Simulating: |================================================                  |Simulating: |=================================================                 |Simulating: |==================================================                |Simulating: |===================================================               |Simulating: |====================================================              |Simulating: |=====================================================             |Simulating: |======================================================            |Simulating: |=======================================================           |Simulating: |========================================================          |Simulating: |=========================================================         |Simulating: |==========================================================        |Simulating: |===========================================================       |Simulating: |============================================================      |Simulating: |=============================================================     |Simulating: |==============================================================    |Simulating: |===============================================================   |Simulating: |================================================================  |Simulating: |================================================================= |Simulating: |==================================================================|
sim_treat
## Power for model comparison, (95% confidence interval):
##       90.00% (82.38, 95.10)
## 
## Test: Likelihood ratio
##       Comparison to y ~ time + [re]
## 
## Based on 100 simulations, (0 warnings, 0 errors)
## alpha = 0.05, nrow = 1500
## 
## Time elapsed: 0 h 0 m 12 s

resources