2. 분산분석(ANOVA, Analysis of Variance)


분산분석은 세 개 이상의 독립된 집단 간 평균 차이를 검정할 때 사용하는 통계 기법입니다. 이 기법은 단일 평균 비교보다 더 일반적인 상황에서 사용되며, 집단 간 차이의 유의성 여부를 F-통계량을 통해 판단합니다.

  • 귀무가설 $H_0$: 모든 집단의 평균은 같다.
  • 대립가설 $H_1$: 적어도 하나의 집단 평균은 나머지와 다르다.

필수 가정 조건(Assumptions)

분산분석을 수행하기 위해서는 아래의 세가지 가정사항을 필요로 합니다:

  1. 정규성(Normality): 각 집단의 표본은 정규분포를 따른다고 가정합니다. -> Shapiro-Wilk test, Q-Q plot 등으로 확인
  2. 등분산성(Homoscedasticity): 각 집단의 분산은 동일하다고 가정합니다. -> Levene’s test 또는 Bartlett’s test로 검정
  3. 독립성(Independence): 각 표본은 서로 독립적으로 수집되어야 합니다. -> 실험 설계에서 통제되어야 함

ANOVA 결과로 귀무가설이 기각되더라도, 어떤 집단 간에 차이가 존재하는지 구체적으로 알 수 없습니다. 따라서 사후검정(Post-hoc Test) 이 필요하며, 주요 방법은 다음과 같습니다:

  • Tukey’s HSD
  • Scheffé test
  • Bonferroni correction
  • Dunnett’s test (대조군 비교)
  • Fisher’s LSD, Duncan 등

ANOVA는 다음과 같은 개념적 구조로 계산됩니다: $$ F = \frac{\text{집단 간 분산 (Between-group variance)}}{\text{집단 내 분산 (Within-group variance)}} $$

  • F값이 클수록 집단 간 평균 차이가 크다는 뜻
  • p값이 유의수준(예: 0.05)보다 작으면 귀무가설 기각

데이터 조건: 독립변수: 범주형(Categorical) 종속변수: 연속형(Numeric, Continuous)

ANOVA는 평균의 차이를 분산으로 해석합니다. 집단 간 평균이 멀리 떨어져 있으면 집단 간 분산이 커지고, 이는 집단 간 차이가 존재할 가능성이 높다는 것을 의미합니다.

일원분산분석(one-way ANOVA)

하나의 범주형 독립변수하나의 연속형 종속변수에 미치는 영향을 평가할 때 사용되는 통계 기법입니다. 이 분석은 3개 이상의 집단 평균 차이가 통계적으로 유의미한지 판단하기 위해 사용됩니다.

예시 - 연령대에 따른 유튜브 시청 시간 비교:

  • 독립변수(Factor): 연령대(청소녕, 성인, 노인) -> 범주형
  • 종속변수(Response): 하루 평균 유튜브 시간 -> 연속형
  • 분석 목표: 연령대별 시청 시간이 유의미하게 다른가?

분산분석표 (ANOVA Table)

Source of Variation (요인) Sum of Squares (SS, 제곱합) Degrees of Freedom (df, 자유도) Mean Square (MS, 제곱평균) F-value (F 통계량)
Between Groups (집단 간) $SS_{between}$ $k(집단 수) - 1$ $MS_{between} = SS_{between} / (k - 1)$ $F = MS_{between} / MS_{within}$
Within Groups (집단 내) $SS_{within}$ $N(전체 관측값 개수) - k$ $MS_{within} = SS_{within} / (N - k)$  
Total (전체) $SS_{total}$ $N - 1$ - -
구분 기호 정의
총 제곱합 $SS_{\text{total}}$ 전체 관측값이 전체 평균으로부터 얼마나 벗어났는지를 나타내는 총 변동량
집단 간 제곱합 $SS_{\text{between}}$ 각 집단 평균이 전체 평균에서 벗어난 정도. 집단 간 차이에 의해 설명되는 변동량
집단 내 제곱합 $SS_{\text{within}}$ 각 관측값이 자기 집단 평균에서 벗어난 정도. 집단 내의 오차로 인한 변동량

$SS_{\text{total}} = SS_{\text{between}} + SS_{\text{within}}$

분석 목적

  • 신형 스마트폰 A, B, C 세 모델 간 평균 속도 차이가 유의미한가?

가설 정리

  • 귀무가설 $H_0$: A, B, C 세 집단의 평균 속도는 같다.
  • 대립가설 $H_1$: 적어도 하나의 집단 평균이 다르다.
# 분산분석을 위한 데이터 생성
phoneSpeed <- runif(45, min = 75, max = 100)
telecom <- rep(c('A', 'B', 'C'), 15)
phoneData <- data.frame(phoneSpeed, telecom)

# 분산분석 수행
result <- aov(data = phoneData, phoneSpeed ~ telecom)
summary(result)
            Df Sum Sq Mean Sq F value Pr(>F)
telecom      2  102.3   51.14   0.988  0.381
Residuals   42 2174.0   51.76               
  • F값: 0.988, p-value: 0.381, 유의수준(α): 0.05
  • p-value(0.381) > 0.05 -> 귀무가설을 기각할 수 없음

즉, 세 모델의 속도 차이가 우연에 의한 것일 가능성이 높으며, 모델 A, B, C 간 평균 속도에 통계적으로 유의한 차이가 없습니다.

이원분산분석(two-way ANOVA)

이원분산분석은 두 개의 독립변수(factors)하나의 연속형 종속변수(response variable)에 미치는 영향을 동시에 분석하는 분산분석 기법입니다. 이 기법은 각 독립변수의 주효과(main effect)두 독립변수 간의 교호작용(interaction effect)을 모두 평가할 수 있습니다. 분석 목적은 각 독립변수가 종속변수에 미치는 개별 영향을 평가하며, 독립변수 간 상호작용(Interaction)이 존재하는지 확인하고 독립변수 간 상호작용이 통계적으로 유의할 경우, 단순한 주효과 해석은 부적절합니다.

예시 - 유튜브 시청 시간(종속변수)에 대해 성별(남/여)와 연령대(청소년/성인/노인)의 영향을 분석:

독립변수 A 성별(Male/Female)
독립변수 B 연령대(Teen/Adult/Senior)
종속변수 유튜브 하루 평균 시청 시간(continuous)

반복 유무에 따른 분류 | 유형 | 조건 | 설명 | | — | — | — | | **반복 있는 이원분산분석** | 동일한 독립변수 조합에 애댛 여러 샘플이 존재 | 교호작용 검정이 가능하며, 통계적 파워가 높음 | | **반복 없는 이원분산분석** | 각 독립변수 조합당 샘플이 하나뿐 | 교호작용 효과는 측정 가능하나 통계적으로 불안전할 수 있음 |

교호작용(Interaction Effect): 두 독립변수가 독립적으로 작용하지 않고, 동시에 종속변수에 영향을 미칠 때 발생 합니다 예를 들면, 여성과 청소년 조합에서 유튜브 시청 시간이 특히 높다면 교호작용 존재합니다.

반복이 있는 이원분산분석(Two-Way ANOVA with Replication)

반복이 있는 이원산분석은 두 개의 범주형 독립변수(요인)하나의 연속형 종속변수에 미치는 영향을 분석할 때 사용하는 통계 기법입니다. 특히, 각 요인 조합에 대해 두 개 이상의 관측값(반복 측정)이 있을 때 사용합니다.

분석 목적

  • 요인 A와 요인 B의 주효과(Main Effect) 검정
  • 두 요인의 교호작용 검정
  • 순수한 오차항(Residual Variance) 추정 가능
  • 분석의 정밀도와 통계적 신뢰성 향상

분산분석표 구성 | Source of Variation | Sum of Squares (SS) | Degrees of Freedom (df) | Mean Square (MS) | F-value | |———————|—————————-|———————————–|————————————————|——————————————–| | Factor A | $SS_A$ | $a - 1$ | $MS_A = SS_A / (a - 1)$ | $F_A = MS_A / MS_E$ | | Factor B | $SS_B$ | $b - 1$ | $MS_B = SS_B / (b - 1)$ | $F_B = MS_B / MS_E$ | | Interaction (A × B) | $SS_{AB}$ | $(a - 1)(b - 1)$ | $MS_{AB} = SS_{AB} / [(a - 1)(b - 1)]$ | $F_{AB} = MS_{AB} / MS_E$ | | Error (Within) | $SS_E$ | $ab(n - 1)$ | $MS_E = SS_E / [ab(n - 1)]$ | | | **Total** | $SS_T$ | $N - 1$ (where $N = abn$) |

  • $a$, $b$: 요인의 수준 수 / $n$: 각 셀의 반복 수 / $N = abn$
# 예제 데이터: 요인 A (성별), 요인 B (연령대), 반복 측정 있음
data <- data.frame(
    gender = rep(c("Male", "Female"), each = 6),
    age = rep(rep(c("Teen", "Adult", "Senior"), each = 2), 2),
    view_time = c(120, 130, 150, 155, 160, 165, 110, 115, 140, 135, 145, 150)
    )

# 두 요인과 교호작용 포함하여 ANOVA 수행
result_with_rep <- aov(view_time ~ gender * age, data = data)

# 결과 출력
summary(result_with_rep)
            Df Sum Sq Mean Sq F value   Pr(>F)    
gender       1  602.1   602.1  32.111   0.0013 ** 
age          2 2804.2  1402.1  74.778 5.74e-05 ***
gender:age   2    4.2     2.1   0.111   0.8966    
Residuals    6  112.5    18.7                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

“성별이나 연령대 각각은 영향력이 있지만, 둘이 조합됐을 때 특이한 변화가 생긴다고 보기 어렵다”

반복이 없는 이원산분산분석 (Two-Way ANOVA without Replication)

반복이 없는 이원분산분석은 두 개의 범주형 독립변수(요인)하나의 연속형 종속변수에 미치는 영향을 분석하는 기법으로, 각 요인 조합당 오직 1개의 관측값만 존재하는 경우에 사용합니다.

분석 목적

  • 요인 A와 요인 B의 주효과(Main Effect)를 검정
  • 자원이 제한된 상황에서 두 요인을 동시에 고려한 설계가 필요한 경우 사용
  • 반복이 없기 때문에 교호작용 효과는 검정할 수 없음

분산분석표 구성 | Source of Variation | Sum of Squares (SS) | Degrees of Freedom (df) | Mean Square (MS) | F-value | |———————|—————————-|——————————|—————————————-|————————————| | Factor A | $SS_A$ | $a - 1$ | $MS_A = SS_A / (a - 1)$ | $F_A = MS_A / MS_E$ | | Factor B | $SS_B$ | $b - 1$ | $MS_B = SS_B / (b - 1)$ | $F_B = MS_B / MS_E$ | | Error (Residual) | $SS_E$ | $(a - 1)(b - 1)$ | $MS_E = SS_E / [(a - 1)(b - 1)]$ | | | **Total** | $SS_T$ | $N - 1$ ($N = ab$) | | |

오차(Error): 통계적 모형을 가정하거나 검정할 때의 관측할 수 없는 이론적 오차
잔차(Residual): 실제 모델을 만든 후 데이터를 넣어 계산 가능한 관측 오차

# 반복 없는 경우: 각 조합에 하나의 값만 존재
data_no_rep <- data.frame(
    gender = rep(c("Male", "Female"), each = 3),
    age = rep(c("Teen", "Adult", "Senior"), 2),
    view_time = c(125, 152, 162, 112, 138, 148)
    )

# 교호작용 생략, main effect만 포함 (단순모형)
result_no_rep <- aov(view_time ~ gender + age, data = data_no_rep)

# 결과 출력
summary(result_no_rep)
            Df Sum Sq Mean Sq F value   Pr(>F)    
gender       1  280.2   280.2    1681 0.000594 ***
age          2 1423.0   711.5    4269 0.000234 ***
Residuals    2    0.3     0.2                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

주효과

  • 성별: P-value(Pr(>F)) = 0.000594으로 유의수준(0.05)보다 훨씬 작음
  • 나이: P-value(Pr(>F)) = 0.000234으로 유의수준(0.05)보다 훤씬 작음

잔차

  • Mean Sq = 0.2으로 그룹 내 오차가 평균적으로 매우 작음

적합도

  • 전체 제곱합 = 280.2(gender) + 1423.0(age) + 0.3(Residuals) = 1703.5
  • 설명된 제곱합 = 280.2 + 1423.0 = 1703.2
  • 설명 비율: $$ R^2 = \frac{1703.2}{1703.5} \approx \mathbf{0.9998} $$

    “성별과 연령대 모두 유튜브 시청 시간에 매우 유의한 영향을 미치며, 모델은 전체 변동의 거의 전부를 설명할 만큼 적합도가 매우 높습니다.”

다변량분산분석(MANOVA)

종속변수가 2개 이상인 경우, MONOVA(Multivariate ANOVA)를 수행합니다. 예를들면, 유튜브 시청 시간 + 틱톡 시청 시간 두개의 종속변수 분석입니다. 이를 다원분산분석(Multifactor analysis)이라고 부르기도 합니다.

# 샘플 데이터 생성
set.seed(123)
data <- data.frame(
    gender = factor(rep(c("Male", "Female"), each = 6)),
    age = factor(rep(c("Teen", "Adult", "Senior"), times = 4)),
    youtube = c(120, 130, 125, 145, 150, 155, 110, 115, 130, 135, 140, 138),
    tiktok = c(60, 75, 65, 80, 85, 90, 55, 58, 68, 70, 75, 72)
    )

# MANOVA 모델 구성
manova_model <- manova(cbind(youtube, tiktok) ~ gender * age, data = data)

# 결과 요약
summary(manova_model, test = "Pillai") # 또는 test = "Wilks", "Hotelling-Lawlet", "Roy"
           Df  Pillai approx F num Df den Df Pr(>F)
gender      1 0.53870  2.91945      2      5 0.1445
age         2 0.46445  0.90741      4     12 0.4902
gender:age  2 0.29552  0.52014      4     12 0.7228
Residuals   6                                      
  • Pillai는 다변량 효과 검정의 대표적인 통계량으로서, 0 ~ 1 사이의 값을 가지며 값이 클수록 유인이 종속변수들에 영향을 줄 가능성이 높습니다.
  • gender, age, gender:age 모두 p-value > 유의수준(0.05) -> 귀무가설을 기각할 수 없으며 교호작용도 없습니다.

“성별, 연령대, 교호작용 모두 종속변수(youtube + tiktok)에 유의한 영향을 미치지 않습니다. 즉, 집단 간 평균 차이는 우연에 의해 발생했을 가능성이 높습니다.”