I would confound ABC with blocks.
| Block | ABC | Treatments |
|---|---|---|
| 1 | -1 | (1), ab, ac, bc |
| 2 | +1 | a, b, c, abc |
We can assign runs using the sign of ABC, and Randomize the run order within each block.
We can use AB and AC as the block generators. Their product is BC, so AB, AC, and BC are confounded with blocks. This preserves the three main effects.
Group treatments by their AB and AC signs:
| Block | AB | AC | Treatments |
|---|---|---|---|
| 1 | +1 | +1 | (1), abc |
| 2 | -1 | -1 | a, bc |
| 3 | -1 | +1 | b, ac |
| 4 | +1 | -1 | ab, c |
Randomize the run order within each block.
A <-c(-1, 1, -1, 1, -1, 1, -1, 1)
B <-c(-1, -1, 1, 1, -1, -1, 1, 1)
C <-c(-1, -1, -1, -1, 1, 1, 1, 1)
life <- c(22, 32, 35, 55, 44, 40, 60, 39)
block <- factor(c(1, 2, 2, 1, 2, 1, 1, 2))
signs <- cbind(A, B, C, A*B, A*C, B*C, A*B*C)
effects <- as.vector(t(signs) %*% life / 4)
names(effects) <- c("A", "B", "C", "AB", "AC", "BC", "Block (ABC)")
effects
## A B C AB AC BC
## 1.25 12.75 9.75 -1.75 -13.75 -5.25
## Block (ABC)
## -6.75
ordered <- sort(abs(effects))
n <- length(ordered)
expected <- qnorm((1 + ppoints(n, a = 0.5)) / 2)
plot(expected, ordered, pch = 19,
xlab = "Expected half-normal quantile",
ylab = "Absolute effect (in hours)",
main = "Half-normal plot of effects")
text(expected, ordered, labels = names(ordered), pos = 3)
The plot does not clearly show us which effect is significant. We can see that AC, B and C have the largest absolute effects.
The block does not appear to be properly significant. Its absolute effect is 6.75 hours and does not stand out.