knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.path = "man/figures/README-" )
Power Analysis for Longitudinal Multilevel/Linear Mixed-Effects Models.
The purpose of powerlmm
is to help design longitudinal treatment studies (parallel groups), with
or without higher-level clustering (e.g. longitudinally clustered by therapists,
groups, or physician), and missing data. The main features of the package are:
powerlmm
can be installed from CRAN and GitHub.
# CRAN, version 0.4.0 install.packages("powerlmm") # GitHub, dev version devtools::install_github("rpsychologist/powerlmm")
This is an example of setting up a three-level longitudinal model with random slopes at both the subject- and cluster-level, with different missing data patterns per treatment arm. Relative standardized inputs are used, but unstandardized raw parameters values can also be used.
library(powerlmm) d <- per_treatment(control = dropout_weibull(0.3, 2), treatment = dropout_weibull(0.2, 2)) p <- study_parameters(n1 = 11, n2 = 10, n3 = 5, icc_pre_subject = 0.5, icc_pre_cluster = 0, icc_slope = 0.05, var_ratio = 0.02, dropout = d, effect_size = cohend(-0.8, standardizer = "pretest_SD")) p
plot(p)
get_power(p, df = "satterthwaite")
Unequal cluster sizes is also supported, the cluster sizes can either be random (sampled), or the marginal distribution can be specified.
p <- study_parameters(n1 = 11, n2 = unequal_clusters(2, 3, 5, 20), icc_pre_subject = 0.5, icc_pre_cluster = 0, icc_slope = 0.05, var_ratio = 0.02, effect_size = cohend(-0.8, standardizer = "pretest_SD")) get_power(p)
Cluster sizes follow a Poisson distribution
p <- study_parameters(n1 = 11, n2 = unequal_clusters(func = rpois(5, 5)), # sample from Poisson icc_pre_subject = 0.5, icc_pre_cluster = 0, icc_slope = 0.05, var_ratio = 0.02, effect_size = cohend(-0.8, standardizer = "pretest_SD")) get_power(p, R = 100, progress = FALSE) # expected power by averaging over R realizations
Several convenience functions are also included, e.g. for creating power curves.
x <- get_power_table(p, n2 = 5:10, n3 = c(4, 8, 12), effect_size = cohend(c(0.5, 0.8), standardizer = "pretest_SD"))
plot(x)
The package includes a flexible simulation method that makes it easy to investigate the performance of different models. As an example, let's compare the power difference
between the 2-level LMM with 11 repeated measures, to doing an ANCOVA at posttest. Using sim_formula
different models can be fit to the same data set during the simulation.
p <- study_parameters(n1 = 11, n2 = 40, icc_pre_subject = 0.5, cor_subject = -0.4, var_ratio = 0.02, effect_size = cohend(-0.8, standardizer = "pretest_SD")) # 2-lvl LMM f0 <- sim_formula("y ~ time + time:treatment + (1 + time | subject)") # ANCOVA, formulas with no random effects are with using lm() f1 <- sim_formula("y ~ treatment + pretest", data_transform = transform_to_posttest, test = "treatment") f <- sim_formula_compare("LMM" = f0, "ANCOVA" = f1) res <- simulate(p, nsim = 2000, formula = f, cores = parallel::detectCores(logical = FALSE))
We then summarize the results using summary
. Let's look specifically at the treatment effects.
summary(res, para = list("LMM" = "time:treatment", "ANCOVA" = "treatment"))
We can also look at a specific model, here's the results for the 2-lvl LMM.
summary(res, model = "LMM")
The package's basic functionality is also implemented in a Shiny web application, aimed at users that are less familiar with R. Launch the application by typing
library(powerlmm) shiny_powerlmm()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.