c:ma:2023:lecturer_note
Differences
This shows you the differences between two versions of the page.
c:ma:2023:lecturer_note [2023/09/17 19:48] – created hkimscil | c:ma:2023:lecturer_note [2023/09/17 19:49] (current) – hkimscil | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== ANOVA notes ====== | ====== ANOVA notes ====== | ||
<code R> | <code R> | ||
- | temp <- c(1,2) | + | # ANOVA |
+ | set.seed(1024) | ||
+ | n <-30 | ||
+ | s1 <- round(rnorm(n, | ||
+ | s2 <- round(rnorm(n, | ||
+ | s3 <- round(rnorm(n, | ||
+ | s1 | ||
+ | s2 | ||
+ | s3 | ||
+ | |||
+ | sam <- c(s1, | ||
+ | sam | ||
+ | group <- c(rep(" | ||
+ | group | ||
+ | |||
+ | sa <- data.frame(sam, | ||
+ | sa | ||
+ | attach(sa) | ||
+ | aov.sa <- aov(sam ~ group, data=sa) | ||
+ | summary(aov.sa) | ||
+ | |||
+ | df.tot <- (3*n)-1 | ||
+ | ss.tot <- var(sam)*df.tot | ||
+ | var.tot <- var(sam) | ||
+ | df.tot | ||
+ | ss.tot | ||
+ | var.tot | ||
+ | |||
+ | df.bet <- 3 - 1 | ||
+ | df.s1 <- n-1 | ||
+ | df.s2 <- n-1 | ||
+ | df.s3 <- n-1 | ||
+ | df.within <- df.s1+df.s2+df.s3 | ||
+ | df.within | ||
+ | |||
+ | ss.s1 <- var(s1)*df.s1 | ||
+ | ss.s2 <- var(s2)*df.s2 | ||
+ | ss.s3 <- var(s3)*df.s3 | ||
+ | ss.s1 | ||
+ | ss.s2 | ||
+ | ss.s3 | ||
+ | ss.within <- ss.s1+ss.s2+ss.s3 | ||
+ | ss.within | ||
+ | |||
+ | mean.grand <- mean(sam) | ||
+ | mean.s1 <- mean(s1) | ||
+ | mean.s2 <- mean(s2) | ||
+ | mean.s3 <- mean(s3) | ||
+ | mean.grand | ||
+ | mean.s1 | ||
+ | mean.s2 | ||
+ | mean.s3 | ||
+ | |||
+ | diff.g1 <- n * (mean.grand - mean.s1)^2 | ||
+ | diff.g2 <- n * (mean.grand - mean.s2)^2 | ||
+ | diff.g3 <- n * (mean.grand - mean.s3)^2 | ||
+ | |||
+ | diff.g1 | ||
+ | diff.g2 | ||
+ | diff.g3 | ||
+ | |||
+ | ss.bet <- diff.g1 + diff.g2 + diff.g3 | ||
+ | ss.bet | ||
+ | |||
+ | # sumup | ||
+ | ss.tot | ||
+ | ss.bet | ||
+ | ss.within | ||
+ | ss.bet+ss.within | ||
+ | |||
+ | df.tot | ||
+ | df.bet | ||
+ | df.within | ||
+ | df.bet + df.within | ||
+ | |||
+ | ms.bet <- ss.bet / df.bet | ||
+ | ms.wit <- ss.within / df.within | ||
+ | ms.bet | ||
+ | ms.wit | ||
+ | |||
+ | fvalue <- ms.bet/ | ||
+ | |||
+ | fvalue | ||
+ | |||
+ | f.res <- (aov(sa$sam~sa$group)) | ||
+ | summary(f.res) | ||
+ | |||
+ | ########################## | ||
+ | # http:// | ||
+ | # | ||
+ | ########################## | ||
+ | x1 <- c(50.5, 52.1, 51.9, 52.4, 50.6, 51.4, 51.2, 52.2, 51.5, 50.8) | ||
+ | x2 <- c(47.5, 47.7, 46.6, 47.1, 47.2, 47.8, 45.2, 47.4, 45.0, 47.9) | ||
+ | x3 <- c(46.0, 47.1, 45.6, 47.1, 47.2, 46.4, 45.9, 47.1, 44.9, 46.2) | ||
+ | xc <- data.frame(x1, | ||
+ | xs <- stack(xc) | ||
+ | xs | ||
+ | |||
+ | colnames(xs) <- c(" | ||
+ | xs | ||
+ | levels(xs$temp) | ||
+ | xs | ||
+ | |||
+ | str(xs) # 데이터 구조 체크 | ||
+ | |||
+ | attach(xs) | ||
+ | aov.xs <- aov(score ~ temp, data = xs) | ||
+ | summary(aov.xs) | ||
+ | |||
+ | |||
+ | mean.tot <- mean(score) | ||
+ | mean.tot | ||
+ | |||
+ | df.tot <- length(score)-1 | ||
+ | ss.tot <- var(score) * df.tot | ||
+ | ss.tot | ||
+ | df.tot | ||
+ | var.tot <- var(score) | ||
+ | var.tot2 <- ss.tot/ | ||
+ | var.tot == var.tot2 | ||
+ | |||
+ | mean.each <- tapply(score, list(temp), mean) | ||
+ | mean.each | ||
+ | var.each <- tapply(score, | ||
+ | var.each | ||
+ | df.within <- 3*(10-1) | ||
+ | ss.each <- var.each * 9 | ||
+ | ss.within <- sum(ss.each) | ||
+ | ss.within | ||
+ | ss.tot - ss.within | ||
+ | |||
+ | ss.bet <- sum(10*(mean.tot - mean.each)^2) | ||
+ | ss.bet | ||
+ | df.bet <- 3-1 | ||
+ | |||
+ | ss.tot | ||
+ | ss.bet | ||
+ | ss.within | ||
+ | ss.bet + ss.within | ||
+ | |||
+ | df.tot | ||
+ | df.bet | ||
+ | df.within | ||
+ | df.bet + df.within | ||
+ | |||
+ | ms.bet <- ss.bet / df.bet | ||
+ | ms.within <- ss.within / df.within | ||
+ | f.value <- ms.bet / ms.within | ||
+ | |||
+ | ss.bet | ||
+ | ss.within | ||
+ | df.bet | ||
+ | df.within | ||
+ | ms.bet | ||
+ | ms.within | ||
+ | f.value | ||
+ | |||
+ | alpha <- .05 | ||
+ | qf(alpha, df.bet, df.within, lower.tail = F) | ||
+ | pf(f.value, df.bet, df.within, lower.tail = F) | ||
+ | |||
+ | aov.xs <- aov(score ~ temp, data = xs) | ||
+ | summary(aov.xs) | ||
+ | |||
+ | |||
+ | ################################################# | ||
+ | # two-way anova | ||
+ | # subject = factor(paste(' | ||
+ | ################################################# | ||
+ | |||
+ | n.a.group <- 3 # a treatment 숫자 | ||
+ | n.b.group <- 2 # b 그룹 숫자 | ||
+ | n.sub <- 30 # 총 샘플 숫자 | ||
+ | # 데이터 생성 | ||
+ | set.seed(9) | ||
+ | a <- gl(3, 10, n.sub, labels=c(' | ||
+ | b <- gl(2, 5, n.sub, labels=c(' | ||
+ | a | ||
+ | b | ||
+ | y <- rnorm(30, mean=10) + 3.14 * (a==' | ||
+ | y | ||
+ | |||
+ | dat <- data.frame(a, | ||
+ | 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) # 각 셀에서의 평균 | ||
+ | df.within.each <- tapply(y, list(a,b), length) -1 # 각 셀에서의 샘플숫자 | ||
+ | n.within.each <- df.within.each + 1 | ||
+ | df.within <- sum(df.within.each) # df within | ||
+ | |||
+ | var.within <- tapply(y, list(a,b), var) # 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 | ||
+ | |||
+ | 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) | ||
+ | |||
+ | |||
+ | mean.tot <- mean(dat$y) | ||
+ | var.tot <- var(dat$y) | ||
+ | df.tot <- n.sub - 1 | ||
+ | ss.tot <- var.tot * df.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.each | ||
+ | n.a.each <- tapply(y, list(a), length) | ||
+ | n.b.each <- tapply(y, list(b), length) | ||
+ | |||
+ | 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.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.a <- ss.a / df.a | ||
+ | ms.b <- ss.b / df.b | ||
+ | ms.ab <- ss.ab / df.ab | ||
+ | ms.within <- ss.within / df.within | ||
+ | |||
+ | ms.a | ||
+ | ms.b | ||
+ | ms.ab | ||
+ | ms.within | ||
+ | |||
+ | |||
+ | f.a <- ms.a / ms.within | ||
+ | f.b <- ms.b / ms.within | ||
+ | f.ab <- ms.ab / ms.within | ||
+ | |||
+ | alpha <- .05 | ||
+ | |||
+ | f.a | ||
+ | # 봐야할 F분포표에서의 F-value | ||
+ | # qt 처럼 qf 사용 | ||
+ | # qf(alpha, df.between, df.within, lower.tail=F) 처럼 사용 | ||
+ | qf(alpha, df.a, df.within, lower.tail = F) | ||
+ | pf(f.a, df.a, df.within, lower.tail = F) | ||
+ | |||
+ | f.b | ||
+ | qf(alpha, df.b, df.within, lower.tail = F) | ||
+ | pf(f.b, df.b, df.within, lower.tail = F) | ||
+ | |||
+ | f.ab | ||
+ | qf(alpha, df.ab, df.within, lower.tail = F) | ||
+ | pf(f.ab, df.ab, df.within, lower.tail = F) | ||
+ | |||
+ | # aov result | ||
+ | summary(aov.dat) | ||
+ | |||
</ | </ |
c/ma/2023/lecturer_note.1694947737.txt.gz · Last modified: 2023/09/17 19:48 by hkimscil