knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE)
model: \[ y = \mu + A + B + C + AB + AC + BC + ABC + \varepsilon \]
# Data
powder <- read.csv("https://raw.githubusercontent.com/tmatis12/datafiles/main/PowderProduction.csv")
# Treat as factors
powder$Ammonium <- as.factor(powder$Ammonium)
powder$StirRate <- as.factor(powder$StirRate)
powder$Temperature <- as.factor(powder$Temperature)
# Full model
fit_full <- aov(Density ~ Ammonium*StirRate*Temperature, data = powder)
anova(fit_full)
## Analysis of Variance Table
##
## Response: Density
## Df Sum Sq Mean Sq F value Pr(>F)
## Ammonium 1 44.389 44.389 11.1803 0.010175 *
## StirRate 1 70.686 70.686 17.8037 0.002918 **
## Temperature 1 0.328 0.328 0.0826 0.781170
## Ammonium:StirRate 1 28.117 28.117 7.0817 0.028754 *
## Ammonium:Temperature 1 0.022 0.022 0.0055 0.942808
## StirRate:Temperature 1 10.128 10.128 2.5510 0.148890
## Ammonium:StirRate:Temperature 1 1.519 1.519 0.3826 0.553412
## Residuals 8 31.762 3.970
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# Step down reduction
fit1 <- update(fit_full, . ~ . - Ammonium:StirRate:Temperature)
drop1(fit1, test="F")
## Single term deletions
##
## Model:
## Density ~ Ammonium + StirRate + Temperature + Ammonium:StirRate +
## Ammonium:Temperature + StirRate:Temperature
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 33.281 25.719
## Ammonium:StirRate 1 28.1165 61.398 33.517 7.6033 0.02221 *
## Ammonium:Temperature 1 0.0218 33.303 23.729 0.0059 0.94054
## StirRate:Temperature 1 10.1283 43.410 27.970 2.7389 0.13232
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit2 <- update(fit1, . ~ . - Ammonium:Temperature)
drop1(fit2, test="F")
## Single term deletions
##
## Model:
## Density ~ Ammonium + StirRate + Temperature + Ammonium:StirRate +
## StirRate:Temperature
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 33.303 23.729
## Ammonium:StirRate 1 28.116 61.420 31.522 8.4426 0.01568 *
## StirRate:Temperature 1 10.128 43.431 25.977 3.0412 0.11178
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
fit3 <- update(fit2, . ~ . - StirRate:Temperature)
drop1(fit3, test="F")
## Single term deletions
##
## Model:
## Density ~ Ammonium + StirRate + Temperature + Ammonium:StirRate
## Df Sum of Sq RSS AIC F value Pr(>F)
## <none> 43.431 25.978
## Temperature 1 0.3278 43.759 24.098 0.0830 0.77861
## Ammonium:StirRate 1 28.1165 71.548 31.964 7.1211 0.02185 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# what stays significant when run: A, B, and A:B
fit_final <- aov(Density ~ Ammonium*StirRate, data = powder)
anova(fit_final)
## Analysis of Variance Table
##
## Response: Density
## Df Sum Sq Mean Sq F value Pr(>F)
## Ammonium 1 44.389 44.389 12.1727 0.0044721 **
## StirRate 1 70.686 70.686 19.3841 0.0008612 ***
## Ammonium:StirRate 1 28.117 28.117 7.7103 0.0167511 *
## Residuals 12 43.759 3.647
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
summary(fit_final)
## 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
# Quick interaction plots
par(mfrow=c(1,3))
with(powder, interaction.plot(Ammonium, StirRate, Density, main="A:B"))
with(powder, interaction.plot(Ammonium, Temperature, Density, main="A:C"))
with(powder, interaction.plot(StirRate, Temperature, Density, main="B:C"))
par(mfrow=c(1,1))
# Quick residual checks
par(mfrow=c(2,2)); plot(fit_final); par(mfrow=c(1,1))
Randomize 8 treatments within each of 3 blocks.
set.seed(271828)
A <- c("A1","A2")
B <- c("B1","B2")
C <- c("C1","C2")
trts <- with(expand.grid(A=A,B=B,C=C), paste(A,B,C,sep=":"))
make_block <- function(bname, trts) {
data.frame(block=bname,
plot=1:length(trts),
trt=sample(trts))
}
book <- rbind(
make_block("Block1", trts),
make_block("Block2", trts),
make_block("Block3", trts)
)
book
## block plot trt
## 1 Block1 1 A2:B1:C2
## 2 Block1 2 A1:B2:C2
## 3 Block1 3 A2:B2:C1
## 4 Block1 4 A2:B2:C2
## 5 Block1 5 A1:B1:C1
## 6 Block1 6 A2:B1:C1
## 7 Block1 7 A1:B2:C1
## 8 Block1 8 A1:B1:C2
## 9 Block2 1 A1:B1:C2
## 10 Block2 2 A2:B2:C1
## 11 Block2 3 A1:B2:C1
## 12 Block2 4 A1:B1:C1
## 13 Block2 5 A2:B1:C1
## 14 Block2 6 A1:B2:C2
## 15 Block2 7 A2:B1:C2
## 16 Block2 8 A2:B2:C2
## 17 Block3 1 A1:B2:C2
## 18 Block3 2 A2:B1:C2
## 19 Block3 3 A1:B1:C2
## 20 Block3 4 A1:B2:C1
## 21 Block3 5 A2:B2:C1
## 22 Block3 6 A2:B1:C1
## 23 Block3 7 A2:B2:C2
## 24 Block3 8 A1:B1:C1