ML Power Tool

NOTE: This program is also available as a graphic user interface and its use does not require knowledge of R: https://aguinis.shinyapps.io/ml_power/

  • Click here to download the rMarkdown version that converts the output into a Word file (courtesy of Professor Avraham Kluger from The Jerusalem School of Business Administration).

Below is the R program “ML Power Tool” for calculating statistical power to detect a cross-level interaction effect as described in the following article:

Mathieu, J. E., Aguinis, H., Culpepper, S. A., & Chen. G. (2012). Understanding and estimating the power to detect cross-level interaction effects in multilevel modeling. Journal of Applied Psychology, 97, 951-966. [copyright notice: You may download this article for one-time personal use only; please obtain publisher permission for any further distribution, publication, or commercial use.] [ pdf version ]

Note: Syntax must be run in R (R Development Core Team, 2008) including the Linear mixed-effects models using S4 classes (lme4) module. Users supply values (underlined in the code below). This illustration includes illustrative values from the following source: Chen, G., Kirkman, B. L., Kanfer, R., Allen, D., & Rosen, B. (2007). A multilevel study of leadership, empowerment, and performance in teams. Journal of Applied Psychology, 92, 331-346.

l2n = 62               # Level-2 sample size
l1n = 7                #Average Level-1 sample size
iccx = .12             #ICC1 for X
g00 = -0.068364        #Intercept for B0j equation (Level-1 intercept)
g01 = 0.345048         #Direct cross-level effect of average Xj on Y
g02 = 0.022851         #Direct cross-level effect of W on Y
g03 = 0.184721         #Between-group interaction effect between W and Xj on Y
g10 = 0.451612         #Intercept for B1j equation (Level-1 effect of X on Y)
g11 = 0.148179         #Cross-level interaction effect
vu0j = 0.00320         #Variance component for intercept
vu1j = 0.08954         #Variance component for slope
vresid = 0.76877       #Variance component for residual, within variance
alpha = .05            #Rejection level
REPS = 1000            #Number of Monte Carlo Replications, 1000 recommended


hlmmmr <- function(iccx,l2n,l1n,g00,g01,g02,g03,g10,g11,vu0j,vu1j,alpha){
require(lme4)
Wj = rnorm(l2n, 0, sd=1)
Xbarj = rnorm(l2n, 0, sd=sqrt(iccx)) ## Level-2 effects on x
b0 = g00 + g01*Xbarj+ g02*Wj + g03*Xbarj*Wj + rnorm(l2n,0,sd=sqrt(vu0j))
b1 = g10 + g11*Wj + rnorm(l2n,0,sd=sqrt(vu1j))
dat=expand.grid(l1id = 1:l1n,l2id = 1:l2n)
dat$X=rnorm(l1n*l2n,0,sd=sqrt(1-iccx))+Xbarj[dat[,2]]
dat$Xbarj=Xbarj[dat[,2]]
dat$Wj=Wj[dat[,2]]
dat$Y <- b0[dat$l2id]+ b1[dat$l2id]*(dat$X-dat$Xbarj)+rnorm(l1n*l2n,0,sd=sqrt(vresid))
dat$Xc=(dat$X - Xbarj[dat[,2]])
lmm.fit<- lmer(Y ~ Xc+Xbarj+Wj+Xbarj:Wj+Xc:Wj+(Xc|l2id),data=dat)
fe.g <- fixef(lmm.fit)
fe.se <- sqrt(diag(vcov(lmm.fit)))
ifelse(abs(fe.g[6]/fe.se[6])>qt(1-alpha/2,l2n-4),1,0)
}
simout=replicate(REPS,hlmmmr(iccx,l2n,l1n,g00,g01,g02,g03,g10,g11,vu0j,vu1j,alpha))
powerEST=mean(simout)
powerEST