c:ms:2025:w07.2_factorial_anova
Differences
This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| c:ms:2025:w07.2_factorial_anova [2025/04/30 03:59] – [output interpretation] hkimscil | c:ms:2025:w07.2_factorial_anova [2026/04/20 04:04] (current) – hkimscil | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Two-way ANOVA ====== | + | ~~REDIRECT>:Factorial Anova~~ |
| - | Factorial ANOVA | + | |
| - | < | + | |
| - | rm(list=ls(all=TRUE)) | + | |
| - | + | ||
| - | ################################################# | + | |
| - | # two-way anova | + | |
| - | # subject = factor(paste(' | + | |
| - | ################################################# | + | |
| - | + | ||
| - | n.a.group <- 3 # a treatment 숫자 e.g: drug a1, a2, a3 | + | |
| - | n.b.group <- 2 # b 그룹 숫자 e.g.: exercise no(b1), yes(b2) | + | |
| - | n.sub <- 30 # 총 샘플 숫자 | + | |
| - | n.sub/ | + | |
| - | + | ||
| - | # 데이터 생성 | + | |
| - | set.seed(9) | + | |
| - | a <- gl(n.a.group, | + | |
| - | n.sub/ | + | |
| - | n.sub, | + | |
| - | labels=c(' | + | |
| - | b <- gl(n.b.group, | + | |
| - | (n.sub/ | + | |
| - | n.sub, | + | |
| - | labels=c(' | + | |
| - | a | + | |
| - | b | + | |
| - | y <- rnorm(30, mean=10) + | + | |
| - | 3.14 * (a==' | + | |
| - | 1.43 * (a==' | + | |
| - | y | + | |
| - | + | ||
| - | dat <- data.frame(a, | + | |
| - | dat | + | |
| - | # aov.dat <- aov(y~a*b) # anova test | + | |
| - | # summary(aov.dat) # summary of the test output | + | |
| - | + | ||
| - | # hand calculation | + | |
| - | table(a, | + | |
| - | tapply(y, list(a,b), mean) # 각 셀에서의 평균 | + | |
| - | tapply(y, a, mean) | + | |
| - | tapply(y, b, mean) | + | |
| - | n.within.each <- tapply(y, list(a,b), length) # the same as table(a, b) | + | |
| - | n.within.each | + | |
| - | df.within.each <- n.within.each - 1 # 각 셀에서의 샘플숫자 | + | |
| - | df.within.each | + | |
| - | df.within <- sum(df.within.each) # df within | + | |
| - | df.within | + | |
| - | + | ||
| - | var.within <- tapply(y, list(a,b), var) # var.within | + | |
| - | var.within | + | |
| - | ss.within.each <- tapply(y, list(a,b), var) * df.within.each | + | |
| - | ss.within.each | + | |
| - | ss.within <- sum(ss.within.each) # ss.within | + | |
| - | ss.within | + | |
| - | + | ||
| - | ms.within <- ss.within / df.within | + | |
| - | ms.within | + | |
| - | + | ||
| - | # interaction.plot(a, | + | |
| - | + | ||
| - | mean.a <- tapply(y, list(a), mean) | + | |
| - | mean.b <- tapply(y, list(b), mean) | + | |
| - | mean.a | + | |
| - | mean.b | + | |
| - | + | ||
| - | var.a <- tapply(y, list(a), var) | + | |
| - | var.b <- tapply(y, list(b), var) | + | |
| - | var.a | + | |
| - | var.b | + | |
| - | + | ||
| - | mean.tot <- mean(dat$y) | + | |
| - | var.tot <- var(dat$y) | + | |
| - | df.tot <- n.sub - 1 | + | |
| - | ss.tot <- var.tot * df.tot | + | |
| - | ms.tot <- ss.tot/ | + | |
| - | + | ||
| - | mean.tot | + | |
| - | var.tot | + | |
| - | df.tot | + | |
| - | ss.tot | + | |
| - | ms.tot | + | |
| - | ss.tot/ | + | |
| - | + | ||
| - | + | ||
| - | ## between | + | |
| - | mean.each <- tapply(y, list(a,b), mean) | + | |
| - | mean.each | + | |
| - | mean.tot <- mean(y) | + | |
| - | mean.tot | + | |
| - | n.each <- tapply(y, list(a,b), length) | + | |
| - | n.a.each <- tapply(y, list(a), length) | + | |
| - | n.b.each <- tapply(y, list(b), length) | + | |
| - | n.each | + | |
| - | n.a.each | + | |
| - | n.b.each | + | |
| - | + | ||
| - | + | ||
| - | + | ||
| - | ss.bet <- sum(n.each*(mean.each-mean.tot)^2) | + | |
| - | ss.bet | + | |
| - | + | ||
| - | ss.tot | + | |
| - | ss.within | + | |
| - | ss.bet | + | |
| - | ss.bet + ss.within | + | |
| - | + | ||
| - | ss.a <- sum(n.a.each * ((mean.tot - mean.a)^2)) | + | |
| - | ss.b <- sum(n.b.each * ((mean.tot - mean.b)^2)) | + | |
| - | ss.a | + | |
| - | ss.b | + | |
| - | ss.ab <- ss.bet - (ss.a + ss.b) # ss.ab = ss.interaction | + | |
| - | ss.ab | + | |
| - | + | ||
| - | ss.tot | + | |
| - | ss.bet | + | |
| - | ss.within | + | |
| - | ss.a | + | |
| - | ss.b | + | |
| - | ss.ab | + | |
| - | + | ||
| - | df.tot <- n.sub - 1 | + | |
| - | df.bet <- (n.a.group * n.b.group) - 1 | + | |
| - | df.a <- n.a.group - 1 | + | |
| - | df.b <- n.b.group - 1 | + | |
| - | df.ab <- df.bet - (df.a + df.b) | + | |
| - | df.within <- sum(df.within.each) | + | |
| - | + | ||
| - | df.tot | + | |
| - | df.bet | + | |
| - | df.a | + | |
| - | df.b | + | |
| - | df.ab | + | |
| - | df.within | + | |
| - | + | ||
| - | ms.tot <- ss.tot / df.tot # we did it above | + | |
| - | ms.bet <- ss.bet / df.bet | + | |
| - | ms.a <- ss.a / df.a | + | |
| - | ms.b <- ss.b / df.b | + | |
| - | ms.ab <- ss.ab / df.ab | + | |
| - | ms.within <- ss.within / df.within | + | |
| - | + | ||
| - | ms.tot | + | |
| - | ms.bet | + | |
| - | ms.within | + | |
| - | ms.a | + | |
| - | ms.b | + | |
| - | ms.ab | + | |
| - | + | ||
| - | + | ||
| - | f.a <- ms.a / ms.within | + | |
| - | f.b <- ms.b / ms.within | + | |
| - | f.ab <- ms.ab / ms.within | + | |
| - | + | ||
| - | alpha <- .05 | + | |
| - | # confidence interval | + | |
| - | ci <- 1 - alpha | + | |
| - | + | ||
| - | f.a | + | |
| - | # 봐야할 F분포표에서의 F-value | + | |
| - | # qt 처럼 qf 사용 | + | |
| - | # qf(alpha, df.between, df.within, lower.tail=F) 처럼 사용 | + | |
| - | qf(ci, df.a, df.within) # or | + | |
| - | qf(alpha, df.a, df.within, lower.tail = F) | + | |
| - | # 혹은 | + | |
| - | # qf(alpha, df.a, df.within, lower.tail = F) | + | |
| - | # 도 마찬가지 | + | |
| - | f.a.crit <- qf(ci, df.a, df.within) | + | |
| - | f.a > f.a.crit # 만약 f.a가 크다면 | + | |
| - | # 혹은 f.a 값에 해당하는 percentage를 구하면 | + | |
| - | pf(f.a, df.a, df.within, lower.tail = F) | + | |
| - | + | ||
| - | f.b | + | |
| - | qf(ci, df.b, df.within) | + | |
| - | f.b > qf(ci, df.b, df.within) | + | |
| - | pf(f.b, df.b, df.within, lower.tail = F) | + | |
| - | + | ||
| - | f.ab | + | |
| - | qf(ci, df.ab, df.within) | + | |
| - | f.ab > qf(ci, df.ab, df.within) | + | |
| - | pf(f.ab, df.ab, df.within, lower.tail = F) | + | |
| - | + | ||
| - | # aov result | + | |
| - | aov.dat.all <- aov(y ~ a * b, data = dat) # anova test | + | |
| - | summary(aov.dat.all) # summary of the test output | + | |
| - | aov.dat.noint <- aov(y ~ a + b, data = dat) | + | |
| - | # interaction이 갖는 SS와 df를 residuals이 갖음을 주목 | + | |
| - | summary(aov.dat.noint) | + | |
| - | aov.dat.all2 <- aov(y ~ a + b + a:b, data = dat) | + | |
| - | summary(aov.dat.all2) | + | |
| - | aov.dat.all # what is standard error of residuals | + | |
| - | + | ||
| - | # post-hoc test | + | |
| - | TukeyHSD(aov.dat.all) | + | |
| - | TukeyHSD(aov.dat.all, | + | |
| - | TukeyHSD(aov.dat.all, | + | |
| - | TukeyHSD(aov.dat.all, | + | |
| - | boxplot(dat$y~dat$a) | + | |
| - | boxplot(dat$y~dat$b) | + | |
| - | plot(TukeyHSD(aov.dat.all, | + | |
| - | las = 2 # rotate x-axis ticks | + | |
| - | ) | + | |
| - | + | ||
| - | + | ||
| - | # | + | |
| - | # | + | |
| - | # see another e.g. at | + | |
| - | # https:// | + | |
| - | # | + | |
| - | # | + | |
| - | + | ||
| - | </code> | + | |
| - | + | ||
| - | ====== Output, two-way ANOVA ====== | + | |
| - | < | + | |
| - | > rm(list=ls(all=TRUE)) | + | |
| - | > | + | |
| - | > ################################################# | + | |
| - | > # two-way anova | + | |
| - | > # subject = factor(paste(' | + | |
| - | > ################################################# | + | |
| - | > | + | |
| - | > n.a.group <- 3 # a treatment 숫자 e.g: drug a1, a2, a3 | + | |
| - | > n.b.group <- 2 # b 그룹 숫자 e.g.: exercise no(b1), yes(b2) | + | |
| - | > n.sub <- 30 # 총 샘플 숫자 | + | |
| - | > n.sub/ | + | |
| - | [1] 10 | + | |
| - | > | + | |
| - | > # 데이터 생성 | + | |
| - | > set.seed(9) | + | |
| - | > a <- gl(n.a.group, | + | |
| - | + | + | |
| - | + | + | |
| - | + | + | |
| - | > b <- gl(n.b.group, | + | |
| - | + | + | |
| - | + | + | |
| - | + | + | |
| - | > a | + | |
| - | [1] drg1 drg1 drg1 drg1 drg1 drg1 drg1 drg1 drg1 drg1 drg2 drg2 drg2 drg2 drg2 drg2 drg2 drg2 drg2 drg2 drg3 | + | |
| - | [22] drg3 drg3 drg3 drg3 drg3 drg3 drg3 drg3 drg3 | + | |
| - | Levels: drg1 drg2 drg3 | + | |
| - | > b | + | |
| - | [1] noex noex noex noex noex exerc exerc exerc exerc exerc noex noex noex noex noex exerc exerc exerc | + | |
| - | [19] exerc exerc noex noex noex noex noex exerc exerc exerc exerc exerc | + | |
| - | Levels: noex exerc | + | |
| - | > y <- rnorm(30, mean=10) + | + | |
| - | + 3.14 * (a==' | + | |
| - | + 1.43 * (a==' | + | |
| - | > y | + | |
| - | | + | |
| - | [11] 11.277571 | + | |
| - | [21] 11.756993 10.182252 | + | |
| - | > | + | |
| - | > dat <- data.frame(a, | + | |
| - | > dat | + | |
| - | a | + | |
| - | 1 drg1 noex 9.233204 | + | |
| - | 2 drg1 noex 9.183542 | + | |
| - | 3 drg1 noex 9.858465 | + | |
| - | 4 drg1 noex 9.722395 | + | |
| - | 5 drg1 noex 10.436307 | + | |
| - | 6 drg1 exerc 11.953127 | + | |
| - | 7 drg1 exerc 14.331987 | + | |
| - | 8 drg1 exerc 13.121810 | + | |
| - | 9 drg1 exerc 12.891915 | + | |
| - | 10 drg1 exerc 12.777063 | + | |
| - | 11 drg2 noex 11.277571 | + | |
| - | 12 drg2 noex 9.531103 | + | |
| - | 13 drg2 noex 10.071054 | + | |
| - | 14 drg2 noex 9.733962 | + | |
| - | 15 drg2 noex 11.845257 | + | |
| - | 16 drg2 exerc 9.160550 | + | |
| - | 17 drg2 exerc 9.922552 | + | |
| - | 18 drg2 exerc 7.382294 | + | |
| - | 19 drg2 exerc 10.887884 | + | |
| - | 20 drg2 exerc 9.292509 | + | |
| - | 21 drg3 noex 11.756993 | + | |
| - | 22 drg3 noex 10.182252 | + | |
| - | 23 drg3 noex 9.733111 | + | |
| - | 24 drg3 noex 10.926422 | + | |
| - | 25 drg3 noex 9.306668 | + | |
| - | 26 drg3 exerc 14.111990 | + | |
| - | 27 drg3 exerc 11.652524 | + | |
| - | 28 drg3 exerc 10.723328 | + | |
| - | 29 drg3 exerc 11.847213 | + | |
| - | 30 drg3 exerc 11.799557 | + | |
| - | > # aov.dat <- aov(y~a*b) # anova test | + | |
| - | > # summary(aov.dat) # summary of the test output | + | |
| - | > | + | |
| - | > # hand calculation | + | |
| - | > table(a, | + | |
| - | b | + | |
| - | a noex exerc | + | |
| - | drg1 5 5 | + | |
| - | drg2 5 5 | + | |
| - | drg3 5 5 | + | |
| - | > tapply(y, list(a,b), mean) # 각 셀에서의 평균 | + | |
| - | noex | + | |
| - | drg1 9.686782 13.015181 | + | |
| - | drg2 10.491789 | + | |
| - | drg3 10.381089 12.026922 | + | |
| - | > tapply(y, a, mean) | + | |
| - | | + | |
| - | 11.350981 | + | |
| - | > tapply(y, b, mean) | + | |
| - | noex exerc | + | |
| - | 10.18655 11.45709 | + | |
| - | > n.within.each <- tapply(y, list(a,b), length) # the same as table(a, b) | + | |
| - | > n.within.each | + | |
| - | noex exerc | + | |
| - | drg1 5 5 | + | |
| - | drg2 5 5 | + | |
| - | drg3 5 5 | + | |
| - | > df.within.each <- n.within.each - 1 # 각 셀에서의 샘플숫자 | + | |
| - | > df.within.each | + | |
| - | noex exerc | + | |
| - | drg1 4 4 | + | |
| - | drg2 4 4 | + | |
| - | drg3 4 4 | + | |
| - | > df.within <- sum(df.within.each) # df within | + | |
| - | > df.within | + | |
| - | [1] 24 | + | |
| - | > | + | |
| - | > var.within <- tapply(y, list(a,b), var) # var.within | + | |
| - | > var.within | + | |
| - | noex | + | |
| - | drg1 0.2628787 0.7362999 | + | |
| - | drg2 1.0308917 1.6504481 | + | |
| - | drg3 0.9510727 1.5677577 | + | |
| - | > ss.within.each <- tapply(y, list(a,b), var) * df.within.each | + | |
| - | > ss.within.each | + | |
| - | | + | |
| - | drg1 1.051515 2.945200 | + | |
| - | drg2 4.123567 6.601793 | + | |
| - | drg3 3.804291 6.271031 | + | |
| - | > ss.within <- sum(ss.within.each) # ss.within | + | |
| - | > ss.within | + | |
| - | [1] 24.7974 | + | |
| - | > | + | |
| - | > ms.within <- ss.within / df.within | + | |
| - | > ms.within | + | |
| - | [1] 1.033225 | + | |
| - | > | + | |
| - | > # interaction.plot(a, | + | |
| - | > | + | |
| - | > mean.a <- tapply(y, list(a), mean) | + | |
| - | > mean.b <- tapply(y, list(b), mean) | + | |
| - | > mean.a | + | |
| - | | + | |
| - | 11.350981 | + | |
| - | > mean.b | + | |
| - | noex exerc | + | |
| - | 10.18655 11.45709 | + | |
| - | > | + | |
| - | > var.a <- tapply(y, list(a), var) | + | |
| - | > var.b <- tapply(y, list(b), var) | + | |
| - | > var.a | + | |
| - | drg1 | + | |
| - | 3.521366 1.567182 1.871915 | + | |
| - | > var.b | + | |
| - | | + | |
| - | 0.7773781 3.7300196 | + | |
| - | > | + | |
| - | > mean.tot <- mean(dat$y) | + | |
| - | > var.tot <- var(dat$y) | + | |
| - | > df.tot <- n.sub - 1 | + | |
| - | > ss.tot <- var.tot * df.tot | + | |
| - | > ms.tot <- ss.tot/ | + | |
| - | > | + | |
| - | > mean.tot | + | |
| - | [1] 10.82182 | + | |
| - | > var.tot | + | |
| - | [1] 2.593465 | + | |
| - | > df.tot | + | |
| - | [1] 29 | + | |
| - | > ss.tot | + | |
| - | [1] 75.21048 | + | |
| - | > ms.tot | + | |
| - | [1] 2.593465 | + | |
| - | > ss.tot/ | + | |
| - | [1] 2.593465 | + | |
| - | > | + | |
| - | > | + | |
| - | > ## between | + | |
| - | > mean.each <- tapply(y, list(a,b), mean) | + | |
| - | > mean.each | + | |
| - | noex | + | |
| - | drg1 9.686782 13.015181 | + | |
| - | drg2 10.491789 | + | |
| - | drg3 10.381089 12.026922 | + | |
| - | > mean.tot <- mean(y) | + | |
| - | > mean.tot | + | |
| - | [1] 10.82182 | + | |
| - | > n.each <- tapply(y, list(a,b), length) | + | |
| - | > n.a.each <- tapply(y, list(a), length) | + | |
| - | > n.b.each <- tapply(y, list(b), length) | + | |
| - | > n.each | + | |
| - | noex exerc | + | |
| - | drg1 5 5 | + | |
| - | drg2 5 5 | + | |
| - | drg3 5 5 | + | |
| - | > n.a.each | + | |
| - | drg1 drg2 drg3 | + | |
| - | 10 | + | |
| - | > n.b.each | + | |
| - | noex exerc | + | |
| - | | + | |
| - | > | + | |
| - | > | + | |
| - | > | + | |
| - | > ss.bet <- sum(n.each*(mean.each-mean.tot)^2) | + | |
| - | > ss.bet | + | |
| - | [1] 50.41308 | + | |
| - | > | + | |
| - | > ss.tot | + | |
| - | [1] 75.21048 | + | |
| - | > ss.within | + | |
| - | [1] 24.7974 | + | |
| - | > ss.bet | + | |
| - | [1] 50.41308 | + | |
| - | > ss.bet + ss.within | + | |
| - | [1] 75.21048 | + | |
| - | > | + | |
| - | > ss.a <- sum(n.a.each * ((mean.tot - mean.a)^2)) | + | |
| - | > ss.b <- sum(n.b.each * ((mean.tot - mean.b)^2)) | + | |
| - | > ss.a | + | |
| - | [1] 12.5663 | + | |
| - | > ss.b | + | |
| - | [1] 12.10691 | + | |
| - | > ss.ab <- ss.bet - (ss.a + ss.b) # ss.ab = ss.interaction | + | |
| - | > ss.ab | + | |
| - | [1] 25.73987 | + | |
| - | > | + | |
| - | > ss.tot | + | |
| - | [1] 75.21048 | + | |
| - | > ss.bet | + | |
| - | [1] 50.41308 | + | |
| - | > ss.within | + | |
| - | [1] 24.7974 | + | |
| - | > ss.a | + | |
| - | [1] 12.5663 | + | |
| - | > ss.b | + | |
| - | [1] 12.10691 | + | |
| - | > ss.ab | + | |
| - | [1] 25.73987 | + | |
| - | > | + | |
| - | > df.tot <- n.sub - 1 | + | |
| - | > df.bet <- (n.a.group * n.b.group) - 1 | + | |
| - | > df.a <- n.a.group - 1 | + | |
| - | > df.b <- n.b.group - 1 | + | |
| - | > df.ab <- df.bet - (df.a + df.b) | + | |
| - | > df.within <- sum(df.within.each) | + | |
| - | > | + | |
| - | > df.tot | + | |
| - | [1] 29 | + | |
| - | > df.bet | + | |
| - | [1] 5 | + | |
| - | > df.a | + | |
| - | [1] 2 | + | |
| - | > df.b | + | |
| - | [1] 1 | + | |
| - | > df.ab | + | |
| - | [1] 2 | + | |
| - | > df.within | + | |
| - | [1] 24 | + | |
| - | > | + | |
| - | > ms.tot <- ss.tot / df.tot # we did it above | + | |
| - | > ms.bet <- ss.bet / df.bet | + | |
| - | > ms.a <- ss.a / df.a | + | |
| - | > ms.b <- ss.b / df.b | + | |
| - | > ms.ab <- ss.ab / df.ab | + | |
| - | > ms.within <- ss.within / df.within | + | |
| - | > | + | |
| - | > ms.tot | + | |
| - | [1] 2.593465 | + | |
| - | > ms.bet | + | |
| - | [1] 10.08262 | + | |
| - | > ms.within | + | |
| - | [1] 1.033225 | + | |
| - | > ms.a | + | |
| - | [1] 6.283151 | + | |
| - | > ms.b | + | |
| - | [1] 12.10691 | + | |
| - | > ms.ab | + | |
| - | [1] 12.86993 | + | |
| - | > | + | |
| - | > | + | |
| - | > f.a <- ms.a / ms.within | + | |
| - | > f.b <- ms.b / ms.within | + | |
| - | > f.ab <- ms.ab / ms.within | + | |
| - | > | + | |
| - | > alpha <- .05 | + | |
| - | > # confidence interval | + | |
| - | > ci <- 1 - alpha | + | |
| - | > | + | |
| - | > f.a | + | |
| - | [1] 6.081107 | + | |
| - | > # 봐야할 F분포표에서의 F-value | + | |
| - | > # qt 처럼 qf 사용 | + | |
| - | > # qf(alpha, df.between, df.within, lower.tail=F) 처럼 사용 | + | |
| - | > qf(ci, df.a, df.within) # or | + | |
| - | [1] 3.402826 | + | |
| - | > qf(alpha, df.a, df.within, lower.tail = F) | + | |
| - | [1] 3.402826 | + | |
| - | > # 혹은 | + | |
| - | > # qf(alpha, df.a, df.within, lower.tail = F) | + | |
| - | > # 도 마찬가지 | + | |
| - | > f.a.crit <- qf(ci, df.a, df.within) | + | |
| - | > f.a > f.a.crit # 만약 f.a가 크다면 | + | |
| - | [1] TRUE | + | |
| - | > # 혹은 f.a 값에 해당하는 percentage를 구하면 | + | |
| - | > pf(f.a, df.a, df.within, lower.tail = F) | + | |
| - | [1] 0.007302552 | + | |
| - | > | + | |
| - | > f.b | + | |
| - | [1] 11.7176 | + | |
| - | > qf(ci, df.b, df.within) | + | |
| - | [1] 4.259677 | + | |
| - | > f.b > qf(ci, df.b, df.within) | + | |
| - | [1] TRUE | + | |
| - | > pf(f.b, df.b, df.within, lower.tail = F) | + | |
| - | [1] 0.00222738 | + | |
| - | > | + | |
| - | > f.ab | + | |
| - | [1] 12.45608 | + | |
| - | > qf(ci, df.ab, df.within) | + | |
| - | [1] 3.402826 | + | |
| - | > f.ab > qf(ci, df.ab, df.within) | + | |
| - | [1] TRUE | + | |
| - | > pf(f.ab, df.ab, df.within, lower.tail = F) | + | |
| - | [1] 0.0001947745 | + | |
| - | > | + | |
| - | > # aov result | + | |
| - | > aov.dat.all <- aov(y ~ a * b, data = dat) # anova test | + | |
| - | > summary(aov.dat.all) # summary of the test output | + | |
| - | Df Sum Sq Mean Sq F value | + | |
| - | a 2 12.57 | + | |
| - | b 1 12.11 12.107 | + | |
| - | a:b 2 25.74 12.870 | + | |
| - | Residuals | + | |
| - | --- | + | |
| - | Signif. codes: | + | |
| - | > aov.dat.noint <- aov(y ~ a + b, data = dat) | + | |
| - | > # interaction이 갖는 SS와 df를 residuals이 갖음을 주목 | + | |
| - | > summary(aov.dat.noint) | + | |
| - | Df Sum Sq Mean Sq F value Pr(> | + | |
| - | a 2 12.57 | + | |
| - | b 1 12.11 12.107 | + | |
| - | Residuals | + | |
| - | --- | + | |
| - | Signif. codes: | + | |
| - | > aov.dat.all2 <- aov(y ~ a + b + a:b, data = dat) | + | |
| - | > summary(aov.dat.all2) | + | |
| - | Df Sum Sq Mean Sq F value | + | |
| - | a 2 12.57 | + | |
| - | b 1 12.11 12.107 | + | |
| - | a:b 2 25.74 12.870 | + | |
| - | Residuals | + | |
| - | --- | + | |
| - | Signif. codes: | + | |
| - | > aov.dat.all # what is standard error of residuals | + | |
| - | Call: | + | |
| - | | + | |
| - | + | ||
| - | Terms: | + | |
| - | | + | |
| - | Sum of Squares | + | |
| - | Deg. of Freedom | + | |
| - | + | ||
| - | Residual standard error: 1.016477 | + | |
| - | Estimated effects may be unbalanced | + | |
| - | > | + | |
| - | > # post-hoc test | + | |
| - | > TukeyHSD(aov.dat.all) | + | |
| - | Tukey multiple comparisons of means | + | |
| - | 95% family-wise confidence level | + | |
| - | + | ||
| - | Fit: aov(formula = y ~ a * b, data = dat) | + | |
| - | + | ||
| - | $a | + | |
| - | diff | + | |
| - | drg2-drg1 -1.4405079 -2.575730 -0.3052857 0.0111258 | + | |
| - | drg3-drg1 -0.1469757 -1.282198 | + | |
| - | drg3-drg2 | + | |
| - | + | ||
| - | $b | + | |
| - | | + | |
| - | exerc-noex 1.270533 0.5044869 2.03658 0.0022274 | + | |
| - | + | ||
| - | $`a:b` | + | |
| - | diff lwr upr p adj | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg3: | + | |
| - | + | ||
| - | > TukeyHSD(aov.dat.all, | + | |
| - | Tukey multiple comparisons of means | + | |
| - | 95% family-wise confidence level | + | |
| - | + | ||
| - | Fit: aov(formula = y ~ a * b, data = dat) | + | |
| - | + | ||
| - | $a | + | |
| - | diff | + | |
| - | drg2-drg1 -1.4405079 -2.575730 -0.3052857 0.0111258 | + | |
| - | drg3-drg1 -0.1469757 -1.282198 | + | |
| - | drg3-drg2 | + | |
| - | + | ||
| - | > TukeyHSD(aov.dat.all, | + | |
| - | Tukey multiple comparisons of means | + | |
| - | 95% family-wise confidence level | + | |
| - | + | ||
| - | Fit: aov(formula = y ~ a * b, data = dat) | + | |
| - | + | ||
| - | $b | + | |
| - | | + | |
| - | exerc-noex 1.270533 0.5044869 2.03658 0.0022274 | + | |
| - | + | ||
| - | > TukeyHSD(aov.dat.all, | + | |
| - | Tukey multiple comparisons of means | + | |
| - | 95% family-wise confidence level | + | |
| - | + | ||
| - | Fit: aov(formula = y ~ a * b, data = dat) | + | |
| - | + | ||
| - | $`a:b` | + | |
| - | diff lwr upr p adj | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg1: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg2: | + | |
| - | drg3: | + | |
| - | drg3: | + | |
| - | + | ||
| - | > boxplot(dat$y~dat$a) | + | |
| - | > boxplot(dat$y~dat$b) | + | |
| - | > plot(TukeyHSD(aov.dat.all, | + | |
| - | + las = 2 # rotate x-axis ticks | + | |
| - | + ) | + | |
| - | > | + | |
| - | > | + | |
| - | > # | + | |
| - | > # | + | |
| - | > # see another e.g. at | + | |
| - | > # https:// | + | |
| - | > # | + | |
| - | > # | + | |
| - | > | + | |
| - | > | + | |
| - | </ | + | |
| - | ====== output interpretation ====== | + | |
| - | + | ||
| - | {{: | + | |
| - | {{: | + | |
| - | {{: | + | |
| - | {{: | + | |
| - | {{: | + | |
| - | + | ||
| - | 상호작용효과 포함 해석 | + | |
| - | * drug1의 효과에 운동의 역할은 아주 중요한 것으로 밝혀졌다. | + | |
| - | * 반면에 drug2, 3에 한해서는 운동의 역할은 제한적이었다. | + | |
| - | * 특히 drg3의 경우 운동이 효과를 증대시키기는 하였지만 그것이 통계학적으로 의미있는 것은 아니었다. | + | |
| - | * 또한 drg2의 경우 운동이 오히려 효과를 감소하는 것으로 나타났다. 그렇지만 이 또한 통계학적으로 의미가 있는 것은 아니었다. | + | |
| - | * 이를 통해서 drg1을 처치받는 환자의 경우에는 운동을 꼭 하도록 하여야 함을 알 수 있고 | + | |
| - | * drg2의 경우에는 그 효과가 미미하므로 권장을 하는 정도가 필요함을 알 수 있었다. | + | |
| - | 혹은 | + | |
| - | * drg1과 운동이 병행 된 경우에는 대부분의 다른 처방보다 월등한 효과가 있는 것으로 밝혀졌다. | + | |
| - | * 운동이 병행된 drg1과 drg3의 | + | |
| - | * drg2의 운동유무, | + | |
| - | + | ||
c/ms/2025/w07.2_factorial_anova.1745985558.txt.gz · Last modified: by hkimscil
