# 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

1 (a) Half-normal plot

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.

2 (b) Pool nonsignificant effects into error

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.