Power calculation for the general linear model

Before conducting an experiment, one should compute the power - or, preferably, estimate the precision of the expected results. There are numerous way to achieve this, here’s one using the R package pwr.

Package pwr

library(pwr)

The workhorse function here is pwr.f2.test. Note that f2 refers to the effect size f2 (see here), defined as:

f2=R21R2.

See for details of the function its help page:

help("pwr.f2.test")
pwr.f2.test(u = NULL, v = NULL, f2 = NULL, sig.level = 0.05, power = NULL)

Note that u is the number of predictors (k) minus 1, that’s the numerator degrees of freedom (df). The intercepts counts a predictor, too in this case!

v is the denominator df, defined as np, where n is the sample size (see here for some details on df). By the way, if you wonder, what df actually are, read this nice little explanation.

Let’s look at a example. In a power analysis before the experiment, one states the desired level of power, and the expected effect size, for example:

# example: k=3 predictors, n=100 observations, R^2 = .1, sig.level = .05 (default)

pwr.f2.test(u = 2,
            v = 97,
            f2 = .1/.9,
            power = NULL)
## 
##      Multiple regression power calculation 
## 
##               u = 2
##               v = 97
##              f2 = 0.1111111
##       sig.level = 0.05
##           power = 0.8447176

Given this values, we will have a power of about 84% (if all assumptions are met).

The other way round: How large should the sample be to get a power of .8, given R2=.1?

# example: k=3 predictors, power = .8, R^2 = .1

pwr.f2.test(u = 2,
            f2 = .1/.9,
            power = .8,
            v = NULL)
## 
##      Multiple regression power calculation 
## 
##               u = 2
##               v = 86.77678
##              f2 = 0.1111111
##       sig.level = 0.05
##           power = 0.8

v = 87, ie, n=v+p=87+3=90. That’s the estimated sample size we need.