통계학/통계

[통계분석] ANOVA (분산분석)

헬로희 2024. 12. 23. 20:42
728x90
  • 두 개 이상의 집단에서 그룹 평균 간 차이를 그룹 내 변동에 비교하여 살펴보는 데이터 분석 방법
  • 두 개 이상 집단들의 평균 간 차이에 대한 통계적 유의성 검증

  • 집단 간 변동(Between-group variability): 각 그룹 평균과 전체 평균 간의 차이에 의해 발생하는 변동.
  • 집단 내 변동(Within-group variability): 각 데이터가 속한 그룹 내에서의 변동.
  • 총 변동(Total Variability): 집단 간 변동 + 집단 내 변동

1. 일원배치 분산분석(One-way ANOVA)

: 하나의 범주형 변수의 영향을 알아보기 위해 사용

  • 각 집단은 서로 독립적이고 정규분포를 따른다. (정규성)
  • 각 집단의 분산은 같다. (등분산성)

1) 통계적 모형

2) 분산분석표

3) 가설검정

  • 귀무가설: 집간 간 모평균에는 차이가 없다.
  • 대립가설: 집단 간 모평균이 모두 같다고 할 수 없다.

4) 유의수준 설정

5) 검정통계량 값 및 유의확률 계산

  • 2) 분산분석표에서 F가 검정통계량

6) 기각여부 판단 및 의사결정

  • p-value < 유의수준: 귀무가설을 기각하고 대립가설을 채택
  • p-value > 유의수준: 귀무가설 채택

7) 사후검정

  • 분산분석 결과 귀무가설이 기각되어 적어도 한 집단에서 평균의 차이가 있음이 통계적으로 증명되었ㅇ르 경우, 어떤 집단들에 대해서 평균의 차이가 존재하는지 알아보기 위해 시행하는 분석
  • Duncan, MRT(Multiple Range Test), Fisher의 LSD(최소유의차), Turkey의 HSD, Scheffe 등

> Example

from scipy.stats import f_oneway

# 예제 데이터: 세 그룹의 관측값
group1 = [23, 20, 27, 30, 25]
group2 = [35, 40, 39, 33, 38]
group3 = [22, 21, 19, 18, 20]

# 일원분산분석
f_stat, p_value = f_oneway(group1, group2, group3)
print("F-statistic:", f_stat, "P-value:", p_value)

"""
Result:
F-statistic: 44.90196078431373 P-value: 2.6822572640791676e-06
"""
  • 귀무가설: μ1= μ2= μ3, 대립가설: not H0
  • 유의수준 alpha = 0.05
  • 검정통계량: 44.9, p-value: 0.00
  • 결론: p-value가 유의수준 0.05보다 작으므로 귀무가설을 기각한다. 즉, 집단 간 모평균이 모두 같다고 할 수 없다.
# 사후검정
# 데이터프레임 생성
data = pd.DataFrame({
    'values': group1 + group2 + group3,
    'group': ['Group1'] * len(group1) + ['Group2'] * len(group2) + ['Group3'] * len(group3)
})

# Tukey's HSD
print("\nTukey's HSD 결과:")
tukey_result = pairwise_tukeyhsd(endog=data['values'], groups=data['group'], alpha=0.05)
print(tukey_result)

# 시각화 (선택 사항)
tukey_result.plot_simultaneous()

  • Group1 vs Group2:
    • 평균 차이가 12.0으로, p=0.0001
    • 유의미한 차이가 있음 (p<0.05, Reject = True).
  • Group1 vs Group3:
    • 평균 차이가 -5.0으로, p=0.0463
    • 유의미한 차이가 있음 (p<0.05, Reject = True).
  • Group2 vs Group3:
    • 평균 차이가 -17.0으로, p=0.0000
    • 유의미한 차이가 있음 (p<0.05, Reject = True).
  • 결론: 세 그룹 간에 모두 유의미한 평균 차이가 있다. 특히, Group2는 다른 두 그룹과의 평균 차이가 가장 크다.

2. 이원배치 분산분석(Two-way ANOVA)

: 두 개의 범주형 변수 A,B의 영향을 알아보기 위해 사용되는 검증 방법

  • 두 독립변수 A,B 사이에 상관관계가 있는지 살펴보는 교호작용(두 독립변수의 범주들의 조합으로 인해 반응변수에 미치는 특별한 영향)에 대한 검증이 반드시 진행되어야 함
  • 등분산성
  • 정규성

1) 통계적 모형

2) 분산분석표

3) 가설검정

* 교호작용

  • 두 가지 이상의 특정 변수 조합에서 일어나는 효과
  • 독립변수 A, B사이에 상관관계가 존재할 경우, 교호작용이 있다는 의미
  • 교호작용이 없을 경우 주효과 검정 진행
  • 교호작용이 있을 경우 검정이 무의미함

4) 유의수준 설정

5) 검정통계량 값 및 유의확률 계산

  • 2) 분산분석표에서 F가 검정통계량

6) 기각여부 판단 및 의사결정


> Example

import pandas as pd
from statsmodels.formula.api import ols
from statsmodels.stats.anova import anova_lm

# 데이터 생성
data = pd.DataFrame({
    'Score': [85, 90, 88, 92, 89, 84, 78, 81, 79, 76, 88, 85],
    'Method': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'A', 'A', 'B', 'B'],
    'Gender': ['M', 'M', 'F', 'F', 'M', 'M', 'F', 'F', 'M', 'M', 'F', 'F']
})

# 이원배치 분산분석 모델 생성
model = ols('Score ~ C(Method) + C(Gender) + C(Method):C(Gender)', data=data).fit()

# 분산분석 수행
anova_results = anova_lm(model, typ=2)
print(anova_results)

 

  • Method (교육 방법): p=0.005<0.05, 교육 방법에 따라 점수 차이가 유의미함.
  • Gender (성별): p=0.05, 성별에 따른 점수 차이가 경계적으로 유의미함.
  • Interaction (상호작용): p=0.15>0.05, 교육 방법과 성별 간의 상호작용 효과는 유의미하지 않음.

3. F 검정표

 

728x90