An engineer is interested in the effects of cutting speed A, tool geometry B, and cutting angle C on the life (in hours) of a machine tool. Two levels of each factor are chosen, and one replicate of a 23 factorial design is run.

2 Blocks

Assuming the design is run in 2 blocks I would confound the three-factor interaction with the blocks.Since the main effects and the two-factor interactions are more important and the three-factor interaction is typically considered insignificant.

My proposed design is as follows:

# Create data table for 1(b)
table1<-data.frame(
  Run = c("(1)", "a", "b", "ab", "c", "ac", "bc", "abc"),
  A = c("'-'", "'+'", "'-'", "'+'", "'-'", "'+'", "'-'", "'+'"),
  B = c("'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'", "'+'"),
  C = c("'-'", "'-'", "'-'", "'-'", "'+'", "'+'", "'+'", "'+'"),
  ABC = c("'-'", "'+'", "'+'", "'-'", "'+'", "'-'", "'-'", "'+'"),
  Block = c(1, 2, 2, 1, 2, 1, 1, 2)
)

#Display Table 1
knitr::kable(table1,format="html",align="c", caption="Proposed Design For 2 Block Design")
Proposed Design For 2 Block Design
Run A B C ABC Block
‘-’ ‘-’ ‘-’ ‘-’ 1
a ‘+’ ‘-’ ‘-’ ‘+’ 2
b ‘-’ ‘+’ ‘-’ ‘+’ 2
ab ‘+’ ‘+’ ‘-’ ‘-’ 1
c ‘-’ ‘-’ ‘+’ ‘+’ 2
ac ‘+’ ‘-’ ‘+’ ‘-’ 1
bc ‘-’ ‘+’ ‘+’ ‘-’ 1
abc ‘+’ ‘+’ ‘+’ ‘+’ 2

4 Blocks

Corner points assigned:

Block 1 - (1) - ab - ac - bc

Block 2 - a - b - c - abc

4 Blocks

If running the design with four blocks, you will have three degrees of freedom and therefore will need to confound a total of three effects with the blocks. To keep the main effects from being confounded with the blocks, we must choose the three two-factor effects (AB, AC, BC) to be confounded with the blocks.

My proposed design is as follows:

# Create data tables for 2(b)
table2<-data.frame(
 Block = c(1,2,3,4),
 AB_Sign = c("'+'","'-'","'+'","'-'"),
 AC_Sign = c("'+'","'+'","'-'","'-'")
)

#Display Table 2
knitr::kable(table2,format="html",align="c", caption="Proposed Design For 4 Block Design")
Proposed Design For 4 Block Design
Block AB_Sign AC_Sign
1 ‘+’ ‘+’
2 ‘-’ ‘+’
3 ‘+’ ‘-’
4 ‘-’ ‘-’
table3<-data.frame(
  Run = c("(1)", "a", "b", "ab", "c", "ac", "bc", "abc"),
  A = c("'-'", "'+'", "'-'", "'+'", "'-'", "'+'", "'-'", "'+'"),
  B = c("'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'", "'+'"),
  C = c("'-'", "'-'", "'-'", "'-'", "'+'", "'+'", "'+'", "'+'"),
  AB = c("'+'", "'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'"),
  AC = c("'+'", "'-'", "'+'", "'-'", "'-'", "'+'", "'-'", "'+'"),
  Block = c(1,4,2,3,3,2,4,1)
)

#Display Table 3
knitr::kable(table3,format="html",align="c", caption="Proposed Design For 4 Block Design")
Proposed Design For 4 Block Design
Run A B C AB AC Block
‘-’ ‘-’ ‘-’ ‘+’ ‘+’ 1
a ‘+’ ‘-’ ‘-’ ‘-’ ‘-’ 4
b ‘-’ ‘+’ ‘-’ ‘-’ ‘+’ 2
ab ‘+’ ‘+’ ‘-’ ‘+’ ‘-’ 3
c ‘-’ ‘-’ ‘+’ ‘+’ ‘-’ 3
ac ‘+’ ‘-’ ‘+’ ‘-’ ‘+’ 2
bc ‘-’ ‘+’ ‘+’ ‘-’ ‘-’ 4
abc ‘+’ ‘+’ ‘+’ ‘+’ ‘+’ 1

Corner points assigned:

Block 1 (AB+, AC+) - (1) - abc

Block 2 (AB-, AC+) - b - ac

Block 3 (AB+, AC-) - ab - c Block 4 (AB-, AC-) - a - bc

Half Normal Plot

Using the provided data, we generate a half-normal plot.

library(DoE.base)

# Input the dataset
    tool_life <- data.frame(
      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)
    )

# Fit a linear model
model <- lm(Life ~ A * B * C, data = tool_life)

coef(model)
## (Intercept)           A           B           C         A:B         A:C 
##      40.875       0.625       6.375       4.875      -0.875      -6.875 
##         B:C       A:B:C 
##      -2.625      -3.375
#Create half-normal plot
halfnormal(model)

The effect “B” (Tool Geometry) appears to be significant due to it deviating from the straight line of other effects. The ABC effect deviates far from the normal line and appears significant. The block effect seems significant.

summary(model)
## 
## Call:
## lm.default(formula = Life ~ A * B * C, data = tool_life)
## 
## Residuals:
## ALL 8 residuals are 0: no residual degrees of freedom!
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)
## (Intercept)   40.875        NaN     NaN      NaN
## A              0.625        NaN     NaN      NaN
## B              6.375        NaN     NaN      NaN
## C              4.875        NaN     NaN      NaN
## A:B           -0.875        NaN     NaN      NaN
## A:C           -6.875        NaN     NaN      NaN
## B:C           -2.625        NaN     NaN      NaN
## A:B:C         -3.375        NaN     NaN      NaN
## 
## Residual standard error: NaN on 0 degrees of freedom
## Multiple R-squared:      1,  Adjusted R-squared:    NaN 
## F-statistic:   NaN on 7 and 0 DF,  p-value: NA
knitr::opts_chunk$set(echo=TRUE, warning=FALSE, message=FALSE)
# Create data table for 1(b)
table1<-data.frame(
  Run = c("(1)", "a", "b", "ab", "c", "ac", "bc", "abc"),
  A = c("'-'", "'+'", "'-'", "'+'", "'-'", "'+'", "'-'", "'+'"),
  B = c("'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'", "'+'"),
  C = c("'-'", "'-'", "'-'", "'-'", "'+'", "'+'", "'+'", "'+'"),
  ABC = c("'-'", "'+'", "'+'", "'-'", "'+'", "'-'", "'-'", "'+'"),
  Block = c(1, 2, 2, 1, 2, 1, 1, 2)
)

#Display Table 1
knitr::kable(table1,format="html",align="c", caption="Proposed Design For 2 Block Design")


# Create data tables for 2(b)
table2<-data.frame(
 Block = c(1,2,3,4),
 AB_Sign = c("'+'","'-'","'+'","'-'"),
 AC_Sign = c("'+'","'+'","'-'","'-'")
)

#Display Table 2
knitr::kable(table2,format="html",align="c", caption="Proposed Design For 4 Block Design")


table3<-data.frame(
  Run = c("(1)", "a", "b", "ab", "c", "ac", "bc", "abc"),
  A = c("'-'", "'+'", "'-'", "'+'", "'-'", "'+'", "'-'", "'+'"),
  B = c("'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'", "'+'"),
  C = c("'-'", "'-'", "'-'", "'-'", "'+'", "'+'", "'+'", "'+'"),
  AB = c("'+'", "'-'", "'-'", "'+'", "'+'", "'-'", "'-'", "'+'"),
  AC = c("'+'", "'-'", "'+'", "'-'", "'-'", "'+'", "'-'", "'+'"),
  Block = c(1,4,2,3,3,2,4,1)
)

#Display Table 3
knitr::kable(table3,format="html",align="c", caption="Proposed Design For 4 Block Design")
library(DoE.base)

# Input the dataset
    tool_life <- data.frame(
      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)
    )

# Fit a linear model
model <- lm(Life ~ A * B * C, data = tool_life)

coef(model)

#Create half-normal plot
halfnormal(model)
    
summary(model)