獨斷論

통계기초 정리 7. One-way ANOVA 본문

카테고리 없음

통계기초 정리 7. One-way ANOVA

부르칸 2021. 10. 2. 07:37

여러개의 t test를 수행하면 type I 에러가 증가하지만 ANOVA를 하면 이를 줄일수 있다.

One-way ANOVA에서는 F test를 사용한다.

F statistic은 개념적으로 다음과 같다.

$$F = \frac {\textrm{Between groups variability}} {\textrm{Within group variability}} $$

 

Variability라고 함은 mean square로 나타낼수 있다.

$$F = \frac {MS_{Between} }{MS_{Within}}$$

 

ANOVA table로 정리하여 위 F statistic값을 구하면 다음과 같다.

여기서

$k : $ group index, $k = 1, 2, 3, \cdots, K$

$K : $ 총 그룹 갯수

$i : $ observation index

$n : $ 총 샘플 크기

$n_k : $ k번째 그룹의 샘플크기

$\bar{x}_k : $ k번째 그룹의 평균값

$\bar{x}_{\bullet} : $ 데이터 전체 평균

$x_{ik} : $ k번째 그룹의 i번째 값

$SS : $ Sum of squares

$MS : $ Mean sqaure

$df : $ 자유도

$F : $ F-ratio (test statistic)

 

F-test에서는 2개의 자유도를 사용한다.

Between groups 자유도 (분자)

$df_{Between} = K - 1$

 

Within groups 자유도 (분모)

$df_{Within} = n - K$

 

1. 가정과 가설검증

기본적인 가정은 다음과 같다.

  • 샘플은 서로 독립이다.
  • 종속변수가 정규분포이던지 샘플크기가 30 이상이어야만 한다.
  • 모집단의 종속변수 분산은 그룹끼리 같아야만 한다.
    대개 표준편차의 최대값을 표준편차의 최소값으로 나눈 몫이 2보다 작다면 이 가정이 맞다고 봐도 된다.

가설검증

$H_0 : \mu_1 = \mu_2 = \cdots = \mu_k$

$H_a : $ Not all $\mu$ are equal

 

예제

돼지 20마리를 4개의 그룹으으로 나누어 서로 다른 먹이를 주고 10개월 후에 몸무게를 측정하였을때 먹이가 몸무게 변화에 효과가 있었는지 보고자 한다.

 

데이터

Feed_1  Feed_2  Feed_3  Feed_4
60.8    68.3    102.6   87.9
57.1    67.7    102.2   84.7
65.0    74.0    100.5   83.2
58.7    66.3    97.5    85.8
61.8    69.9    98.9    90.3

위 데이터를 가지고 ANOVA table대로 F statistic을 구하여보면

# Weight of 4 groups
wgt1 = c(60.8, 57.1, 65, 58.7, 61.8)
wgt2 = c(68.3, 67.7, 74, 66.3, 69.9)
wgt3 = c(102.6, 102.2, 100.5, 97.5, 98.9)
wgt4 = c(87.9, 84.7, 83.2, 85.8, 90.3)

# Number of group
K = 4

# Number of observation of group k, n[k]
n = c(length(wgt1), length(wgt2), length(wgt3), length(wgt4))

# Total number of observation
ntotal  = sum(n)

# Degrees of freedom between groups
df_b = K - 1

# Degrees of freedom within groups
df_w = ntotal - K

# Total mean and group means
mean_total = (sum(wgt1) + sum(wgt2) + sum(wgt3) + sum(wgt4)) / ntotal
mean_wgt = c(mean(wgt1), mean(wgt2), mean(wgt3), mean(wgt4))

# Between Sum of squares, SS_b
SS_b = sum(n * (mean_wgt - mean_total)^2)

# Within Sum of squares, SS_w  
SS_w = sum((wgt1 - mean_wgt[1])^2) + sum((wgt2 - mean_wgt[2])^2) +
       sum((wgt3 - mean_wgt[3])^2) + sum((wgt4 - mean_wgt[4])^2)

# Mean square between
MS_b = SS_b / df_b

# Mean square within
MS_w = SS_w / df_w

# F statistic
Fstat = MS_b / MS_w

# p-value
pvalue = pf(q=Fstat, df1=df_b, df2=df_w, lower.tail=FALSE)  
print(pvalue)

 

aov( ) 함수를 이용할수도 있다.

wgtfeed.df = data.frame(wgt = c(wgt1, wgt2, wgt3, wgt4), 
                        feed = rep(c("A", "B", "C", "D"), each=5))
aov.result = aov(wgt ~ feed, data = wgtfeed.df)
summary(aov.result)

p-val가 5.28e-13이므로 H0를 기각하여, 먹이의 종류에 따라서 돼지 몸무게가 모두 같지 않다라고 결론 내린다.

 

 

예제

학생들에게 장래에 받고 싶은 상을 academy, olympic, nobel 중에 고르라고 하고 그들의 성적이 차이가 나는지 anova로 알아보고자한다.

 

데이터 파일

StudentSurvey.csv
0.02MB

 

위 데이터파일을 내려받고 R에서 불러들인다.

> stdsvy.df = read.csv("c:/tmp/StudentSurvey.csv", header = TRUE)
> head(stdsvy.df)
       Year Gender Smoke   Award HigherSAT Exercise TV Height
1    Senior      M    No Olympic      Math       10  1     71
2 Sophomore      F   Yes Academy      Math        4  7     66
3 FirstYear      M    No   Nobel      Math       14  5     72
4    Junior      M    No   Nobel      Math        3  1     63
5 Sophomore      F    No   Nobel    Verbal        3  3     65
6 Sophomore      F    No   Nobel    Verbal        5  4     65
  Weight Siblings BirthOrder VerbalSAT MathSAT  SAT  GPA Pulse
1    180        4          4       540     670 1210 3.13    54
2    120        2          2       520     630 1150 2.50    66
3    208        2          1       550     560 1110 2.55   130
4    110        1          1       490     630 1120 3.10    78
5    150        1          1       720     450 1170 2.70    40
6    114        2          2       600     550 1150 3.20    80
  Piercings
1         0
2         3
3         0
4         0
5         6
6         4
>

SAT 점수가 Award가 뭐냐에 따라 얼마나 다른지를 알아보면 된다.

> aov.results = aov(SAT ~ Award, data = stdsvy.df)
> summary(aov.results)
             Df  Sum Sq Mean Sq F value   Pr(>F)    
Award         2  324269  162134   11.67 1.23e-05 ***
Residuals   359 4986078   13889                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> TukeyHSD(aov.results, conf.level=0.95)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = SAT ~ Award, data = stdsvy.df)

$Award
                     diff        lwr       upr     p adj
Nobel-Academy    48.14635  -6.606189 102.89889 0.0976771
Olympic-Academy -14.23697 -68.127852  39.65391 0.8082976
Olympic-Nobel   -62.38332 -93.026035 -31.74061 0.0000072

F test의 pvalue가 1.23e-5로 H0를 기각하고 SAT 점수가 대답한 Award가 뭐냐에 따라 서로 차이가 존재한다.  Tukey's Honest Significant Difference 방법을 이용하여 Award의 어떤 level에서 차이가 나는지 알아볼수가 있다.

adjusted p-value가 Olympic과 Nobel 사이에서 가장 큰 차이를 보여줌을 알수 있다.

 

 

Comments