User Tools

Site Tools


anova_note:code01

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
anova_note:code01 [2025/12/05 15:01] – created hkimscilanova_note:code01 [2025/12/09 23:16] (current) hkimscil
Line 1: Line 1:
 <code> <code>
 rm(list=ls()) rm(list=ls())
-# set.seed(101) +rnorm2 <- function(n,mean,sd) {  
-rnorm2 <- function(n,mean,sd){ mean+sd*scale(rnorm(n)) }+  mean+sd*scale(rnorm(n))  
 +}
 ss <- function(x) { ss <- function(x) {
   sum((x-mean(x))^2)   sum((x-mean(x))^2)
 } }
- +set.seed(10) 
-n.o <- 30 +n <- 30 
-n.p <- 30+n.o <- n.p <- n
 o <- rnorm(n.o, 100, 10) o <- rnorm(n.o, 100, 10)
-p <- rnorm(n.p, 105, 10) +p <- rnorm(n.p, 104, 10
-t.test(o,p, var.equal=T)+ 
 +# old way 
 +m.o <- mean(o) 
 +m.p <- mean(p) 
 +df.o <- n.o - 1 
 +df.p <- n.p - 1 
 +diff <- m.o - m.p 
 +m.o 
 +m.p 
 +diff 
 +pv <- (ss(o)+ss(p))/(df.o+df.p) 
 +se <- sqrt((pv/n.o) + (pv/n.p)
 +t.cal <- diff/se 
 +t.cal 
 +pt(t.cal, df.o+df.p) * 2 
 + 
 +t.out <- t.test(o, p, var.equal=T) 
 +t.out 
 +t.out$statistic 
 +t.out$p.value 
 + 
 +#
 comb <- list(o = o, p = p) comb <- list(o = o, p = p)
 +o
 +p
 +comb
 op <- stack(comb) op <- stack(comb)
-head(op)+op
 colnames(op)[1] <- "values" colnames(op)[1] <- "values"
 colnames(op)[2] <- "group" colnames(op)[2] <- "group"
 op$group <- factor(op$group) op$group <- factor(op$group)
 head(op) head(op)
 +tail(op)
 boxplot(op$values~op$group) boxplot(op$values~op$group)
  
- +plot(op$values~op$group)
-plot(op$values~op$group)+
 boxplot(op$values~op$group, main="values by group", boxplot(op$values~op$group, main="values by group",
         yaxt="n", xlab="value", horizontal=TRUE,         yaxt="n", xlab="value", horizontal=TRUE,
Line 33: Line 58:
 m.o <- mean(o) m.o <- mean(o)
 m.p <- mean(p) m.p <- mean(p)
 +m.tot
 +m.o 
 +m.p 
  
 min.x <- min(op$values) min.x <- min(op$values)
Line 40: Line 68:
 hist(o, breaks=br,  hist(o, breaks=br, 
      col=rgb(1,1,1,.5))      col=rgb(1,1,1,.5))
-abline(v=m.o, col="red", lwd=3)+abline(v=m.o, col="black", lwd=3)
 hist(p, add=T, breaks=br, hist(p, add=T, breaks=br,
      col=rgb(.5,1,1,.5))      col=rgb(.5,1,1,.5))
 abline(v=m.p, col="blue", lwd=3) abline(v=m.p, col="blue", lwd=3)
-abline(v=m.tot, col='black', lwd=3)+abline(v=m.tot, col='red', lwd=3) 
 + 
 +hist(o, breaks=br,  
 +     col=rgb(1,1,1,.5)) 
 +hist(p, add=T, breaks=br, 
 +     col=rgb(.5,1,1,.5)) 
 +abline(v=m.tot, col='red', lwd=3)
  
 ss.tot <- ss(op$values) ss.tot <- ss(op$values)
Line 51: Line 85:
 var(op$values) var(op$values)
 ss.tot ss.tot
- 
-ss.o <- ss(o) 
-ss.p <- ss(p) 
-df.o <- length(o)-1 
-df.p <- length(p)-1 
- 
 m.tot m.tot
 m.o m.o
 m.p m.p
 +ss.o <- ss(o)
 +ss.p <- ss(p)
 ss.o ss.o
 ss.p ss.p
  
-ss.bet <- length(o)*(m.tot-m.o)^2+length(p)*(m.tot-m.p)^2 +hist(o, breaks=br,  
-ss.tot +     col=rgb(1,1,1,.5),  
-ss.bet +     main = paste0("o mean = ", round(m.o,2),  
-ss.wit <- ss.o+ss.p +                   "\n", "tot mean = ", round(m.tot,2),  
 +                   "")) 
 +abline(v=m.o, col="black", lwd=3) 
 +abline(v=m.tot, col='red', lwd=3) 
 + 
 +hist(p, breaks=br, 
 +     col=rgb(.5,1,1,.5), 
 +     main = paste0("p mean = ", round(m.p,2),  
 +                   "\n", "tot mean = ", round(m.tot,2),  
 +                   ""    ) 
 +abline(v=m.p, col="blue", lwd=3) 
 +abline(v=m.tot, col='red', lwd=3) 
 + 
 +n.o*(m.tot-m.o)^2   # m.tot 에서 o그룹공통 까지의 거리를 제곱해서 모두 더한 값 
 +                    # 위 그림에서 빨간색 선에서 검은색 선까지의 거리를  
 +                    # 제곱해서 모두 더한 값 
 +n.p*(m.tot-m.p)^2   # m.tot 에서 p그룹공통 까지의 거리를 제곱해서 모두 더한 값 
 +                    # 위 그림에서 빨간색 선에서 파란색 선까지의  
 +                    # 거리를 제곱해서 모두 더한 값 
 +ss.bet <- n.o*(m.tot-m.o)^2 +   # 이것은 그룹 (IV, 독립변인때문에  
 +            n.p*(m.tot-m.p)^2     # 생긴 그룹 간 차이이다 
 +ss.bet            # 따라서 이것을 SS between group이라고 부른다 
 + 
 + 
 +ss within group  
 + 
 +hist(o, breaks=br,  
 +     col=rgb(1,1,1,.5)) 
 +abline(v=m.o, col="black", lwd=3) 
 +ss.o <- ss(o)   # o집단의 평균인 검은색 선에서 개인 점수까지의  
 +                # 거리는 (오차는) 독립변인과 상관없이 랜덤하게  
 +                # 나타나는 것 
 +ss.o            # o집단의 것을 ss.o라고 부른다 
 + 
 +hist(p, breaks=br, 
 +     col=rgb(.5,1,1,.5)) 
 +abline(v=m.p, col="blue", lwd=3) 
 +ss.p <- ss(p)   # p집단도 마찬가지이다. 이 집단 내의 sum of square값은  
 +                # p 집단의 공통특징인 평균에서 개인점수가 랜덤하게  
 +ss.p            # 나타나는 것이고, 이것을 sum of square p라고 부른다 
 + 
 +ss.wit <- ss.o + ss.p # 위 각 집단 내부의 ss값을 합한 값을 ss within group 
 +                      # 이라고 부른다 
 + 
 +# 이 둘은 각 그룹의 평균을 중심으로  
 +# random 하게 나타나는 평균에서의 거리이다 (에러). 
 +# 이것을 sum of square within group 이라고 부른다 
 +# 이것을 우리는 random difference라고 불러도 되겠다
 ss.wit ss.wit
-ss.bet+ss.wit+ 
 +# 반면에 ss between group은 IV의 효과 때문에 나타나는 
 +# 것이다. 우리는 이것을 group difference라고 부른다. 
 +ss.bet 
 +ss.bet + ss.wit
 ss.tot ss.tot
  
 +# degrees of freedom
 df.tot <- length(op$values)-1 df.tot <- length(op$values)-1
 df.bet <- nlevels(op$group) - 1 df.bet <- nlevels(op$group) - 1
-df.wit <- (length(o)-1)+(length(p)-1)+df.wit <- (n.o-1) + (n.p-1)
 df.tot df.tot
 df.bet df.bet
 df.wit df.wit
  
 +# variance of total, between group, and within group
 ms.tot <- ss.tot / df.tot ms.tot <- ss.tot / df.tot
 ms.bet <- ss.bet / df.bet ms.bet <- ss.bet / df.bet
Line 87: Line 170:
 p.val p.val
 summary(aov(op$values~op$group)) summary(aov(op$values~op$group))
-t.test(o,p, var.equal = T) 
  
-diff <- m.o - m.p +# t.cal 값을 확인해보면 
-ssp <- (ss.o + ss.p) / (df.+ df.p+t.test(o,p, var.equal = T# 혹은 
-se <- sqrt(ssp/n.o+ssp/n.p+t.cal <- diff/se 
-t.cal <- diff/se +
-t.cal+
 p.t.cal <- pt(abs(t.cal), df=df.o+df.p, lower.tail = F)*2 p.t.cal <- pt(abs(t.cal), df=df.o+df.p, lower.tail = F)*2
 p.t.cal p.t.cal
 +
 +# 하나는 sd 를 unit으로 계산한 값이고 (t.cal)
 +# 다른 하나는 variance를 unit으로 계산한 값이지만 
 +# 원리는 같다. 
 t.cal^2 t.cal^2
-f.cal 
- 
-df.bet 
-df.wit 
 f.cal f.cal
 </code> </code>
anova_note/code01.1764946873.txt.gz · Last modified: by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki