library(readr)
df <- read.csv("https://raw.githubusercontent.com/tmatis12/datafiles/main/PowderProduction.csv")

Full Factorial Design & Analysis

  1. ( a ) Model Equation for a Full Factorial Model.

\[ y_{ijkl}: \mu + \alpha_{i} + \beta_{j}+ \gamma_{k}+ \alpha \beta_{ij} + \alpha \gamma_{ik} + \beta \gamma_{jk} + \alpha \beta \gamma_{ijk} + \epsilon_{ijkl} \]

1.( b ) Considering the Factors as fixed effects.

library(GAD)
df$Ammonium <- as.fixed(df$Ammonium)
df$StirRate <- as.fixed(df$StirRate)
df$Temperature <- as.fixed(df$Temperature)
df
##    Ammonium StirRate Temperature Density
## 1         2      100           8   14.68
## 2         2      100           8   15.18
## 3        30      100           8   15.12
## 4        30      100           8   17.48
## 5         2      150           8    7.54
## 6         2      150           8    6.66
## 7        30      150           8   12.46
## 8        30      150           8   12.62
## 9         2      100          40   10.95
## 10        2      100          40   17.68
## 11       30      100          40   12.65
## 12       30      100          40   15.96
## 13        2      150          40    8.03
## 14        2      150          40    8.84
## 15       30      150          40   14.96
## 16       30      150          40   14.96

Model 1 (Considering 3 factors interaction)

model<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + Ammonium*Temperature + StirRate*Temperature + StirRate*Ammonium*Temperature, data=df)
summary(model)
##                               Df Sum Sq Mean Sq F value  Pr(>F)   
## Ammonium                       1  44.39   44.39  11.180 0.01018 * 
## StirRate                       1  70.69   70.69  17.804 0.00292 **
## Temperature                    1   0.33    0.33   0.083 0.78117   
## Ammonium:StirRate              1  28.12   28.12   7.082 0.02875 * 
## Ammonium:Temperature           1   0.02    0.02   0.005 0.94281   
## StirRate:Temperature           1  10.13   10.13   2.551 0.14889   
## Ammonium:StirRate:Temperature  1   1.52    1.52   0.383 0.55341   
## Residuals                      8  31.76    3.97                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

According to the given alpha value = 0.05, the three factor interaction term is insignificant so we are dropping it from further analysis.

Model 2 (Now 2 factors dropping one)

model2<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + Ammonium*Temperature + StirRate*Temperature, data=df)
summary(model2)
##                      Df Sum Sq Mean Sq F value  Pr(>F)   
## Ammonium              1  44.39   44.39  12.004 0.00711 **
## StirRate              1  70.69   70.69  19.115 0.00179 **
## Temperature           1   0.33    0.33   0.089 0.77268   
## Ammonium:StirRate     1  28.12   28.12   7.603 0.02221 * 
## Ammonium:Temperature  1   0.02    0.02   0.006 0.94054   
## StirRate:Temperature  1  10.13   10.13   2.739 0.13232   
## Residuals             9  33.28    3.70                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

According to the given alpha value = 0.05, the two factor interaction term of ammonium and temperature is insignificant so we are dropping it from further analysis.

Model 3

model3<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + StirRate*Temperature, data=df)
summary(model3)
##                      Df Sum Sq Mean Sq F value  Pr(>F)    
## Ammonium              1  44.39   44.39  13.329 0.00446 ** 
## StirRate              1  70.69   70.69  21.225 0.00097 ***
## Temperature           1   0.33    0.33   0.098 0.76019    
## Ammonium:StirRate     1  28.12   28.12   8.443 0.01568 *  
## StirRate:Temperature  1  10.13   10.13   3.041 0.11178    
## Residuals            10  33.30    3.33                    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

According to the given alpha value = 0.05, the two factor interaction term of stir rate and temperature is insignificant so we are dropping it from further analysis.

Model 4

model4<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate, data=df)
summary(model4)
##                   Df Sum Sq Mean Sq F value  Pr(>F)   
## Ammonium           1  44.39   44.39  11.242 0.00644 **
## StirRate           1  70.69   70.69  17.903 0.00141 **
## Temperature        1   0.33    0.33   0.083 0.77861   
## Ammonium:StirRate  1  28.12   28.12   7.121 0.02185 * 
## Residuals         11  43.43    3.95                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

According to the given alpha value = 0.05, main factor of temperature is insignificant so we are dropping it from further analysis.

Model 5

model5<-aov(Density ~ Ammonium + StirRate
           + Ammonium*StirRate, data=df)
summary(model5)
##                   Df Sum Sq Mean Sq F value   Pr(>F)    
## Ammonium           1  44.39   44.39   12.17 0.004472 ** 
## StirRate           1  70.69   70.69   19.38 0.000861 ***
## Ammonium:StirRate  1  28.12   28.12    7.71 0.016751 *  
## Residuals         12  43.76    3.65                     
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

So, the significant factors are Ammonium, Stir rate and ammonium stir rate interaction term are significant.

Interaction Plot

interaction.plot(df$Ammonium,df$StirRate,df$Density)

Conclusion : We can see from the interaction plot also that ammonium and density are significant factors.

Analyzing P-values in different types of Models (Fixed and Mixed)

position=c(1,2)
temperature=c(800,825,850)
df1<- expand.grid(position,temperature)
df1
##   Var1 Var2
## 1    1  800
## 2    2  800
## 3    1  825
## 4    2  825
## 5    1  850
## 6    2  850
df2 <- rbind(df1,df1,df1)
df2
##    Var1 Var2
## 1     1  800
## 2     2  800
## 3     1  825
## 4     2  825
## 5     1  850
## 6     2  850
## 7     1  800
## 8     2  800
## 9     1  825
## 10    2  825
## 11    1  850
## 12    2  850
## 13    1  800
## 14    2  800
## 15    1  825
## 16    2  825
## 17    1  850
## 18    2  850
colnames(df2) <- c("Position","Temperature")
df2
##    Position Temperature
## 1         1         800
## 2         2         800
## 3         1         825
## 4         2         825
## 5         1         850
## 6         2         850
## 7         1         800
## 8         2         800
## 9         1         825
## 10        2         825
## 11        1         850
## 12        2         850
## 13        1         800
## 14        2         800
## 15        1         825
## 16        2         825
## 17        1         850
## 18        2         850
df2$Response <- c(570, 528, 1063, 988, 565, 526,
                  565, 547, 1080, 1026, 510, 538,
                  583, 521, 1043, 1004, 590, 532)
df2
##    Position Temperature Response
## 1         1         800      570
## 2         2         800      528
## 3         1         825     1063
## 4         2         825      988
## 5         1         850      565
## 6         2         850      526
## 7         1         800      565
## 8         2         800      547
## 9         1         825     1080
## 10        2         825     1026
## 11        1         850      510
## 12        2         850      538
## 13        1         800      583
## 14        2         800      521
## 15        1         825     1043
## 16        2         825     1004
## 17        1         850      590
## 18        2         850      532


2. ( a ) Assuming Both Temperature and Position are fixed Effects

df2$Position <- as.fixed(df2$Position)
df2$Temperature <- as.fixed(df2$Temperature)
model2a <- aov(Response~Position + Temperature + Position*Temperature, data=df2)
GAD::gad(model2a)
## $anova
## Analysis of Variance Table
## 
## Response: Response
##                      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    
## Residuals            12   5371     448                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model2a)
##                      Df Sum Sq Mean Sq  F value   Pr(>F)    
## Position              1   7160    7160   15.998  0.00176 ** 
## Temperature           2 945342  472671 1056.117 3.25e-14 ***
## Position:Temperature  2    818     409    0.914  0.42711    
## Residuals            12   5371     448                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

a. The P values are Position = 0.001 , Temperature = 3.25e-14 , Position: Temperature = 0.0427

df3 <- df2
df3$Position <- as.random(df3$Position)
df3$Temperature <- as.random(df3$Temperature)
model3a <- aov(Response~Position + Temperature + Position*Temperature, data=df3)
GAD::gad(model3a)
## $anova
## Analysis of Variance Table
## 
## Response: Response
##                      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    
## Residuals            12   5371     448                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model3a)
##                      Df Sum Sq Mean Sq  F value   Pr(>F)    
## Position              1   7160    7160   15.998  0.00176 ** 
## Temperature           2 945342  472671 1056.117 3.25e-14 ***
## Position:Temperature  2    818     409    0.914  0.42711    
## Residuals            12   5371     448                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

b. The P values are Position = 0.052 , Temperature = 0.00086 , Position: Temperature = 0.0427

df4 <- df2
df4$Position <- as.fixed(df4$Position)
df4$Temperature <- as.random(df4$Temperature)
model4a <- aov(Response~Position + Temperature + Position*Temperature, data=df3)
GAD::gad(model4a)
## $anova
## Analysis of Variance Table
## 
## Response: Response
##                      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    
## Residuals            12   5371     448                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(model4a)
##                      Df Sum Sq Mean Sq  F value   Pr(>F)    
## Position              1   7160    7160   15.998  0.00176 ** 
## Temperature           2 945342  472671 1056.117 3.25e-14 ***
## Position:Temperature  2    818     409    0.914  0.42711    
## Residuals            12   5371     448                      
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

c. The P values are Position = 0.052 , Temperature = 0.00086 , Position: Temperature = 0.0427

d. F-statistics is calculated using residual error as denominator in the case of fixed effect model.
F-statistics is calculated using interaction in denominator in the case of random effect model.
Therefore, the changing F-statistics resulted in changing P-values.

Complete R-code

library(readr)
df <- read.csv("https://raw.githubusercontent.com/tmatis12/datafiles/main/PowderProduction.csv")

library(GAD)
df$Ammonium <- as.fixed(df$Ammonium)
df$StirRate <- as.fixed(df$StirRate)
df$Temperature <- as.fixed(df$Temperature)
df

model<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + Ammonium*Temperature + StirRate*Temperature + StirRate*Ammonium*Temperature, data=df)
summary(model)

model2<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + Ammonium*Temperature + StirRate*Temperature, data=df)
summary(model2)

model3<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate + StirRate*Temperature, data=df)
summary(model3)

model4<-aov(Density ~ Ammonium + StirRate + Temperature 
           + Ammonium*StirRate, data=df)
summary(model4)

model5<-aov(Density ~ Ammonium + StirRate
           + Ammonium*StirRate, data=df)
summary(model5)

interaction.plot(df$Ammonium,df$StirRate,df$Density)







position=c(1,2)
temperature=c(800,825,850)
df1<- expand.grid(position,temperature)
df1

df2 <- rbind(df1,df1,df1)
df2

colnames(df2) <- c("Position","Temperature")
df2

df2$Response <- c(570, 528, 1063, 988, 565, 526,
                  565, 547, 1080, 1026, 510, 538,
                  583, 521, 1043, 1004, 590, 532)
df2

df2$Position <- as.fixed(df2$Position)
df2$Temperature <- as.fixed(df2$Temperature)
model2a <- aov(Response~Position + Temperature + Position*Temperature, data=df2)
GAD::gad(model2a)
summary(model2a)

df3 <- df2
df3$Position <- as.random(df3$Position)
df3$Temperature <- as.random(df3$Temperature)
model3a <- aov(Response~Position + Temperature + Position*Temperature, data=df3)
GAD::gad(model3a)
summary(model3a)

df4 <- df2
df4$Position <- as.fixed(df4$Position)
df4$Temperature <- as.random(df4$Temperature)
model4a <- aov(Response~Position + Temperature + Position*Temperature, data=df3)
GAD::gad(model4a)
summary(model4a)