통계

9.3 One-Factor Analysis of Variance

VirtualJin 2025. 1. 3. 13:05

* 본 블로그 포스트에서 사용된 표, 이미지 및 기타 관련 자료는 "PROBABILITY AND STATISTICAL INFERENCE 9th Edition"에서 발췌한 것입니다. 이 자료들은 내용을 요약하고 이해를 돕기 위한 참고용으로 제공됩니다. 또한, 해석 과정에서 일부 오류가 있을 수 있으니 원본을 참고하여 확인하시기 바랍니다

 

1. 이론정리  
 1) 개요  
    (1) 일원분산분석(One-Way Analysis of Variance, ANOVA)  
        a) 한 개의 요인(factor)이 여러 수준(level)을 가질 때 모집단 평균 간 차이를 비교하는 통계적 방법  
        b) 예: 교육 방법(A, B, C)에 따른 시험 성적 비교, 비료 유형에 따른 작물 수확량 비교  
        c) 모집단이 세 개 이상일 때, t-검정보다 더 적절한 방법  
    (2) 가정  
        a) 각 모집단은 정규분포를 따른다.  
        b) 모든 모집단의 분산은 동일하다(등분산성 가정).  
        c) 각 표본은 서로 독립적이다.  

 2) 가설 검정  
    (1) 귀무가설(H0): 모든 모집단 평균이 동일하다.  
        \[
        H_0: \mu_1 = \mu_2 = ... = \mu_m
        \]  
    (2) 대립가설(H1): 적어도 하나의 모집단 평균이 다르다.  
    (3) 검정 방법  
        a) 총 변동을 처리 간 변동(SS(T))과 오차 변동(SS(E))으로 분해  
        b) 분산비 검정(F-test) 수행  

 3) 제곱합(Sum of Squares, SS) 유도 과정  
    (1) 데이터 정의  
        a) 모집단 개수: \( m \)  
        b) 각 모집단의 샘플 개수: \( n_i \)  
        c) 전체 샘플 개수: \( N = \sum n_i \)  
        d) 개별 데이터: \( X_{ij} \) (i번째 그룹의 j번째 샘플)  
        e) 그룹 평균:  
           \[
           \bar{X}_i = \frac{1}{n_i} \sum_{j=1}^{n_i} X_{ij}
           \]
        f) 전체 평균:  
           \[
           \bar{X}_{..} = \frac{1}{N} \sum_{i=1}^{m} \sum_{j=1}^{n_i} X_{ij}
           \]

    (2) 총 제곱합(Total Sum of Squares, \( SS(TO) \))  
        a) 전체 데이터의 변동을 측정  
        b) 정의:  
           \[
           SS(TO) = \sum_{i=1}^{m} \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_{..})^2
           \]
        c) 유도 과정  
           - 전체 평균과 개별 데이터 간 편차의 제곱 합  

    (3) 처리 제곱합(Treatment Sum of Squares, \( SS(T) \))  
        a) 그룹 간 변동을 측정  
        b) 정의:  
           \[
           SS(T) = \sum_{i=1}^{m} n_i (\bar{X}_i - \bar{X}_{..})^2
           \]
        c) 유도 과정  
           - 각 그룹 평균과 전체 평균 간 편차를 이용하여 계산  

    (4) 오차 제곱합(Error Sum of Squares, \( SS(E) \))  
        a) 그룹 내 개별 데이터의 변동을 측정  
        b) 정의:  
           \[
           SS(E) = \sum_{i=1}^{m} \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_i)^2
           \]
        c) 유도 과정  
           - 각 샘플과 해당 그룹 평균 간 편차의 제곱 합  

    (5) 변동 분해 관계  
        a) 총 변동은 처리 간 변동과 오차 변동의 합으로 분해됨  
           \[
           SS(TO) = SS(T) + SS(E)
           \]

 4) 분산 분석 표 (ANOVA Table)  

Source    Sum of Squares (SS) Degrees of Freedom (df) Mean Square (MS)  F-ratio
Treatment   \( SS(T) \)   \( m-1 \)    \( MS(T) = \frac{SS(T)}{m-1} \) \( F = \frac{MS(T)}{MS(E)} \)
Error     \( SS(E) \)   \( N-m \)   \( MS(E) = \frac{SS(E)}{N-m} \)  -
Total     \( SS(TO) \)    \( N-1 \)  - -


 5) F 검정통계량  
    (1) 정의  
        a) 처리 간 변동(SS(T))이 오차 변동(SS(E))보다 큰지를 평가하는 지표  
        b) 분산비 검정(F-test) 사용  
    (2) 수식  
        \[
        F = \frac{MS(T)}{MS(E)} = \frac{SS(T) / (m-1)}{SS(E) / (N-m)}
        \]
    (3) 자유도  
        a) 분자의 자유도: \( df_T = m - 1 \)  
        b) 분모의 자유도: \( df_E = N - m \)  
        c) F-분포 \( F(m-1, N-m) \) 사용하여 유의성 검정 수행  

 

6) 정리 9.3-1 (Theorem 9.3-1)  

  (1) 정리 내용  
      a) \( Q = Q_1 + Q_2 + \cdots + Q_k \) 이고, \( Q, Q_1, ..., Q_k \) 는 동일한 분산 \( \sigma^2 \) 을 가지는 
          서로 독립적인 정규분포를 따르는 \( n \) 개의 변수에 대한 이차형식(quadratic form)이다.  
      b) \( Q/\sigma^2, Q_1/\sigma^2, ..., Q_{k-1}/\sigma^2 \) 는 각각 카이제곱 분포를 따르며 자유도는
           \( r, r_1, ..., r_{k-1} \) 이다.  
      c) 만약 \( Q_k \) 가 음이 아닌 경우, 다음이 성립한다.  
          - (a) \( Q_1, ..., Q_k \) 는 서로 독립이다.  
          - (b) \( Q_k/\sigma^2 \) 는 자유도가 \( r - (r_1 + ... + r_{k-1}) = r_k \) 인 카이제곱 분포를 따른다.  

  (2) 증명  
  a) \( X_1, X_2, ..., X_n \) 이 평균이 0이고 분산이 \( \sigma^2 \) 인 서로 독립적인 정규분포를 따른다고 가정한다.  
  b) 임의의 이차형식 \( Q = X^T A X \) 를 정의하면, 특정 행렬 \( A \) 에 따라 \( Q \) 는 카이제곱 분포를 따를 수 있다.  
  c) 가정에 따라, \( Q_1, Q_2, ..., Q_k \) 역시 같은 분산을 가지는 정규분포를 따르는 변수들의 이차형식이므로,  
     \[
     Q = Q_1 + Q_2 + \cdots + Q_k
     \]
     가 성립한다.  
  d) 카이제곱 분포의 가법성(additivity of chi-square distribution) 성질에 의해, 각각의 \( Q_i \) 가 서로 독립이면,
      그 합도 카이제곱 분포를 따른다.  
  e) 만약 \( Q_k = Q - (Q_1 + ... + Q_{k-1}) \) 가 음이 아닌 경우,  
     \[
     Q_k = Q - \sum_{i=1}^{k-1} Q_i
     \]
     이므로, 남은 자유도는 다음과 같이 계산된다.  
     \[
     r_k = r - (r_1 + r_2 + ... + r_{k-1})
     \]
  f) 따라서, \( Q_k/\sigma^2 \) 는 자유도가 \( r_k \) 인 카이제곱 분포를 따르며, 또한 \( Q_1, ..., Q_k \) 는 서로 독립임을
     알 수 있다. 

 

2. 예제  
1) 문제  
    (1) 예제 1: 교육 방법에 따른 학생 성적 비교  
        - 세 가지 교육 방법(A, B, C)을 적용한 후 학생들의 시험 성적이 차이가 있는지 검정하라.  
        - 데이터:  
          - A: [85, 90, 88, 92, 86]  
          - B: [78, 82, 85, 80, 79]  
          - C: [90, 88, 91, 92, 89]  
        - 유의수준: 0.05  

    (2) 예제 2: 비료 종류에 따른 작물 성장 비교  
        - 서로 다른 세 종류의 비료(X, Y, Z)가 작물 성장에 미치는 영향을 비교한다.  
        - 데이터:  
          - X: [15, 18, 16, 20, 19]  
          - Y: [22, 24, 23, 25, 26]  
          - Z: [12, 14, 13, 11, 15]  
        - 유의수준: 0.05  

    (3) 예제 3: 광고 유형별 제품 판매량 비교  
        - 세 가지 광고 유형(A, B, C)이 제품 판매량에 미치는 영향을 비교한다.  
        - 데이터:  
          - A: [55, 60, 58, 62, 57]  
          - B: [48, 50, 52, 47, 49]  
          - C: [65, 68, 66, 70, 64]  
        - 유의수준: 0.05  

2) 답안   
    (1) 예제 1: 교육 방법에 따른 학생 성적 비교  
        a) 각 그룹의 평균 및 전체 평균 계산  
           - A 그룹 평균:  
             \[
             \bar{X}_A = \frac{85 + 90 + 88 + 92 + 86}{5} = 88.2
             \]  
           - B 그룹 평균:  
             \[
             \bar{X}_B = \frac{78 + 82 + 85 + 80 + 79}{5} = 80.8
             \]  
           - C 그룹 평균:  
             \[
             \bar{X}_C = \frac{90 + 88 + 91 + 92 + 89}{5} = 90.0
             \]  
           - 전체 평균:  
             \[
             \bar{X}_{..} = \frac{(88.2 \times 5) + (80.8 \times 5) + (90.0 \times 5)}{15} = 86.33
             \]  

        b) 총 제곱합(SS(TO)) 계산  
           \[
           SS(TO) = \sum_{i=1}^{m} \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_{..})^2
           \]  
           \[
           SS(TO) = (85-86.33)^2 + (90-86.33)^2 + \dots + (89-86.33)^2 = 166.67
           \]  

        c) 처리 제곱합(SS(T)) 계산  
           \[
           SS(T) = \sum_{i=1}^{m} n_i (\bar{X}_i - \bar{X}_{..})^2
           \]  
           \[
           SS(T) = 5(88.2 - 86.33)^2 + 5(80.8 - 86.33)^2 + 5(90.0 - 86.33)^2 = 119.07
           \]  

        d) 오차 제곱합(SS(E)) 계산  
           \[
           SS(E) = SS(TO) - SS(T) = 166.67 - 119.07 = 47.6
           \]  

        e) 자유도 계산  
           - 처리 자유도(df_T) = \( m - 1 = 3 - 1 = 2 \)  
           - 오차 자유도(df_E) = \( N - m = 15 - 3 = 12 \)  

        f) F 검정통계량 계산  
           \[
           F = \frac{MS(T)}{MS(E)} = \frac{SS(T) / df_T}{SS(E) / df_E}
           \]  
           \[
           F = \frac{119.07 / 2}{47.6 / 12} = \frac{59.54}{3.97} = 15.01
           \]  

        g) 유의수준 0.05에서 F 임계값(자유도 2, 12) = 3.89  
           - \( 15.01 > 3.89 \) → 귀무가설 기각  
           - 결론: 교육 방법에 따라 학생 성적이 유의미한 차이를 보인다.   
   
    (2) 예제 2: 비료 종류에 따른 작물 성장 비교  
        a) 각 그룹의 평균 및 전체 평균 계산  
           - X 그룹 평균:  
             \[
             \bar{X}_X = \frac{15 + 18 + 16 + 20 + 19}{5} = 17.6
             \]  
           - Y 그룹 평균:  
             \[
             \bar{X}_Y = \frac{22 + 24 + 23 + 25 + 26}{5} = 24.0
             \]  
           - Z 그룹 평균:  
             \[
             \bar{X}_Z = \frac{12 + 14 + 13 + 11 + 15}{5} = 13.0
             \]  
           - 전체 평균:  
             \[
             \bar{X}_{..} = \frac{(17.6 \times 5) + (24.0 \times 5) + (13.0 \times 5)}{15} = 18.2
             \]  

        b) 총 제곱합(SS(TO)) 계산  
           \[
           SS(TO) = \sum_{i=1}^{m} \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_{..})^2
           \]  
           \[
           SS(TO) = (15-18.2)^2 + (18-18.2)^2 + \dots + (15-18.2)^2 = 87.6
           \]  

        c) 처리 제곱합(SS(T)) 계산  
           \[
           SS(T) = \sum_{i=1}^{m} n_i (\bar{X}_i - \bar{X}_{..})^2
           \]  
           \[
           SS(T) = 5(17.6 - 18.2)^2 + 5(24.0 - 18.2)^2 + 5(13.0 - 18.2)^2 = 82.0
           \]  

        d) 오차 제곱합(SS(E)) 계산  
           \[
           SS(E) = SS(TO) - SS(T) = 87.6 - 82.0 = 5.6
           \]  

        e) 자유도 계산  
           - 처리 자유도(df_T) = \( m - 1 = 3 - 1 = 2 \)  
           - 오차 자유도(df_E) = \( N - m = 15 - 3 = 12 \)  

        f) F 검정통계량 계산  
           \[
           F = \frac{MS(T)}{MS(E)} = \frac{SS(T) / df_T}{SS(E) / df_E}
           \]  
           \[
           F = \frac{82.0 / 2}{5.6 / 12} = \frac{41.0}{0.467} = 87.8
           \]  

        g) 유의수준 0.05에서 F 임계값(자유도 2, 12) = 3.89  
           - \( 87.8 > 3.89 \) → 귀무가설 기각  
           - 결론: 비료 종류에 따라 작물 성장량이 유의미하게 다르다.   

    (3) 예제 3: 광고 유형별 제품 판매량 비교  
        a) 각 그룹의 평균 및 전체 평균 계산  
           - A 그룹 평균:  
             \[
             \bar{X}_A = \frac{55 + 60 + 58 + 62 + 57}{5} = 58.4
             \]  
           - B 그룹 평균:  
             \[
             \bar{X}_B = \frac{48 + 50 + 52 + 47 + 49}{5} = 49.2
             \]  
           - C 그룹 평균:  
             \[
             \bar{X}_C = \frac{65 + 68 + 66 + 70 + 64}{5} = 66.6
             \]  
           - 전체 평균:  
             \[
             \bar{X}_{..} = \frac{(58.4 \times 5) + (49.2 \times 5) + (66.6 \times 5)}{15} = 58.0
             \]  

        b) 총 제곱합(SS(TO)) 계산  
           \[
           SS(TO) = \sum_{i=1}^{m} \sum_{j=1}^{n_i} (X_{ij} - \bar{X}_{..})^2 = 185.2
           \]  

        c) 처리 제곱합(SS(T)) 계산  
           \[
           SS(T) = \sum_{i=1}^{m} n_i (\bar{X}_i - \bar{X}_{..})^2 = 166.4
           \]  

        d) 오차 제곱합(SS(E)) 계산  
           \[
           SS(E) = SS(TO) - SS(T) = 185.2 - 166.4 = 18.8
           \]  

        e) 자유도 계산  
           - 처리 자유도(df_T) = \( m - 1 = 3 - 1 = 2 \)  
           - 오차 자유도(df_E) = \( N - m = 15 - 3 = 12 \)  

        f) F 검정통계량 계산  
           \[
           F = \frac{166.4 / 2}{18.8 / 12} = \frac{83.2}{1.567} = 53.1
           \]  

        g) 유의수준 0.05에서 F 임계값(자유도 2, 12) = 3.89  
           - \( 53.1 > 3.89 \) → 귀무가설 기각  
           - 결론: 광고 유형에 따라 제품 판매량에 유의미한 차이가 있다.   


# R code
# 문제 1
# 데이터 생성
scores <- list(A = c(85, 90, 88, 92, 86),
               B = c(78, 82, 85, 80, 79),
               C = c(90, 88, 91, 92, 89))

# 데이터 변환
data <- stack(scores)

# 분산분석 수행
result <- aov(values ~ ind, data = data)
summary(result)

# 문제 2
# 데이터 생성
fertilizer <- list(X = c(15, 18, 16, 20, 19),
                   Y = c(22, 24, 23, 25, 26),
                   Z = c(12, 14, 13, 11, 15))

# 데이터 변환
data <- stack(fertilizer)

# 분산분석 수행
result <- aov(values ~ ind, data = data)
summary(result)

# 문제 3
# 데이터 생성
ads <- list(A = c(55, 60, 58, 62, 57),
            B = c(48, 50, 52, 47, 49),
            C = c(65, 68, 66, 70, 64))

# 데이터 변환
data <- stack(ads)

# 분산분석 수행
result <- aov(values ~ ind, data = data)
summary(result)
# Python code 
import scipy.stats as stats
import numpy as np

# 문제 1
# 데이터 생성
group_A = [85, 90, 88, 92, 86]
group_B = [78, 82, 85, 80, 79]
group_C = [90, 88, 91, 92, 89]

# 일원분산분석 수행
F, p_value = stats.f_oneway(group_A, group_B, group_C)

# 결과 출력
print(f"F-statistic: {F:.3f}, p-value: {p_value:.5f}")

# 문제 2
# 데이터 생성
group_X = [15, 18, 16, 20, 19]
group_Y = [22, 24, 23, 25, 26]
group_Z = [12, 14, 13, 11, 15]

# 일원분산분석 수행
F, p_value = stats.f_oneway(group_X, group_Y, group_Z)

# 결과 출력
print(f"F-statistic: {F:.3f}, p-value: {p_value:.5f}")

# 문제 3
import scipy.stats as stats
import numpy as np

# 데이터 생성
group_A = [55, 60, 58, 62, 57]
group_B = [48, 50, 52, 47, 49]
group_C = [65, 68, 66, 70, 64]

# 일원분산분석 수행
F, p_value = stats.f_oneway(group_A, group_B, group_C)

# 결과 출력
print(f"F-statistic: {F:.3f}, p-value: {p_value:.5f}")