User Tools

Site Tools


anova

ANOVA, F-test

http://wiki.commres.org/wiki.php/ANOVA 참조

T-test 사용은 기본적으로 두 가지면에서 한계를 갖는다. 첫째는 독립변인으로 오로지 2 그룹만을 비교할 수 없다는 것이다. (예를 들 것). 두번째로는 t test 는 오직 하나만의 독립변인을 검증한다는 것이다. (예를 들 것).

ANOVA는 2개 이상의 treatment 혹은 population 집단의 평균 점수를 평가하는데 쓰이는 가설 검증 절차이다. 추정통계가 (Inferential statistics) 모두 그렇듯이, ANOVA 또한 샘플의 평균값으로 모집단의 평균값을 추정하여 각 집단 간의 차이가 통계학적으로 의미가 있는지 살펴보는 절차이다. ANOVA와 T-test는 샘플 그룹 간의 평균을 비교한다는 의미에서 서로 비슷하게 보이지만, ANOVA는 T-test에 비해 월등한 이점을 가지고 있다. 특히 T-test의 경우에는 두 집단 간의 비교만 가능하지만, ANOVA는 두개 혹은 그 이상의 집단 간의 평균을 비교하는것이 가능하다. 따라서 연구자는 ANOVA를 이용하여 실험이나 서베이 등을 좀 더 유연하게 디자인할 수 있다.

ANOVA
4 학년 5 학년 6 학년
샘플 1의 과학
지식 점수
샘플 2의 과학
지식 점수
샘플 3의 과학
지식 점수
* 독립변인: 학년,
* 종속변인: 과학지식

T-test와 마찬가지로, ANOVA 또한 독립적인 측정으로 이루어진 집단의 비교나 ( Independent T-test 반복 측정 (repeated measure)으로 나타나는 동일 집단의 시간차 비교에 사용될 수 있다. 독립적인 측정이라 함은 2개 이상의 treatment(처치 혹은 실험처치)나 2개 이상의 모집단에서 (예, 남자와 여자) 나타나는 상호배타적인 집단을 비교하는 것을 말한다.

ANOVA
5학년 샘플 A Time 1 Time 2 Time 3
T1 시점에서
샘플 A가
게임을 한 시간
T2 시점에서
샘플 A가
게임을 한 시간
T3 시점에서
샘플 A가
게임을 한 시간
* 독립변인: 미디어교육,
* 종속변인: 게임시간

반면에 반복측정은 여러가지 (두 번 이상의) 처치를 한 그룹이 시간을 두고 측정을 받는 것을 의미한다. 예를 들면, 5학년 아동들을 대상으로 미디어교육을 받기 전에 게임에 사용하는 시간을 측정을 하고, 같은 그룹을 미디어교육을 받은 후에 다시 '측정' 하는 것을 “반복측정”이라고 한다 (t-test 문서에서 동일집단 간의 차이에 대해서 알아볼 때 섹션이 여기에 해당한다).

Factorial design ANOVA

Factorial design
독립변인: 학생 수
Small Medium Large
독립변인2: 교육방법 A방법 샘플1 샘플2 샘플3
B방법 샘플4 샘플5 샘플6
* 두 개의 독립변인: 학생 수와 교육방법
* 하나의 종속변인: 과학지식

ANOVA는 또한 두 가지 이상의 독립변인의 (Independent Variable (Variable Identification 참조)) 효과를 동시에 살펴보는데 사용되기도 한다. 가령, 연구자는 ANOVA를 이용하여 사용자 유저인터페이스의 종류와 (A, B, C: Independent Variable 1) 동영상의 사용 (있고 없음, Independent Variable 2)가 과학지식의 습득에 얼마나 영향을 주는지 동시에 살펴볼 수 있다.

Factors

위의 표에서 사용된 용어인 독립변인을 (attributes) ANOVA에서는 팩터라고 (factor) 부른다. 위의 첫 번째 표에서 처럼 하나의 독립변인이 (factor) 이용된 경우 single factor design 이라고 하며, 두 번째처럼 두 개 이상의 독립변인이 이용된 경우를 factorial design 이라고 부른다 (Factorial Anova 참조).

Single Factor Design

아래의 그림은 부모의 사회경제적 지위에 따른 과학점수의 차이를 보여주는 예이다. Group1(H), Group2(M), Group3(L)의 세집단의 그룹 멤버쉽에 따라서 과학점수 ( $\small\mu_i$ )의 평균이 다를 것이라는 것이 연구자의 관심사이다.

three group comparison

위의 그림에서 연구자는 전체 모집단에서 3가지의 특성을 (attributes) 가지는 하위 집단을 규정하고, 이 집단의 특성이 서로 다른가에 대한 의문을 갖는 것을 나타낸다 (그림의 위쪽 부분). 연구자는 이 상태에서 각 집단의 구성원을 모두 조사할 수는 없으므로, 각각의 특성에 일치하는 샘플을 (Sample1, Sample2, Sample3) 구하여 샘플의 평균값을 ( $ \overline{X_i} $ ) 살펴보고, 각 평균값의 차이가 (1) 모집단의 실제 값을 대표하는지와 (2) 이 평균값의 차이가 통계학적으로 의미가 있는지를 살펴 본다. 즉, 위의 그림에서 평균값 $\overline{X_1}$ , $\overline{X_2}$ , $\overline{X_3}$ 의 {2, 4, 6} 간의 차이를 가지고 연구자는 두 가지 종류의 해석을 할 수 있다.

  1. 세 집단의 진짜 평균은 (모집단의 평균) 서로 다르지 않다. 위의 세 샘플의 평균 차이는 순전히 우연만으로 나타난 것으로 이 차이를 가지고 전체 3 집단 간의 차이가 있다고 이야기 할 수 없다.
  2. 세 샘플의 평균 차이는 실제 모집단에서의 집단 간의 차이를 반영한다.

첫 번째 해석은 $\small\text{H0: } \mu_1 = \mu_2 = \mu_3 $ 로 표현할 수 있다 (영가설). 두 번째 표현은 수학표현으로 간단하게 나타내기 어려운 점이 있다. 연구자는 $\small\text{H1: } \mu_1 \not= \mu_2 \not= \mu_3 $ 의 경우만을 살펴 보려는 것이 아니라, $\small\text{H1: } \mu_1 \not= \mu_2 $ 의 경우나 $\small\text{H1: } \mu_2 \not= \mu_3$ 의 경우, $\small\text{H1: } \mu_1 \not= \mu_3 $ 의 경우 등을 모두 인정하고 있기 때문이다. 따라서 두 번째 해석은 다음과 같이 나타낼 수 있으며 이를 연구자의 연구가설로 한다.

$\small\text{H1: }$ 적어도 한 집단의 평균이 다른 집단의 평균과 다를 것이다.

또한 첫 번째 해석은 위의 선언을 뒤집어 설명한 것으므로 null hypothesis 혹은 영가설 (Hypothesis testing 참조)라고 하겠다.

$\small\text{H0: } \mu_1 = \mu_2 = \mu_3 $

위의 예에서, t-test를 세번하게 되면 어떨까? 이론적으로 t-test는 두 그룹 간의 차이를 비교하는 것이므로 3번의 t-test를 통해서 그룹 간의 차이를 파악할 수 있다. 그러나, 이를 수행하는 것은 아래 두 가지의 문제점을 낳는다.

  1. 그룹 혹은 집단의 숫자가 늘어나게 되면 해야 할 t-test가 급격하게 늘어나게 된다. 3집단일 경우에는 3번에 그치지만, 4집단일 경우는 6번으로 늘어나게 된다. 즉, $ \text{Number of tests} = \frac {n(n-1)}{2} $ 의 테스트가 필요하게 된다.
  2. 한 번의 t-test를 할 때마다, Type I Error의 양이 늘어나게 된다.

Logic

위의 그림에서 연구자가 가지는 관심은 세집단 (Group1, Group2, Group3) 간의 차이이다. 이 차이가 일어나게 되는 이유는 두 가지가 있을 수 있다.

  1. 세 집단으로 구분되는 특성에 따른 차이가 있다. 즉, 독립 변인이라고 할 수 잇는 사회경제적지위 (SES)가 상, 중, 하 (Hi, Medium, Lo)로 나누어질 수 있는데, 이 특성이 영향력을 미쳐서 자녀의 과학점수 차이가 나타난다.
  2. 연구자가 피할 수 없는 개인 간의 차이에 의한 차이가 있다. 즉, 설령 세그룹 간의 특성으로 인해서 나타나는 차이를 제외하더라도, 순수한 개인 간 차이에서 기인하는 차이가 있을 수 있다.

위의 두가지 원인에 의해서 발생되는 차이를 그룹 간 차이 (between group difference)라고 하며, 이는 결국 treatment effect의 일종이라고 할 수 있다.

$$
\begin{equation}
\text{treatment effect} = \text{difference due to group membership } 
 + \text{ difference not due to group membership} \nonumber
\end{equation}
$$

연구자의 독립변인의 특성의 영향력 간의 차이를 비교한다고 하면 위의 예처럼 바로 treatment effect의 크기를 집단 간에 비교해 보는 것이다.

연구자는 또한 Treatment effect를 비교하는 것과 함께, 동일 그룹 내의 차이를 비교해 볼 수도 있다. 동일 그룹 내 구성원 간의 차이란 똑같은 상황에서 나타나는 차이를 말한다. 부모의 SES가 “상(H)“이라고 할 때, 이 샘플 그룹 내 구성원 간의 차이 또한 나타날 것이다. 그런데, 이 경우 구성원의 과학점수는 동일한 조건에서 측정되므로 이 때 나타나는 차이는 순전히 Random한 차이라고 할 수 있다. 이를 그룹내 효과 (Within group effect)라고 한다.

$$
\begin{equation}
\text{Within group effect} = \text{random difference among the members in a same membership} \nonumber
\end{equation}
$$

결국, Analysis of Variance라 함은 세 그룹 간의 평균이 얼마나 서로 멀리 떨어져 있는가 (treatment effect)를 살펴 보고, 이 차이가 충분한가를 판단하는 작업이라고 하겠다. 여기서 t-test의 개념적 논리를 다시 살펴보면 다음과 같다.

$\displaystyle t = \frac{\text{obtained difference}}{\text{difference by random error}}$

Obtained difference라 함은, 연구자가 두 그룹 간의 평균을 실제로 구해서(obtained) 그 차이를 (difference) 살펴 본 것을 말한다. 또한, difference by random error라 함은 두 그룹 간의 차이가 실제로는 없다고 하여도, 샘플링을 하기 때문에 나타날 수 밖에 없는, 연구자가 어쩔 수 없는 차이라고 하겠다.

ANOVA 또한 이 논리를 따른다 (즉, t-test의 논리를 Variance를 사용하여 구하는 것이다).

$F = \displaystyle \frac{\text{difference (variance) obtained (due to membership) + difference (variance) by error}}{\text{difference (variance) by error}}\;\cdots\cdots\;[1]$

위의 F-test에서 분자의 부분을 살펴 보면, 이는 treatment로 인해서 나타나는 차이를 말한다. 즉, 각각의 그룹의 상태가 다른 조건이었기 때문에 일어나는 차이를 말하므로, 그룹 간의 차이(between group difference)라고 이야기 할 수 있다. 반면에 분모 부분은 동일한 조건(within group)에서 연구자가 어쩔 수 없이 만나게 되는 차이를 말한다. 이를 그룹내 차이(within group difference)라고 한다. 따라서 위의 F-test는:

\begin{eqnarray}
F = \frac{\text{treatment difference}}{\text{random difference}}  
  = \frac{\text{between group difference (variance)}}{\text{within group difference}} \;\cdots\cdots\; [2] \nonumber
\end{eqnarray}

라고 표현할 수 있다. 그런데, [1] 식에서 만약에 처치효과가 (treatment effect) 없다면 F값이 어떻게 될까? treatment effect = 0 라고 한다면, F값의 계산에서 남는 것은 분모, 분자 모두 within group 내의 램덤 차이뿐이다. 여기서 일어나는 차이는 샘플링에 의해서 일어날 수 있는 약간의 차이라고 생각할 수 있으므로 분모와 분자의 값이 거의 일치하다고 가정을 할 수 있다. 이때의 F 값은 1이 된다. 즉, 예에서 보는 것처럼, 부모의 SES가 자녀의 과학성적에 영향을 주는가? 라는 질문에서 SES 효과가 없다면, 분산을 (variance) 구해서 분석한 (analysis) 결과 값은 1에 근접할 것이다.

식 <2>에서 언급한 것 처럼 F 값은 그룹 간의 차이와 (treatment difference) 그룹 내의 차이의 (error by chance) 비율을 구하는 것이다. 그렇다면 그룹간 차이와 (between group difference or variance), 그룹내 차이는 (within group difference or variance) 어떻게 구할까?

ANOVA 공식

세 개의 집단을 비교한다고 할 때, 우리가 구할 수 있는 분산 값은 세가지 종류가 있다. 즉 그림에서와 같이 세 그룹 간의 차이를 보는 분산이 있을 수 있으며, 각 그룹 내부의 구성원이 서로 얼마나 다른가를 보는 분산이 있을 수 있고, 그림에는 표시되어 있지 않지만 전체 구성원을 하나의 집단으로 놓고 보는 (즉, 그룹 간 구별을 하지 않는) 분산이 있다.

  • 전체 분산
  • 그룹 간 분산
  • 그룹 내 분산
ANOVA 3 group variance comparison

전체 분산은 바로 그룹 간 분산과 그룹 내 분산을 모두 더한 값이 된다. 즉 Variationtotal = Variationbetween + Variationwithin. 이를 도식화해서 설명하자면,

Variability Total
Between treatment variance Within treatment variance
1. Treatment effect 1. Differences due to chance
2. Differences due to chance

라고 할 수 있다.

참고로 분산을 구하는 방법은:

$s^2 = \frac{SS}{df}\;\cdots\;[3]$

이므로, 위의 세 그룹 간의 비교를 나타내는 그림은 다음과 같이 요약될 수 있다.

$\text{variance total} = s^2_{total} = \frac{SS_{total}}{df_{total}}$
$\text{variance between treatments} = s^2_{between} = \frac{SS_{between}}{df_{between}}$
$\text{variance within treatments} = s^2_{within} = \frac{SS_{within}}{df_{within}}$

그리고, 앞서 이야기 한대로, 우리가 구하고자 하는 F 값은 between group difference를 within group difference로 나눈 값이므로:

$F = \frac{\displaystyle \frac{SS_{between}}{df_{between}}}{\displaystyle \frac{SS_{within}}{df_{within}}} = \displaystyle \frac{\text{Variance between group treatments}}{\text{Variance within group treatments}}$ 라고 할 수 있다. 그런데, F-test (ANOVA)를 만든 학자들은 Variance라는 용어 대신에 Mean Square ( $\text{MS}$ )라는 용어를 사용한다. Variance는 Sum of Square ( $\text{SS}$ )를 $\text{df}$ 로 나눈 것이니, Mean Square라고 부르는 것도 나름 합리적이다 (즉, $ \text{MS} = \text{Variance} = s^2 = \frac{SS}{df}$ ). 그래서 위의 F 값을

$ F = \displaystyle \frac {MS_{between}}{MS_{within}} $ 으로 정리한다.

아래의 예를 보자. 아래는 부모의 SES 수준에 따른 11살 어린이 자녀의 과학문제를 맞춘 갯수이다. 연구자는 SES라는 사회적 개념과 지적 능력이 어떤 연관이 있을까에서 시작하여, 이를 테스트 해보기 위해서 아래의 유사실험을 만들어 내었다.

SES condition

Group 1 (L) Group 2 (M) Group 3 (H)
0 1 7 $\sum X^2 = 221$
$G = 45$
$N = 15$
$k = 3$
1 2 6
3 3 4
1 3 6
0 1 7
$T$ 5 10 30
$n$ 5 5 5
$\overline{X}$ 1 2 6
$SS$ 6 4 6

위의 표는 개인 점수 외에도 필요한 사항들을 가지고 있는데 이것 들에 대해서 우선 설명하겠다.

  • T : 각각의 그룹 구성원의 점수 합을 (total) 의미한다. {5, 10, 30}
  • SS : Sum of Square 값을 의미한다. 표에서는 각 그룹(집단)의 SS 값이 구하여져 있다. {6, 4, 6}
  • n : 각 그룹 구성원의 숫자를 (이 경우에는 모두 5) 의미한다. {5, 5, 5}
  • G : 전체 합을 말한다. 즉, 세 그룹에 속한 모든 구성원의 점수 합을 G라고 하였다 (Grand total = 45). $ G = 45 $
  • N : n과 대비하여 전체 구성원의 숫자를 말한다 (여기서는 5명씩 3그룹이 있으므로 15이다). $ N = 15 $
  • k : 집단(그룹)의 숫자를 말한다. 여기서는 3 그룹이 있으므로 3이다. $ k = 3 $
  • $\small\sum X^2$ : 이 값은 전체 분산값을 위해 미리 계산이 된 값이다. 전체 분산값을 구하기 위해서 이 값이 필요한 이유는 아래와 같다.

\begin{eqnarray*}
\text{SS} & = & \sum (X_i-\overline{X})^2 \\
& = & \sum (X_i^2 - 2 \overline{X} X_i + \overline{X}^2 ) \\
& = & \sum X_i^2 - 2 \overline{X} \sum X_i + \sum \overline{X}^2 \\
& = & \sum X_i^2 - 2 n \overline{X}^2 + n \overline{X}^2 \;\cdots\; \text{cause } \sum {X_i = n \overline{X} }; \\
& = & \sum X_i^2 - n \overline{X}^2 \;\cdots\cdots\cdots\cdots\cdots\cdots\cdots\cdots\; [1] \\
& = & \sum X_i^2 - \frac{(\sum {X_i)^2}}{n} \;\cdots\cdots\cdots\; [2] \;\;\;\; \text{cause } \overline{X}=\frac{\sum  X_i}{n} \;\; 
\end{eqnarray*}

위의 식 [1]과 [2]는 외울 것.

SS 분해

SS total

SStotal 은 위에서 밝힌 [1]의 공식으로 구할 수 있다.

\begin{eqnarray}
SS & = & {\sum} X_i^2 - n \overline{X}^2 \nonumber\\
& = & 221 - (15 * 3^2) \nonumber\\
& = & 221 - 135 \nonumber\\
& = & 86 \nonumber
\end{eqnarray}

\begin{eqnarray}
\text{SS} & = & \sum X_i^2 - \frac{(\sum {X_i)^2}}{n} \nonumber\\
& = & 221 - \frac{(45)^2}{15} \nonumber\\ 
& = & 221 - 135 \nonumber\\
& = & 86 \nonumber
\end{eqnarray}

$$
\text{SS} & = & \sum X_i^2 - \frac{(\sum {X_i)^2}}{n} 
$$

SS within

두 번째로 알아봐야 할 것은 각각의 그룹 내에서 그룹 멤버들이 평균에서 얼마나 흩어져 있는가이다. 이 분산값은 이전에 소개된 분산값의 공식을 이용해서 구할 수 있다. 단, 여기서 비교하는 그룹이 세 개이므로 SS 값은 모두 3개를 구할 수 있으므로, SSwithin값은 각각의 그룹 분산을 모두 더한 값이다.

$$
SS_{within}} = \sum {SS_{each group}
$$

위에서 각각의 SS값은 미리 구해 두었으므로, 이를 계산하면,

$$
SS_{within} & = & 6 + 4 + 6 = 16
$$

SS between

앞서 언급 하였듯이 그룹 간의(bewteen group) SS값은 SStotal 값에서 SSwithin 값을 제외한 값이 된다. SStotal = 85 이었고, SSwithin = 16 이었으므로,

\begin{eqnarray}
SS_{total} & = & SS_{between} + SS_{within} \nonumber\\
SS_{between} & = & SS_{total} - SS_{within} \nonumber\\
 & = & 86 - 16 \nonumber\\
 & = & 70 \nonumber
\end{eqnarray}

이라고 할 수 있다. 실제 SSbetween 구하는 공식을 사용하여 구해보면 아래와 같다.

\begin{eqnarray}
SS_{between} & = & \sum \frac{T^2}{n} - \frac{G^2}{N} \nonumber\\
& = & \frac{5^2}{5} + \frac{10^2}{5} + \frac{30^2}{5} - \frac{45^2}{15} \nonumber\\
& = & 5 + 20 + 180 - 135 \nonumber\\
& = & 70 \nonumber
\end{eqnarray}

혹은 SSbetween 값을 구하는 방식을 도출해 보면 다음과 같다. 그룹 간의 (between group) 분산을 구한다는 것은 세 평균이 전체 평균에서 얼마나 각각 떨어져 있는가를 보는 것이므로

$SS_{between} = \sum (\overline{X_i}-\overline{X_{total}})^2$

이라고 할 수 있는데, $\overline{X_i}-\overline{X_{total}}$ 의 합은 전체평균에서 그룹 평균을 뺀 값의 합으로 정확히 그룹의 분산을 위한 값이라고 할 수는 없다. 오히려 각각의 값에 그룹 구성원의 숫자를 곱해주는 것이 그룹들의 분산 값을 보여 주는 지표라고 할 수 있다. 따라서,

\begin{eqnarray}
SS_{between} & = & \sum n_i ( \overline{X_i} - \overline{X_{total}} )^2 \nonumber\\
& = & 5 * (1-3)^2 + 5 * (2-3)^2 + 5 * (6-3)^2 \nonumber\\
& = & 20 + 5 + 45 = 70 \nonumber
\end{eqnarray}

SS값이 분해되어서 나누어지는 과정을 도식화 해보면 다음과 같다.

SS 나누기(partition)



df 분해

$df$ (degrees of freedom) 역시 SS와 같은 방식을 취한다. 즉 $ df_{total} = df_{between} + df_{within} $ 으로 표현될 수 있다. 따라서, 각각의 조건에 맞는 $df$ 를 구해야 한다. 일반적으로 $df$ 값은 전체 (샘플) 구성원에서 1을 뺀 값을 갖는다. 예를 들면 $ S^2=\frac{SS}{df} $ 에서 $df$ 는 바로 샘플 숫자 n에서 1을 뺀 n-1이다.

df total

$ df_{total} $ 값은 그룹 소속을 막론한 전체 샘플 구성원의 숫자에서 1을 뺀 값이다. 즉, $df_{total}= N -1$

따라서 위 예의 $ df_{total} $ 값은

\begin{eqnarray*}
df_{total} & = & 15 - 1   \\
& = & 14 
\end{eqnarray*}

df within

그룹 내의 $s^2$ 값을 구할 때 사용하는 n-1, 즉 각각의 그룹의 분산에서 사용되는 n1-1; n2-1; n3-1 의 값을 모두 더하여 dfwithin을 구한다. 즉,

$$df_{within}=\small\sum\large(n_i-1) $$

다른 방법으로는 그룹 구성을 무시한 전체 샘플 숫자, N에서 그룹 숫자를 (여기서는 k = 3) 빼서 구할 수 있다. 이 편이 더하는 수고를 덜으므로 편리하다 하겠다.

$$df_{within} = N - k$$

따라서 예에서 구해야 하는 dfwithin 값은:

\begin{eqnarray}
   df_{within} & = & 15 -3  \nonumber \\
               & = & 12  \nonumber 
\end{eqnarray}

df between

그룹 간 분산에 사용되어야 하는 df값은 전체 그룹 숫자에서 1을 뺀 값이다. 즉,

$$df_{between} = k -1 $$

위의 예를 적용해 보면

\begin{eqnarray*}
df_{between} & = & 3 - 1  \\ 
& = & 2  
\end{eqnarray*}

SS 분석에서도 살펴 보았듯이 df에서도 dftotal = dfbetween + dfwithin의 형태를 갖는
다.

df 나누기


분산 값과 (MS) F 값 구하기

위에서 구한 값들을 요약 정리해보면 아래의 테이블과 같다.

각각의 SS와 df값 Mean Square (MS) 값
= Variance 값
F-distribution
테이블 볼 때
SStotal = 86 dftotal = 14
SSbetween = 70 dfbetween = 2 MSbetween = 70 / 2 = 35 분자 (numerator)
SSwithin = 16 dfwithin = 12 MSwithin = 16 / 12 = 1.33 분모 (denominator)

누누이 언급된 것이지만 variance값은 아래와 같이 구한다.

$$\displaystyle variance = \frac{SS}{n-1} = \frac{SS}{df} $$

ANOVA에서는 위의 variance라는 용어를 MS라고 부르는게 관습이라고 하였다.

$$\displaystyle MS = \frac{SS}{df}$$

위의 데이터에서 구한 값을 사용하여 각각의 MS값을 구해 본다면,

$$\displaystyle MS_{between}=\frac{SS_{between}}{df_{between}} = \frac{70}{2} = 35$$

그리고,

$$\displaystyle MS_{within} = \frac{SS_{within}}{df_{within}} = \frac{16}{12} = 1.33 $$

이제 구해야 할 F 값은 처음에 개념적으로 언급했듯이:

$$\displaystyle F=\frac{MS_{between}}{MS_{within}}$$

이고, 위의 데이터에서 구할 수 있는 F값은:

$$\displaystyle F=\frac{35}{1.33} = 26.25$$

우리가 구한 26.25 은 Fcalculated value라고 부를 수 있고, 이 값이 의미하는 것은 F 값의 분모와 분자 중 분자의 값이 분모의 값보다 상당히 크다는 것이다. F 값이나 t 값이나 구하는 공식의 공통적인 논리는 연구자가 발견하는 차이가 (obtained difference) 연구자가 어쩔 수 없이 만나게 되는 차이의 (difference by chance) 비율이 일정 숫자를 넘어서면 그룹 간의 차이를 인정하는 것이었다. 따라서, 위에서 구한 F-ratio 값은 우연히 나올 수 있는 variance의 차이가 (MSwithin), 그룹 간 실제 차이의 (MSbetween) 20배가 넘는다는 것을 의미하니, 그룹 차이가 있다고 판단하는 것이 옳을 것이다. 그러나, 이와 같은 판단을 내리기 위해서는 F distribution table을 살펴 보아야 한다1). 테이블 참조 결과 (표에서 분모, 분자에 맞추어 볼 것)

Fcritical value (2, 12, p < 0.05) = 3.89
Fcritical value (3.89) < Fcalculated value (26.25) 이므로 영가설을 부정하고 세 그룹 간에 차이가 존재한다는 연구가설을 지지하는 결정을 내린다. 참고로 treatment의 혹은 IV의 효과가 없을 때, F 값은 1에 근접한다는 이야기를 했고, Fcritical value (2, 12, p < 0.05) = 3.89 이 의미하는 것은 F값이 적어도 3.89는 넘어야 세 그룹 간의 차이가 없다는 영가설을 부정할 수 있다는 것을 뜻한다. 그런데 계산된 F값은 26.25로 비교값인 3.89를 훨씬 넘으므로 영가설을 부정한다.

ANOVA

Science Knowledge
Sum of
Squares
df Mean
Square
F Sig.
Between Groups 70 2 35 26.25 0.000
Within Groups 16 12 1.333
Total 86 14

샘플 숫자가 Treatment마다 다를때

Experiment
Vervet Rhesus Baboon
n = 4 n = 10 n = 6 N = 20
$\overline{X}$ = 9 $\overline{X}$ = 14 $\overline{X}$ = 4 G = 200
T = 36 T = 140 T = 24 $\small\sum X^2$ = 3400
SS = 200 SS = 500 SS = 320

숫자가 다른 샘플을 비교할 때도 마찬가지로 계산한다.

\begin{eqnarray*}
SS_{between} & = & \sum n_i ( \overline{X_i} - \overline{X_{total}} )^2 \\
 & = & 4 (9-10)^2 + 10 (14-10)^2 + 6 (4-10)^2 \\
 & = & 4 + 160 + 216 = 380 \\
SS_{within} & = & 200 + 500 + 320 = 1020 \\
SS_{total} & = & {\sum} X_i^2 - n \overline{X}^2 \\
 & = & 3400 - 20 (100) 
\end{eqnarray*}

\begin{eqnarray*}
df_{between} & = & k - 1 = 2 \\
df_{within} & = & (4-1) + (10-1) + (6-1)  \\
df_{total} & = & N -1 = 20 -1 = 19 \\
\end{eqnarray*}

$$F = 3.17 $$

논문 작성

Also read How to report an F statistic at york university site.

Table 1. Amount of time (days) the pain relieved
Placebo Drug A Drug B Drug C
M 1.0 1.0 4.0 6.0
SD 1.73 1.0 1.0 1.73

표 1은 각각의 처치에 대한 평균, 표준편차를 기록한 것이다. 분산 분석의 결과, 4가지 처치 간에 통계적으로 유의미한 차이가 있었다 (F(3,8) = 9.0, p < .05).

위에서 F-ratio가 제시되는 형식을 익혀 두어야 한다. 괄호 안의 두 숫자는 between, within df값을 의미한다. 다음으로 등호와 함께 계산된 F값을 보고해야 한다. 이 값이 어느 정도의 오류가능성을 갖는가에 대한 평가를 (즉, Type I Error) 기록해야 한다. 위에서 주의해야 할 점은 F값에 대한 판단은 4개의 집단 중 어디에서 차이가 발생했는지 (A-B? B-C? Placebo-C?)를 제시해 주지 않는다는 것이다. 따라서, 어떤 처치(treatment) 간에 통계학적으로 유의미한 차이가 보이는가는 post-hoc 테스트를 통해서 밝혀야 한다 (Sheffee Test).

ANOVA Summary
Source SS df MS
Between treatments 54 3 18 F = 9.0 *
Within treatments 16 8 2
Total 70 11
* p < .05

Post hoc test

Post hoc test

> adata <- read.csv("https://datascienceplus.com/wp-content/uploads/2017/08/tyre.csv")
> adata
        Brands  Mileage
1       Apollo 32.99800
2       Apollo 36.43500
3       Apollo 32.77700
4       Apollo 37.63700
5       Apollo 36.30400
6       Apollo 35.91500
7       Apollo 34.70000
8       Apollo 32.37900
9       Apollo 33.63100
10      Apollo 36.41900
11      Apollo 36.43000
12      Apollo 34.83600
13      Apollo 38.32800
14      Apollo 30.62300
15      Apollo 32.57500
16 Bridgestone 33.52300
17 Bridgestone 31.99500
18 Bridgestone 35.00600
19 Bridgestone 27.87900
20 Bridgestone 31.29700
21 Bridgestone 31.06200
22 Bridgestone 34.83800
23 Bridgestone 33.97600
24 Bridgestone 32.55200
25 Bridgestone 30.88100
26 Bridgestone 28.14400
27 Bridgestone 29.18400
28 Bridgestone 33.07500
29 Bridgestone 32.36500
30 Bridgestone 30.92500
31        CEAT 34.44565
32        CEAT 32.80658
33        CEAT 33.41499
34        CEAT 36.86118
35        CEAT 36.97277
36        CEAT 35.08145
37        CEAT 34.95412
38        CEAT 33.47516
39        CEAT 30.42748
40        CEAT 36.13392
41        CEAT 34.78336
42        CEAT 36.11675
43        CEAT 41.05000
44        CEAT 32.16845
45        CEAT 32.72624
46      Falken 39.59600
47      Falken 38.93700
48      Falken 36.12400
49      Falken 37.69500
50      Falken 36.58600
51      Falken 35.96700
52      Falken 36.73700
53      Falken 34.31000
54      Falken 40.25200
55      Falken 37.38200
56      Falken 40.66300
57      Falken 37.09500
58      Falken 38.00500
59      Falken 37.75600
60      Falken 37.26500
>
> fmod.tire <- aov(Mileage~Brands, data=adata)
> summary(fmod.tire)
            Df Sum Sq Mean Sq F value   Pr(>F)    
Brands       3  256.3   85.43   17.94 2.78e-08 ***
Residuals   56  266.6    4.76                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
> 
> TukeyHSD(fmod.tire)
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = Mileage ~ Brands, data = adata)

$Brands
                          diff        lwr       upr     p adj
Bridgestone-Apollo -3.01900000 -5.1288190 -0.909181 0.0020527
CEAT-Apollo        -0.03792661 -2.1477456  2.071892 0.9999608
Falken-Apollo       2.82553333  0.7157143  4.935352 0.0043198
CEAT-Bridgestone    2.98107339  0.8712544  5.090892 0.0023806
Falken-Bridgestone  5.84453333  3.7347143  7.954352 0.0000000
Falken-CEAT         2.86345994  0.7536409  4.973279 0.0037424
>
> tapply(adata$Mileage, adata$Brands, mean)
     Apollo Bridgestone        CEAT      Falken 
   34.79913    31.78013    34.76121    37.62467 
> 

F and t value

$$ F = t^{2}$$

> td <- read.csv("D:/Users/Hyo/Cs-Kant/CS/Rdata/t-test.csv")
> head(td)
  gender tmobconv out in. mobpeo
1      2       60   3   3      5
2      2       60   5   3      5
3      1       20   3  10      5
4      2       10   7   5      6
5      2       30   3   3      3
6      2       30   5   5      3
> 
> tmod <- t.test(tmobconv~gender, data=td, var.eq=T ,na.rm=T)
> tmod

	Two Sample t-test

data:  tmobconv by gender
t = -3.0453, df = 1449, p-value = 0.002367
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
 -48.88717 -10.58088
sample estimates:
mean in group 1 mean in group 2 
       91.28457       121.01860 

> tmod$statistic^2
       t 
9.273615 
> fmod <- aov(tmobconv~gender, data=td)
> summary(fmod)
              Df   Sum Sq Mean Sq F value  Pr(>F)   
gender         1   320284  320284   9.274 0.00237 **
Residuals   1449 50044262   34537                   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
56 observations deleted due to missingness
> 

Example

First Letter
Condition 1
X1
Last Letter
Condition 2
X2
No Letter
Condition 3
X3
15 21 28
20 25 30
14 29 32
13 18 28
18 26 26
16 22 30
13 26 25
12 24 36
18 28 20
41 21 15
T 180 240 270
n 10 10 10
Mean $\overline{X_1}$ = 18 $\overline{X_2}$ = 24 $\overline{X_3}$ = 27
Total $ T_1 = 180 $ $ T_2 = 240 $ $ T_3 = 270 $
$\sum{(X_i)^2}$ 3888 5868 7614

$\sum (X_i)^2 = 17370 $

$\overline{X_{total}} = 23 $

$\overline{X}^2 = 529 $

$ G = ? $

$ G^2 = ? $

$ \sum {(X_i)^2} = 17370 $



$ k =  $

$ n =  $

$ N =  $



$ df_{total} = $

$ df_{between} = $

$ df_{within} = $

x1 <- c(15, 20, 14, 13, 18, 16, 13, 12, 18, 41)
x2 <- c(21, 25, 29, 18, 26, 22, 26, 24, 28, 21)
x3 <- c(28, 30, 32, 28, 26, 30, 25, 36, 20, 15)
> data.frame(x1,x2,x3)
   x1 x2 x3
1  15 21 28
2  20 25 30
3  14 29 32
4  13 18 28
5  18 26 26
6  16 22 30
7  13 26 25
8  12 24 36
9  18 28 20
10 41 21 15
> xs <- stack(xc)
> xs
   values ind
1    50.5  x1
2    52.1  x1
3    51.9  x1
4    52.4  x1
5    50.6  x1
6    51.4  x1
7    51.2  x1
8    52.2  x1
9    51.5  x1
10   50.8  x1
11   47.5  x2
12   47.7  x2
13   46.6  x2
14   47.1  x2
15   47.2  x2
16   47.8  x2
17   45.2  x2
18   47.4  x2
19   45.0  x2
20   47.9  x2
21   46.0  x3
22   47.1  x3
23   45.6  x3
24   47.1  x3
25   47.2  x3
26   46.4  x3
27   45.9  x3
28   47.1  x3
29   44.9  x3
30   46.2  x3
> 
> colnames(xs[1]) <- "wrong"
> colnames(xs[2]) <- "cond"
# cf
# lengthofelements <- length(x1)
# varofvariable <- var(x1)
df_x1
df_x2
df_x3

ss_x1
ss_x2
ss_x3

df_bet
ss_bet

df_tot
ss_tot

df_with
ss_with

df_bet
ss_bet
df_tot <- length(xs$ind) - 1
ss_tot <- var(xs$values)*df_tot
var_tot <- var(xs$values)

df_x1 <- length(x1)-1
df_x2 <- length(x2)-1
df_x3 <- length(x3)-1
ss_x1 <- var(x1)*df_x1
ss_x2 <- var(x2)*df_x2
ss_x3 <- var(x3)*df_x3

E.G. 1 (R)

Explanation of the PlantGrowth data set

> PlantGrowth
   weight group
1    4.17  ctrl
2    5.58  ctrl
3    5.18  ctrl
4    6.11  ctrl
5    4.50  ctrl
6    4.61  ctrl
7    5.17  ctrl
8    4.53  ctrl
9    5.33  ctrl
10   5.14  ctrl
11   4.81  trt1
12   4.17  trt1
13   4.41  trt1
14   3.59  trt1
15   5.87  trt1
16   3.83  trt1
17   6.03  trt1
18   4.89  trt1
19   4.32  trt1
20   4.69  trt1
21   6.31  trt2
22   5.12  trt2
23   5.54  trt2
24   5.50  trt2
25   5.37  trt2
26   5.29  trt2
27   4.92  trt2
28   6.15  trt2
29   5.80  trt2
30   5.26  trt2
with(PlantGrowth, tapply(weight, group, mean))
 ctrl  trt1  trt2 
5.032 4.661 5.526 
with(PlantGrowth, tapply(weight, group, sd))
     ctrl      trt1      trt2 
0.5830914 0.7936757 0.4425733 
 boxplot(weight~group, col="red", data=PlantGrowth)
out = lm (weight ~ group, data=PlantGrowth)
out
Call:
lm(formula = weight ~ group, data = PlantGrowth)

Coefficients:
(Intercept)    grouptrt1    grouptrt2  
      5.032       -0.371        0.494  
anova(out)
Analysis of Variance Table

Response: weight
          Df  Sum Sq Mean Sq F value  Pr(>F)  
group      2  3.7663  1.8832  4.8461 0.01591 *
Residuals 27 10.4921  0.3886                  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
install.packages("multcomp")
library(multcomp)

out을 general linear hypothesis test에 적용

dunnett = glht(out, linfct=mcp(group="Dunnett"))
dunnett
	 General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Linear Hypotheses:
                 Estimate
trt1 - ctrl == 0   -0.371
trt2 - ctrl == 0    0.494
> summary(dunnett)
	 Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: lm(formula = weight ~ group, data = PlantGrowth)

Linear Hypotheses:
                 Estimate Std. Error t value Pr(>|t|)
trt1 - ctrl == 0  -0.3710     0.2788  -1.331    0.323
trt2 - ctrl == 0   0.4940     0.2788   1.772    0.153
(Adjusted p values reported -- single-step method)

Reference

One-way ANOVA in Laerd.com
One-way ANOVA using SPSS in Laerd.com

anova.txt · Last modified: 2018/10/19 07:36 by hkimscil