# Data
A <- rep(c(-1,1), 8)
B <- rep(rep(c(-1,1), each=2), 4)
C <- rep(rep(c(-1,1), each=4), 2)
D <- rep(c(-1,1), each=8)
Yield <- c(12,18,13,16,17,15,20,15,
10,25,13,24,19,21,17,23)
dat <- data.frame(A,B,C,D,Yield)
# Full model
mod <- lm(Yield ~ A*B*C*D, data=dat)
# Factorial effects
effects <- 2*coef(mod)[-1]
effects
## A B C D A:B
## 4.500000e+00 5.000000e-01 2.000000e+00 3.250000e+00 -7.500000e-01
## A:C B:C A:D B:D C:D
## -4.250000e+00 2.500000e-01 4.000000e+00 -2.055647e-16 -3.191891e-16
## A:B:C A:B:D A:C:D B:C:D A:B:C:D
## 1.000000e+00 7.500000e-01 -2.500000e-01 -7.500000e-01 1.000000e+00
abs_eff <- sort(abs(effects))
n <- length(abs_eff)
p <- ((1:n)-0.5)/n
half_q <- qnorm((1+p)/2)
plot(half_q, abs_eff,
xlab="Half-Normal Quantiles",
ylab="Absolute Effects",
main="Half-Normal Plot of Effects")
text(half_q, abs_eff,
labels=names(abs_eff),
pos=4, cex=.7)
The half-normal plot suggests that A, C, D, AC, and AD are the important effects.
active <- c("A","C","D","A:C","A:D")
SS_effects <- 4*effects^2
SSE <- sum(SS_effects[!names(SS_effects) %in% active])
dfE <- sum(!names(SS_effects) %in% active)
MSE <- SSE/dfE
SS_active <- SS_effects[active]
F_active <- SS_active/MSE
p_active <- pf(F_active, 1, dfE, lower.tail=FALSE)
results <- data.frame(
Effect=active,
SS=SS_active,
F=F_active,
p_value=p_active
)
results
## Effect SS F p_value
## A A 81.00 49.846154 3.456198e-05
## C C 16.00 9.846154 1.054853e-02
## D D 42.25 26.000000 4.646914e-04
## A:C A:C 72.25 44.461538 5.582907e-05
## A:D A:D 64.00 39.384615 9.193069e-05
At \(\alpha=0.05\), A, C, D, AC, and AD are significant.