User Tools

Site Tools


anova_note:output01

This is an old revision of the document!


> 
> rm(list=ls())
> rnorm2 <- function(n,mean,sd) { 
+   mean+sd*scale(rnorm(n)) 
+ }
> ss <- function(x) {
+   sum((x-mean(x))^2)
+ }
> set.seed(10)
> n <- 30
> n.o <- n.p <- n
> o <- rnorm(n.o, 100, 10)
> p <- rnorm(n.p, 104, 10)
> 
> t.out <- t.test(o,p, var.equal=T)
> t.out

	Two Sample t-test

data:  o and p
t = -2.6941, df = 58, p-value = 0.009216
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.012446  -1.623742
sample estimates:
mean of x mean of y 
 96.55324 102.87133 

> 
> # 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
> pv <- (ss(o)+ss(p))/(df.o+df.p)
> se <- sqrt((pv/n.o) + (pv/n.p))
> t.cal <- diff/se
> t.cal
[1] -2.694097
> pt(t.cal, df.o+df.p) * 2
[1] 0.009215657
> t.out$statistic
        t 
-2.694097 
> t.out$p.value
[1] 0.009215657
> 
> #
> comb <- list(o = o, p = p)
> op <- stack(comb)
> head(op)
     values ind
1 100.18746   o
2  98.15747   o
3  86.28669   o
4  94.00832   o
5 102.94545   o
6 103.89794   o
> colnames(op)[1] <- "values"
> colnames(op)[2] <- "group"
> op$group <- factor(op$group)
> head(op)
     values group
1 100.18746     o
2  98.15747     o
3  86.28669     o
4  94.00832     o
5 102.94545     o
6 103.89794     o
> boxplot(op$values~ss.o <- ss(o)
ss.p <- ss(p)
df.o <- length(o)-1
df.p <- length(p)-1


op$group)
> 
> 
> plot(op$values~op$group)
> boxplot(op$values~op$group, main="values by group",
+         yaxt="n", xlab="value", horizontal=TRUE,
+         col=terrain.colors(2))
> abline(v=mean(op$values), col="red", lwd=3)
> legend("topleft", inset=.05, title="group",
+        c("o","p"), fill=terrain.colors(2), horiz=TRUE)
> 
>


> m.tot <- mean(op$values)
> m.o <- mean(o)
> m.p <- mean(p)
> 
> min.x <- min(op$values)
> max.x <- max(op$values)
> br <- seq(floor(min.x), ceiling(max.x), by = 1) 
> 
> hist(o, breaks=br, 
+      col=rgb(1,1,1,.5))
> abline(v=m.o, col="black", lwd=3)
> hist(p, add=T, breaks=br,
+      col=rgb(.5,1,1,.5))
> abline(v=m.p, col="blue", 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)
> df.tot <- length(op$values)-1
> ss.tot/df.tot
[1] 91.24725
> var(op$values)
[1] 91.24725
> ss.tot
[1] 5383.588
> 

> m.tot
[1] 99.71228
> m.o
[1] 96.55324
> m.p
[1] 102.8713
> ss.o
[1] 2179.19
> ss.p
[1] 2605.623
> 
> hist(o, breaks=br, 
+      col=rgb(1,1,1,.5))
> 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))
> abline(v=m.p, col="blue", lwd=3)
> abline(v=m.tot, col='red', lwd=3)
>
> ss.bet <- n.o*(m.tot-m.o)^2 +  # m.tot 에서 o그룹공통 까지의 거리를 제곱해서 모두 더한 값
                                 # 아래 그림에서 빨간색 선에서 검은색 선까지의 거리를 제곱해서 모두 더한 값
+           n.p*(m.tot-m.p)^2    # m.tot 에서 p그룹공통 까지의 거리를 제곱해서 모두 더한 값
                                 # 아래 그림에서 빨간색 선에서 파란색 선까지의 거리를 제곱해서 모두 더한 값
                                 # 이것은 그룹 (IV, 독립변인) 때문에 생긴 그룹 간 차이이다
> ss.bet                         # 따라서 이것을 SS between group이라고 부른다
[1] 598.7747
> 


> 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라고 부른다
[1] 2179.19
> 
> 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라고 부른다
[1] 2605.623
> 
> # 이 둘은 random 한 차이이다
> ss.wit <- ss.o+ss.p 
> ss.wit
[1] 4784.813
> 


> ss.bet
[1] 598.7747
> ss.wit
[1] 4784.813
> ss.bet+ss.wit
[1] 5383.588
> 
> ss.tot
[1] 5383.588
>
 
> df.tot <- length(op$values)-1
> df.bet <- nlevels(op$group) - 1
> df.wit <- (n.o-1)+(n.p-1)
> df.tot
[1] 59
> df.bet
[1] 1
> df.wit
[1] 58
> 
> ms.tot <- ss.tot / df.tot
> ms.bet <- ss.bet / df.bet
> ms.wit <- ss.wit / df.wit
> 
> f.cal <- ms.bet / ms.wit
> f.cal
[1] 7.258158
> p.val <- pf(f.cal, df1=df.bet, df2=df.wit, lower.tail = F)
> p.val
[1] 0.009215657
> summary(aov(op$values~op$group))
            Df Sum Sq Mean Sq F value  Pr(>F)   
op$group     1    599   598.8   7.258 0.00922 **
Residuals   58   4785    82.5                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> t.test(o,p, var.equal = T)

	Two Sample t-test

data:  o and p
t = -2.6941, df = 58, p-value = 0.009216
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -11.012446  -1.623742
sample estimates:
mean of x mean of y 
 96.55324 102.87133 

> 
> diff <- m.o - m.p
> ssp <- (ss.o + ss.p) / (df.o + df.p)
> se <- sqrt(ssp/n.o+ssp/n.p)
> t.cal <- diff/se
> t.cal
[1] -2.694097
> p.t.cal <- pt(abs(t.cal), df=df.o+df.p, lower.tail = F)*2
> p.t.cal
[1] 0.009215657
> t.cal^2
[1] 7.258158
> f.cal
[1] 7.258158
> 
> df.bet
[1] 1
> df.wit
[1] 58
> f.cal
[1] 7.258158
> 
anova_note/output01.1765320761.txt.gz · Last modified: by hkimscil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki