Four factors are studied at two levels:
The experiment is a full \(2^4\) factorial design with 16 runs.
library(DoE.base)
A <- c(-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1)
B <- c(-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1)
C <- c(-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,1)
D <- c(rep(-1,8),rep(1,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)
dat
## A B C D Yield
## 1 -1 -1 -1 -1 12
## 2 1 -1 -1 -1 18
## 3 -1 1 -1 -1 13
## 4 1 1 -1 -1 16
## 5 -1 -1 1 -1 17
## 6 1 -1 1 -1 15
## 7 -1 1 1 -1 20
## 8 1 1 1 -1 15
## 9 -1 -1 -1 1 10
## 10 1 -1 -1 1 25
## 11 -1 1 -1 1 13
## 12 1 1 -1 1 24
## 13 -1 -1 1 1 19
## 14 1 -1 1 1 21
## 15 -1 1 1 1 17
## 16 1 1 1 1 23
mod <- lm(Yield ~ A*B*C*D, data=dat)
coef(mod)
## (Intercept) A B C D
## 1.737500e+01 2.250000e+00 2.500000e-01 1.000000e+00 1.625000e+00
## A:B A:C B:C A:D B:D
## -3.750000e-01 -2.125000e+00 1.250000e-01 2.000000e+00 -1.027824e-16
## C:D A:B:C A:B:D A:C:D B:C:D
## -1.595946e-16 5.000000e-01 3.750000e-01 -1.250000e-01 -3.750000e-01
## A:B:C:D
## 5.000000e-01
halfnormal(mod)
From the half-normal plot, the effects A, C, D, AC, and AD appear to be important because they are expected to deviate noticeably from the reference line.
The remaining effects appear relatively small and can be pooled into error.
The full factorial model has no residual degrees of freedom because there is only one observation per treatment combination.
We pool B, AB, BC, BD, CD, ABC, ABD, ACD, BCD, and ABCD into error.
The reduced model retains A, C, D, AC, and AD.
model2 <- aov(Yield ~ A + C + D + A:C + A:D,data=dat)
summary(model2)
## Df Sum Sq Mean Sq F value Pr(>F)
## A 1 81.00 81.00 49.846 3.46e-05 ***
## C 1 16.00 16.00 9.846 0.010549 *
## D 1 42.25 42.25 26.000 0.000465 ***
## A:C 1 72.25 72.25 44.462 5.58e-05 ***
## A:D 1 64.00 64.00 39.385 9.19e-05 ***
## Residuals 10 16.25 1.62
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
final_model <- lm(Yield ~ A + C + D + A:C + A:D,data=dat)
summary(final_model)
##
## Call:
## lm.default(formula = Yield ~ A + C + D + A:C + A:D, data = dat)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.6250 -0.9375 0.1250 0.8750 1.3750
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 17.3750 0.3187 54.520 1.04e-13 ***
## A 2.2500 0.3187 7.060 3.46e-05 ***
## C 1.0000 0.3187 3.138 0.010549 *
## D 1.6250 0.3187 5.099 0.000465 ***
## A:C -2.1250 0.3187 -6.668 5.58e-05 ***
## A:D 2.0000 0.3187 6.276 9.19e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.275 on 10 degrees of freedom
## Multiple R-squared: 0.9443, Adjusted R-squared: 0.9165
## F-statistic: 33.91 on 5 and 10 DF, p-value: 5.856e-06
coef(final_model)
## (Intercept) A C D A:C A:D
## 17.375 2.250 1.000 1.625 -2.125 2.000
The fitted regression equation is
\[\hat{Y}=17.375+2.25A+1.00C+1.625D -2.125AC+2.00AD\]
At \(\alpha=0.05\), the p-values from the reduced ANOVA model are:
All five retained effects have p-values less than 0.05 and are statistically significant under the pooled-error model.
The half-normal plot suggests that Time (A), Pressure (C), Temperature (D), Time \(\times\) Pressure (AC), and Time \(\times\) Temperature (AD) are important effects.
The remaining effects are pooled into error. The reduced ANOVA confirms that A, C, D, AC, and AD are significant at the 0.05 level.
Concentration (B) does not appear to have a significant effect on yield.
These conclusions depend on the assumption that the pooled effects are negligible and can be used to estimate experimental error.
# Problem (a)
library(DoE.base)
A <- c(-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1)
B <- c(-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1)
C <- c(-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,1)
D <- c(rep(-1,8),rep(1,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)
dat
mod <- lm(Yield ~ A*B*C*D, data=dat)
coef(mod)
halfnormal(mod)
# Problem (b)
model2 <- aov(Yield ~ A + C + D + A:C + A:D, data=dat)
summary(model2)
final_model <- lm(Yield ~ A + C + D + A:C + A:D, data=dat)
summary(final_model)
coef(final_model)