library(GAD)
library(knitr)
library(kableExtra)
An article in Quality Progress (May 2011, pp. 42-48) describes the use of factorial experiments to improve a silver powder production process. This product is used in conductive pastes to manufacture a wide variety of products ranging from silicon wafers to elastic membrane switches. We consider powder density (g/cm^2) as the response variable and critical characteristics of this product. The data is shown below.
SilverPowderData<-read.csv("https://raw.githubusercontent.com/tmatis12/datafiles/main/PowderProduction.csv")
names(SilverPowderData)[names(SilverPowderData) == "ï..Ammonium"] <- "Ammonium"
kable(SilverPowderData, align = 'c', col.names=c("Ammonium (%)", "Stir Rate (RPM)", "Temperature (C)", "Density")) %>% kable_styling(bootstrap_options = "striped", full_width = F, position = "center", latex_options = "hold_position")
| Ammonium (%) | Stir Rate (RPM) | Temperature (C) | Density |
|---|---|---|---|
| 2 | 100 | 8 | 14.68 |
| 2 | 100 | 8 | 15.18 |
| 30 | 100 | 8 | 15.12 |
| 30 | 100 | 8 | 17.48 |
| 2 | 150 | 8 | 7.54 |
| 2 | 150 | 8 | 6.66 |
| 30 | 150 | 8 | 12.46 |
| 30 | 150 | 8 | 12.62 |
| 2 | 100 | 40 | 10.95 |
| 2 | 100 | 40 | 17.68 |
| 30 | 100 | 40 | 12.65 |
| 30 | 100 | 40 | 15.96 |
| 2 | 150 | 40 | 8.03 |
| 2 | 150 | 40 | 8.84 |
| 30 | 150 | 40 | 14.96 |
| 30 | 150 | 40 | 14.96 |
Write the model equation for a full factorial model.
\(y_{ijk} + \alpha_i + \beta_j + \gamma_k + \alpha\beta_{ij} + \alpha\gamma_{ik} + \beta\gamma_{jk} + \alpha\beta\gamma_{ijk} + \epsilon{ijkl}\)
Using \(\alpha = 0.05\), determine which factors are deemed significant. Report final p-values of significant factors and include interaction plots.
*Assume Ammonium, Stir Rate, and Temperature are factors with fixed effects, each with two levels, and the design is replicated twice.
SilverPowderData$Ammonium <- as.fixed(SilverPowderData$Ammonium)
SilverPowderData$StirRate <- as.fixed(SilverPowderData$StirRate)
SilverPowderData$Temperature <- as.fixed(SilverPowderData$Temperature)
str(SilverPowderData)
## 'data.frame': 16 obs. of 4 variables:
## $ Ammonium : Factor w/ 2 levels "2","30": 1 1 2 2 1 1 2 2 1 1 ...
## $ StirRate : Factor w/ 2 levels "100","150": 1 1 1 1 2 2 2 2 1 1 ...
## $ Temperature: Factor w/ 2 levels "8","40": 1 1 1 1 1 1 1 1 2 2 ...
## $ Density : num 14.68 15.18 15.12 17.48 7.54 ...
We can see above that R is now reading Ammonium, Stir Rate, and Temperature as factors with fixed effects, each with two levels.
SilverPowderModel <- aov(SilverPowderData$Density~SilverPowderData$Ammonium+
SilverPowderData$StirRate+SilverPowderData$Temperature +SilverPowderData$Ammonium*SilverPowderData$StirRate+
SilverPowderData$Ammonium*SilverPowderData$Temperature +SilverPowderData$StirRate*SilverPowderData$Temperature+
SilverPowderData$Ammonium*SilverPowderData$StirRate*SilverPowderData$Temperature)
GAD::gad(SilverPowderModel)
## Analysis of Variance Table
##
## Response: SilverPowderData$Density
## Df
## SilverPowderData$Ammonium 1
## SilverPowderData$StirRate 1
## SilverPowderData$Temperature 1
## SilverPowderData$Ammonium:SilverPowderData$StirRate 1
## SilverPowderData$Ammonium:SilverPowderData$Temperature 1
## SilverPowderData$StirRate:SilverPowderData$Temperature 1
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature 1
## Residual 8
## Sum Sq
## SilverPowderData$Ammonium 44.389
## SilverPowderData$StirRate 70.686
## SilverPowderData$Temperature 0.328
## SilverPowderData$Ammonium:SilverPowderData$StirRate 28.117
## SilverPowderData$Ammonium:SilverPowderData$Temperature 0.022
## SilverPowderData$StirRate:SilverPowderData$Temperature 10.128
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature 1.519
## Residual 31.762
## Mean Sq
## SilverPowderData$Ammonium 44.389
## SilverPowderData$StirRate 70.686
## SilverPowderData$Temperature 0.328
## SilverPowderData$Ammonium:SilverPowderData$StirRate 28.117
## SilverPowderData$Ammonium:SilverPowderData$Temperature 0.022
## SilverPowderData$StirRate:SilverPowderData$Temperature 10.128
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature 1.519
## Residual 3.970
## F value
## SilverPowderData$Ammonium 11.1803
## SilverPowderData$StirRate 17.8037
## SilverPowderData$Temperature 0.0826
## SilverPowderData$Ammonium:SilverPowderData$StirRate 7.0817
## SilverPowderData$Ammonium:SilverPowderData$Temperature 0.0055
## SilverPowderData$StirRate:SilverPowderData$Temperature 2.5510
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature 0.3826
## Residual
## Pr(>F)
## SilverPowderData$Ammonium 0.010175
## SilverPowderData$StirRate 0.002918
## SilverPowderData$Temperature 0.781170
## SilverPowderData$Ammonium:SilverPowderData$StirRate 0.028754
## SilverPowderData$Ammonium:SilverPowderData$Temperature 0.942808
## SilverPowderData$StirRate:SilverPowderData$Temperature 0.148890
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature 0.553412
## Residual
##
## SilverPowderData$Ammonium *
## SilverPowderData$StirRate **
## SilverPowderData$Temperature
## SilverPowderData$Ammonium:SilverPowderData$StirRate *
## SilverPowderData$Ammonium:SilverPowderData$Temperature
## SilverPowderData$StirRate:SilverPowderData$Temperature
## SilverPowderData$Ammonium:SilverPowderData$StirRate:SilverPowderData$Temperature
## Residual
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
The following P-values were calculated:
Ammonium: 0.010175 ***significant
Stir Rate: 0.002918 ***significant
Temperature: 0.781170 ***not significant
Interaction of Ammonium and Stir Rate: 0.028754 ***significant
Interaction of Ammonium and Temperature: 0.942808 ***not significant
Interaction of Stir Rate and Temperature: 0.148890 ***not significant
Interaction of Ammonium, Stir Rate, and Temperature: 0.553412 ***not significant
The only significant interaction is between Ammonium and Stir Rate so we will create an interaction plot for that.
interaction.plot(SilverPowderData$Ammonium, SilverPowderData$StirRate, SilverPowderData$Density)
A full factorial experiment was conducted to determine whether either firing temperature or furnace position affects the baked density of a carbon anode.
Position <- c(1,1,1,1,1,1,1,1,1,
2,2,2,2,2,2,2,2,2)
Temperature <- c(800,825,850,800,825,850,
800,825,850,800,825,850,
800,825,850,800,825,850)
Density <- c(570,1063,565,565,1080,510,
583,1043,590,528,988,526,
547,1026,538,521,1004,532)
BakingData <- data.frame(Position,Temperature,Density)
kable(BakingData, align = 'c') %>% kable_styling(bootstrap_options = "striped", full_width = F, position = "center", latex_options = "hold_position")
| Position | Temperature | Density |
|---|---|---|
| 1 | 800 | 570 |
| 1 | 825 | 1063 |
| 1 | 850 | 565 |
| 1 | 800 | 565 |
| 1 | 825 | 1080 |
| 1 | 850 | 510 |
| 1 | 800 | 583 |
| 1 | 825 | 1043 |
| 1 | 850 | 590 |
| 2 | 800 | 528 |
| 2 | 825 | 988 |
| 2 | 850 | 526 |
| 2 | 800 | 547 |
| 2 | 825 | 1026 |
| 2 | 850 | 538 |
| 2 | 800 | 521 |
| 2 | 825 | 1004 |
| 2 | 850 | 532 |
Assume that both Temperature and Position are fixed effects. Report p-values.
Position <- as.fixed(Position)
Temperature <- as.fixed(Temperature)
BakingModelA <- aov(Density~Position+Temperature+Position*Temperature)
gad(BakingModelA)
## Analysis of Variance Table
##
## Response: Density
## Df Sum Sq Mean Sq F value Pr(>F)
## Position 1 7160 7160 15.998 0.001762 **
## Temperature 2 945342 472671 1056.117 3.25e-14 ***
## Position:Temperature 2 818 409 0.914 0.427110
## Residual 12 5371 448
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Position: 0.001762
Temperature: 3.25*10^-14
Position:Temperature: 0.427110
Assume that both Temperature and Position are random effects. Report p-values.
Position <- as.random(Position)
Temperature <- as.random(Temperature)
BakingModelB <- aov(Density~Position+Temperature+Position*Temperature)
gad(BakingModelB)
## Analysis of Variance Table
##
## Response: Density
## Df Sum Sq Mean Sq F value Pr(>F)
## Position 1 7160 7160 17.504 0.0526583 .
## Temperature 2 945342 472671 1155.518 0.0008647 ***
## Position:Temperature 2 818 409 0.914 0.4271101
## Residual 12 5371 448
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Position: 0.0526583
Temperature: 0.0008647
Position:Temperature: 0.427110
Assume the Position effect is fixed and the Temperature effect is random. Report p-values.
Position <- as.fixed(Position)
Temperature <- as.random(Temperature)
BakingModelC <- aov(Density~Position+Temperature+Position*Temperature)
gad(BakingModelC)
## Analysis of Variance Table
##
## Response: Density
## Df Sum Sq Mean Sq F value Pr(>F)
## Position 1 7160 7160 17.504 0.05266 .
## Temperature 2 945342 472671 1056.117 3.25e-14 ***
## Position:Temperature 2 818 409 0.914 0.42711
## Residual 12 5371 448
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Position: 0.0566
Temperature: 3.25*10^-14
Position:Temperature: 0.427110
Comment on similarities and/or differences between the p-values in parts a,b,c.
The p-value for Position is <0.05 (meaning Position is significant) when both Position and Temperature are fixed effects, but it is >0.05 (meaning not significant) when Temperature is a random effect, whether or not Position is a fixed or random effect.
The p-value for Temperature is <0.05 (meaning Temperature is significant) whether it is a fixed or random effect.
The p-value for Position-Temperature Interaction is >0.05 (meaning Position-Temperature Interaction is not significant) whether Position and Temperature are fixed or random effects.