[통계적 추론] 7. ANOVA

2026. 7. 4. 18:00·BI&Programming-Tools/통계

ANOVA(Analysis of Variance, 분산 분석)는 세 집단 이상의 평균을 동시에 비교하는 통계 기법입니다.
이름에 분산이 들어가는 이유는, 집단 간 평균 차이가 유의한지를 집단 내 변동(오차)과 집단 간 변동의 비율로 판단하기 때문입니다.

t-검정을 반복 적용해서 세 집단을 비교하는 경우에 다중 검정 문제가 발생할 수 있습니다.

ANOVA는 한 번의 검정으로 모든 집단을 동시에 비교해서 이 문제를 피합니다.


ANOVA 전제 조건

모든 ANOVA에서 공통으로 필요한 전제 조건입니다.

정규성 (Normality)

각 집단 내 데이터가 정규분포를 따라야 합니다.

Shapiro-Wilk test로 집단별로 확인하거나 Q-Q plot으로 시각적으로 확인합니다. 표본 크기가 충분히 크면(집단당 n ≥ 30) 중심극한정리에 의해 이 가정이 느슨하게 충족됩니다.

등분산성 (Homogeneity of Variance)

모든 집단의 분산이 동일해야 합니다. Levene test로 확인합니다.

등분산 가정이 위반되면 Welch's ANOVA(oneway.test())를 대안으로 사용합니다.

독립성 (Independence)

각 관측값이 서로 독립적이어야 합니다. 연구 설계 단계에서 확보해야 하는 조건으로, 통계적으로 검정하기 어렵습니다.

같은 대상을 반복 측정하거나 집단 간 관계가 있는 경우 독립성 가정이 위반됩니다.


One-way ANOVA

언제 사용할까

하나의 독립변수(요인)가 세 집단 이상일 때 종속변수의 평균을 비교합니다.

예를 들어 세 가지 처리 조건(대조군, 처리군 A, 처리군 B)에 따른 유전자 발현량의 차이를 검정할 때 사용합니다.

동작 원리

전체 변동을 두 부분으로 분해합니다.

  • 집단 간 변동 (Between-group variation): 집단 평균들이 전체 평균에서 얼마나 퍼져 있는지
  • 집단 내 변동 (Within-group variation, 오차): 같은 집단 내에서 개별 관측값이 집단 평균에서 얼마나 퍼져 있는지

검정 통계량 F는 집단 간 변동을 집단 내 변동으로 나눈 비율입니다.

 

F = 집단 간 평균 제곱(MS_between) / 집단 내 평균 제곱(MS_within)

 

F 값이 클수록 집단 간 차이가 집단 내 오차보다 크다는 의미이고, F 분포를 따릅니다.

가설

  • H₀: 모든 집단의 평균이 같다 (μ₁ = μ₂ = μ₃ = ...)
  • H₁: 적어도 하나의 집단 평균이 다르다

ANOVA 결과가 유의하더라도 어느 집단 간에 차이가 있는지는 알 수 없습니사후 검정이 필요합니다.

R 코드

result <- aov(y ~ group, data = df)
summary(result)

 

summary()에서 집단 간 F 값과 p-value를 확인합니다.


Two-way ANOVA

언제 사용할까

두 개의 독립변수(요인)가 종속변수에 미치는 영향을 동시에 분석할 때 사용합니다.

두 요인의 주효과(main effect)와 두 요인 간의 상호작용 효과(interaction effect)를 함께 검정합니다.

 

예를 들어 처리 방법(A, B, C)과 성별(남, 여)이 유전자 발현량에 미치는 영향을 동시에 분석할 때 사용합니다.

주효과와 상호작용 효과

주효과(Main effect)는 하나의 요인이 다른 요인과 관계없이 종속변수에 미치는 독립적인 영향입니다.

상호작용 효과(Interaction effect)는 한 요인의 효과가 다른 요인의 수준에 따라 달라지는 경우입니다.

 

예를 들어 약물 효과가 성별에 따라 다르게 나타난다면 상호작용이 있는 것입니다.

결과 해석 시 상호작용 효과를 먼저 확인합니다. 상호작용이 유의하면 주효과만으로 해석하는 것이 의미가 없을 수 있습니다.

상호작용이 있을 때는 한 요인의 수준별로 다른 요인의 효과를 따로 분석하는 단순 주효과 분석(simple main effects)이 필요합니다.

R 코드

# 주효과와 상호작용 포함
result <- aov(y ~ factor1 * factor2, data = df)
summary(result)

# 상호작용 없이 주효과만
result <- aov(y ~ factor1 + factor2, data = df)

 

factor1 * factor2는 factor1 + factor2 + factor1:factor2와 동일합니다.

factor1:factor2가 상호작용 항입니다.


Two-way Mixed ANOVA

언제 사용할까

두 요인 중 하나는 집단 간 요인(between-subjects factor), 다른 하나는 집단 내 요인(within-subjects factor)일 때 사용합니다.

집단 간 요인은 각 참여자가 하나의 조건에만 해당하는 요인입니다(예: 성별, 처리군/대조군). 집단 내 요인은 같은 참여자가 모든 수준을 경험하는 요인입니다(예: 시간에 따른 반복 측정, 처리 전후).

 

예를 들어 두 그룹(처리군, 대조군)을 3개 시점에서 반복 측정한 경우, 그룹은 집단 간 요인이고 시간은 집단 내 요인입니다.

구형성 가정 (Sphericity)

집단 내 요인이 포함된 설계에서는 정규성, 등분산성 외에 구형성 가정이 추가됩니다.

구형성은 반복 측정 간 차이의 분산이 모두 같아야 한다는 조건입니다.

Mauchly's test로 검정하며, 가정이 위반되면 Greenhouse-Geisser 또는 Huynh-Feldt 보정을 적용합니다.

R 코드

# ez 패키지 사용 (반복 측정 포함 ANOVA에 적합)
library(ez)
result <- ezANOVA(
    data     = df,
    dv       = y,           # 종속변수
    wid      = subject,     # 참여자 ID
    within   = time,        # 집단 내 요인
    between  = group,       # 집단 간 요인
    detailed = TRUE
)

 


ANCOVA (Analysis of Covariance)

언제 사용할까

ANOVA에서 공변량(covariate)의 영향을 통제하면서 집단 간 평균을 비교할 때 사용합니다.

공변량은 종속변수에 영향을 주지만 주된 관심 대상이 아닌 연속형 변수입니다.

 

예를 들어 두 처리 방법 간 치료 효과를 비교할 때 사전 검사 점수나 나이가 결과에 영향을 준다면, 이를 공변량으로 통제해서 처리 효과를 더 순수하게 추정할 수 있습니다.

 

ANCOVA는 공변량의 영향을 제거함으로써 집단 간 차이를 더 민감하게 탐지할 수 있고(검정력 향상), 공변량으로 인한 혼란을 줄일 수 있습니다.

추가 전제 조건

기본 ANOVA 조건 외에 다음이 필요합니다.

  • 회귀 기울기의 동질성: 공변량과 종속변수 간의 관계(회귀 기울기)가 모든 집단에서 동일해야 합니다. 이 조건이 위반되면 ANCOVA 결과 해석이 왜곡됩니다.
  • 공변량이 독립변수(집단 요인)와 독립적이어야 합니다.

R 코드

result <- aov(y ~ covariate + group, data = df)
summary(result)

# 회귀 기울기 동질성 검정 (상호작용 항 추가)
result_interaction <- aov(y ~ covariate * group, data = df)
summary(result_interaction)
# 상호작용 항이 유의하면 기울기 동질성 가정 위반

 


사후 검정 (Post-hoc Test)

ANOVA에서 유의한 결과(p < 0.05)가 나오면 어느 집단 간에 차이가 있는지 파악하기 위해 사후 검정을 수행합니다.

사후 검정은 다중 비교를 수행하기 때문에 다중 검정 보정이 포함됩니다.

Tukey HSD (Honestly Significant Difference)

모든 집단 쌍을 비교하면서 가족별 오류율(familywise error rate)을 α 수준으로 통제합니다.

집단 수가 같고 표본 크기가 동일할 때 특히 적합합니다.

보수적이지 않으면서도 Type I Error를 잘 통제해서 ANOVA 사후 검정의 기본 선택지로 많이 사용됩니다.

TukeyHSD(aov_result)

Bonferroni 보정

유의수준 α를 비교 횟수로 나눠서 각 비교에 적용합니다.

가장 보수적인 방법으로 Type I Error 통제에 강력하지만, 비교 횟수가 많아질수록 Type II Error가 증가합니다.

비교할 집단 쌍이 미리 정해져 있거나(planned comparisons) 검정 횟수가 적을 때 적합합니다.

pairwise.t.test(y, group, p.adjust.method = "bonferroni")

Tukey HSD vs Bonferroni

집단 수가 많아질수록 Bonferroni가 지나치게 보수적이 됩니다.

모든 집단 쌍을 비교하는 탐색적 분석에는 Tukey HSD, 사전에 정해진 특정 비교에는 Bonferroni가 적합합니다.


ANOVA 유형 정리

유형 독립변수 특징
One-way ANOVA 1개 (집단 간) 기본 형태
Two-way ANOVA 2개 (집단 간) 주효과 + 상호작용 검정
Two-way Mixed ANOVA 1개 집단 간 + 1개 집단 내 반복 측정 포함, 구형성 가정 추가
ANCOVA 1개 이상 + 공변량 공변량 통제 후 집단 비교

 

'BI&Programming-Tools > 통계' 카테고리의 다른 글

[통계적 추론] 8. 회귀 분석  (0) 2026.07.04
[통계적 추론] 6. 상관 분석  (0) 2026.07.04
[통계적 추론] 5. 모수 검정 (t-검정)  (0) 2026.07.04
[통계적 추론] 4. 비모수 검정  (0) 2026.07.02
[통계적 추론] 3. 통계 분석 기법 선택  (0) 2026.07.02
'BI&Programming-Tools/통계' 카테고리의 다른 글
  • [통계적 추론] 8. 회귀 분석
  • [통계적 추론] 6. 상관 분석
  • [통계적 추론] 5. 모수 검정 (t-검정)
  • [통계적 추론] 4. 비모수 검정
데이터로 읽는 생명
데이터로 읽는 생명
is-note 님의 블로그 입니다.
  • 데이터로 읽는 생명
    In Silico Note
    데이터로 읽는 생명
  • 전체
    오늘
    어제
    • 분류 전체보기 (190)
      • Bio-Knowledge (16)
        • 분자생물학 & 유전학 기초 (0)
        • 전사체학 & 유전자 발현 (0)
        • 구조생물학 & 단백질 (0)
        • 싱글셀 & 다중오믹스 (0)
        • 임상유전학 & 질환 데이터 (0)
      • Programming (4)
        • API (4)
      • BI&Programming-Tools (111)
        • File Formats (14)
        • Linux & Bash Script (38)
        • Python (35)
        • R (11)
        • 통계 (8)
        • Pipeline Manager (0)
        • Etc (5)
      • Bio Data Analysis (28)
        • 서열분석개론 (6)
        • WGS(Whole Genome Seq) (11)
        • WES(Whole Exome Seq) (2)
        • RNA-Seq (4)
        • Metagenome (2)
        • Non-human Resequencing (1)
        • 임상유전체 분석 (1)
        • Multi-Omics (1)
      • Bio-Trends & Tech (1)
      • 코딩테스트 연습 (30)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    파이썬연습
    생물정보학
    fasta
    R기초
    ngs
    통계
    FASTQ
    분자생물학
    코딩테스트
    파이썬기초
    유전체분석
    리눅스기초
    파이썬
    데이터분석
    wgs
    bioinformatics
    파일포맷
    GATK
    R
    리눅스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
데이터로 읽는 생명
[통계적 추론] 7. ANOVA
상단으로

티스토리툴바