c:ms:2025:w07.2_factorial_anova
Differences
This shows you the differences between two versions of the page.
Next revision | Previous revision | ||
c:ms:2025:w07.2_factorial_anova [2025/04/16 09:00] – created hkimscil | c:ms:2025:w07.2_factorial_anova [2025/05/07 07:25] (current) – hkimscil | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== Two-way ANOVA ====== | ||
+ | Factorial ANOVA | ||
< | < | ||
+ | rm(list=ls(all=TRUE)) | ||
+ | |||
################################################# | ################################################# | ||
# two-way anova | # two-way anova | ||
Line 5: | Line 9: | ||
################################################# | ################################################# | ||
- | n.a.group <- 3 # a treatment 숫자 | + | n.a.group <- 3 # a treatment 숫자 |
- | n.b.group <- 2 # b 그룹 숫자 | + | n.b.group <- 2 # b 그룹 숫자 |
n.sub <- 30 # 총 샘플 숫자 | n.sub <- 30 # 총 샘플 숫자 | ||
n.sub/ | n.sub/ | ||
Line 12: | Line 16: | ||
# 데이터 생성 | # 데이터 생성 | ||
set.seed(9) | set.seed(9) | ||
- | a <- gl(3, 10, n.sub, labels=c(' | + | a <- gl(n.a.group, |
- | b <- gl(2, 5, n.sub, labels=c(' | + | n.sub/ |
+ | | ||
+ | | ||
+ | b <- gl(n.b.group, | ||
+ | (n.sub/ | ||
+ | | ||
+ | | ||
a | a | ||
b | b | ||
y <- rnorm(30, mean=10) + | y <- rnorm(30, mean=10) + | ||
- | 3.14 * (a=='a1' & b=='b2') + | + | 3.14 * (a=='drg1' & b=='exerc') + |
- | 1.43 * (a=='a3' & b=='b2' | + | 1.43 * (a=='drg3' & b=='exerc' |
y | y | ||
Line 29: | Line 39: | ||
table(a,b) | table(a,b) | ||
tapply(y, list(a,b), mean) # 각 셀에서의 평균 | tapply(y, list(a,b), mean) # 각 셀에서의 평균 | ||
- | n.within.each <- tapply(y, list(a,b), length) | + | 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 | n.within.each | ||
df.within.each <- n.within.each - 1 # 각 셀에서의 샘플숫자 | df.within.each <- n.within.each - 1 # 각 셀에서의 샘플숫자 | ||
Line 63: | Line 75: | ||
ss.tot <- var.tot * df.tot | ss.tot <- var.tot * df.tot | ||
ms.tot <- ss.tot/ | ms.tot <- ss.tot/ | ||
+ | |||
+ | mean.tot | ||
+ | var.tot | ||
+ | df.tot | ||
+ | ss.tot | ||
+ | ms.tot | ||
+ | ss.tot/ | ||
+ | |||
## between | ## between | ||
Line 114: | Line 134: | ||
df.within | df.within | ||
- | ms.tot <- ss.tot/ | + | ms.tot <- ss.tot / df.tot # we did it above |
- | ms.bet <- ss.bet | + | ms.bet <- ss.bet |
ms.a <- ss.a / df.a | ms.a <- ss.a / df.a | ||
ms.b <- ss.b / df.b | ms.b <- ss.b / df.b | ||
Line 146: | Line 166: | ||
# 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) | pf(f.a, df.a, df.within, lower.tail = F) | ||
f.b | f.b | ||
qf(ci, df.b, df.within) | qf(ci, df.b, df.within) | ||
+ | f.b > qf(ci, df.b, df.within) | ||
pf(f.b, df.b, df.within, lower.tail = F) | pf(f.b, df.b, df.within, lower.tail = F) | ||
f.ab | f.ab | ||
qf(ci, df.ab, df.within) | qf(ci, df.ab, df.within) | ||
+ | f.ab > qf(ci, df.ab, df.within) | ||
pf(f.ab, df.ab, df.within, lower.tail = F) | pf(f.ab, df.ab, df.within, lower.tail = F) | ||
# aov result | # aov result | ||
- | summary(aov.dat) | + | 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:// | ||
+ | # | ||
+ | # | ||
</ | </ | ||
+ | |||
+ | ====== 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) | ||
+ | b | ||
+ | a noex exerc | ||
+ | drg1 5 5 | ||
+ | drg2 5 5 | ||
+ | drg3 5 5 | ||
+ | > tapply(y, list(a,b), mean) # 각 셀에서의 평균 | ||
+ | noex exerc | ||
+ | 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 exerc | ||
+ | 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 exerc | ||
+ | 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.1744761634.txt.gz · Last modified: 2025/04/16 09:00 by hkimscil