Fractional Factorial Designs
When a full factorial has too many runs — 7 factors already means runs — a fractional factorial design runs only a carefully chosen subset. Under effect sparsity (a few factors dominate), a fraction lets you screen many factors cheaply, at the cost of some effects being tangled together.
The fraction
A design uses a fraction of the full factorial. For example, studies factors in just runs instead of .
You build the fraction by choosing design generators: extra factors are assigned to interaction columns of a smaller full factorial. For a we start from a full in and set the third factor via the generator .
The defining relation and aliasing
Each generator implies a word in the defining relation. From , multiply both sides by (recall , the identity column of all ):
The defining relation lists all such words (for multiple generators, include all their products). To find what an effect is aliased (confounded) with, multiply it by every word in the defining relation. Aliased effects are estimated by the same contrast column, so they cannot be separated:
Here each main effect is aliased with a two-factor interaction. You estimate as a single quantity; if the interaction is negligible, the estimate is “really” the main effect.
Resolution
The resolution of a design is the length of the shortest word in the defining relation. It summarizes how badly effects are confounded:
- Resolution III — main effects aliased with two-factor interactions (). Cheapest screening; risky if interactions are active.
- Resolution IV — main effects clear of two-factor interactions, but two-factor interactions aliased with each other (shortest word has length 4).
- Resolution V — main effects and two-factor interactions all clear of each other; two-factor interactions only aliased with three-factor interactions (shortest word length 5).
Higher resolution costs more runs but tangles fewer important effects.
Worked example: a half fraction
Three factors in runs, generator , defining relation (Resolution III). Start from the full in and compute :
| Run | |||
|---|---|---|---|
| 1 | |||
| 2 | |||
| 3 | |||
| 4 |
The four runs are therefore .
Alias structure (multiply each effect by ):
So the contrast we call “the effect” actually estimates , and likewise for and . Only if the two-factor interactions are small can we read the contrasts as clean main effects — the standard screening assumption.
In code
R
library(FrF2)
# 5 factors in 8 runs: a 2^{5-2} fractional factorial
d <- FrF2(nruns = 8, nfactors = 5, randomize = FALSE)
head(d)
# Show which effects are aliased with which
aliases(lm(rnorm(8) ~ (.)^3, data = d))
# Prints the defining relation / alias chains, e.g. D = AB, E = AC, ...
Python
from pyDOE3 import fracfact
# 2^{3-1}: factor c is generated as c = a*b -> low-res half fraction
d = fracfact("a b ab")
print(d)
# [[-1 -1 1]
# [ 1 -1 -1]
# [-1 1 -1]
# [ 1 1 1]] columns a, b, c=ab (matches the worked example)
Julia
# Construct the 2^{3-1} fraction by hand from sign columns
A = [-1, 1, -1, 1]
B = [-1, -1, 1, 1]
C = A .* B # generator C = AB
design = hcat(A, B, C)
# 4×3 matrix; rows are the runs (-,-,+), (+,-,-), (-,+,-), (+,+,+)
# Verify the defining relation I = ABC (all +1) and the aliases A=BC, etc.
all(A .* B .* C .== 1) # true -> I = ABC
A == B .* C # true -> A aliased with BC
Why it matters for statistics
Fractional factorials make large screening studies affordable: they identify the vital few factors from the trivial many with a fraction of the runs. Understanding generators, the defining relation, aliasing, and resolution tells you exactly which effects you can trust and which are confounded — essential for the early, exploratory stage of experimentation before committing resources to a focused follow-up.