--- title: "STAT 516 Lec 05 in class" format: html --- ```{r} link <- url("https://people.stat.sc.edu/gregorkb/data/KNNLrust.txt") rust <- read.csv(link,col.names=c("score","brand","rep"),sep = "", header = FALSE) head(rust) ``` ```{r} boxplot(score ~ as.factor(brand), data = rust) ``` ```{r} lm_out <- lm(score ~ as.factor(brand), data = rust) lm_out ``` Compute all the quantities in the ANOVA table: ```{r} Y <- rust$score Y.. <- mean(Y) # overall mean Yi. <- aggregate(score ~ brand,mean, data = rust)[,2] n <- 10 a <- 4 N <- a*n SStot <- sum( (Y - Y..)**2) SStrt <- sum( n*(Yi. - Y..)^2) SSerror <- SStot - SStrt MStrt <- SStrt / (a - 1) MSerror <- SSerror / (N - a) Ftest <- MStrt / MSerror Ftest alpha <- 0.05 Fcrit <- qf(1 - alpha, a - 1, N - a) Fcrit pval <- 1 - pf(Ftest, a - 1, N - a) ``` An easier way: ```{r} lm_out <- lm(score ~ as.factor(brand), data = rust) anova(lm_out) ``` ```{r} aggregate(score ~ brand,mean, data = rust) ``` Tukey interval using value from the table: ```{r} lo <- 43.14 - 89.44 - 3.85 * sqrt(6.1)/sqrt(10) up <- 43.14 - 89.44 + 3.85 * sqrt(6.1)/sqrt(10) c(lo,up) ``` Tukey interval using exact value: ```{r} lo <- 43.14 - 89.44 - qtukey(1-alpha,a,a*(n-1)) * sqrt(6.1)/sqrt(10) up <- 43.14 - 89.44 + qtukey(1-alpha,a,a*(n-1))* sqrt(6.1)/sqrt(10) c(lo,up) ``` Tukey's automatically: ```{r} aov_out <- aov(score ~ as.factor(brand), data = rust) TukeyHSD(aov_out) plot(TukeyHSD(aov_out)) ``` Dunnett's with group 1 as baseline with approximate number from table: Group 2 minus group 1. ```{r} lo <- 89.44 - 43.14 - 2.47 * sqrt(6.1)*sqrt(2/10) up <- 89.44 - 43.14 + 2.47 * sqrt(6.1)*sqrt(2/10) c(lo,up) ``` Dunnett's automatically: ```{r} library(DescTools) # first time run install.packages("DescTool") Dunnetts_out <- DunnettTest(score ~ as.factor(brand), data = rust, control = "1") Dunnetts_out plot(Dunnetts_out) ``` Check assumptions: ```{r} plot(lm_out,which=1,add.smooth= F) plot(lm_out, which = 2) ``` Levene's test for equal variances. Get residuals from original one-way ANOVA model: ```{r} eabs <- abs(lm_out$residuals) lm_out2 <- lm(eabs ~ as.factor(rust$brand)) summary(lm_out2) ``` ```{r} library(car) leveneTest(score ~ as.factor(brand), data = rust, center = mean) ```