일원 분산 분석

코딩다시시작·2024년 10월 25일

빅데이터분석

목록 보기
11/19

개념

  • 일원 분산 분석(One-Way ANOVA, Analysis of Variance)은 한 개의 독립 변수여러 그룹 간의 차이를 비교할 때 사용하는 통계 기법
  • 각 그룹의 평균이 동일한지 여부를 평가하기 위해 사용
  • 분산 분석은 데이터를 여러 그룹으로 나누고, 각 그룹 간의 평균 차이가 통계적으로 유의미한지를 검토하는데 유용

일원 분산 분석의 주요 개념

  1. 가정
    • 정규성: 각 그룹의 데이터는 정규 분포를 따름
    • 등분산성: 각 그룹의 데이터는 동일한 분산을 가져야 함
    • 독립성: 각 그룹의 데이터는 독립적
  1. 가설 설정
    • 귀무가설(H₀): 모든 그룹의 평균이 동일하다 (즉, 차이가 없다).
    • 대립가설(H₁): 적어도 하나의 그룹이 다른 그룹과 평균에서 차이가 있다.
  1. 분산의 정의
    분산 분석에서 분산은 총 제곱합(SST, Sum of Squares Total)을 이용해 계산
    • 처리 간 제곱합(SSTr, SSB): 각 그룹의 평균과 전체 평균 차이 값
      SSB=i=1kni(XˉiXˉ)2SSB = \sum_{i=1}^{k} n_i \left( \bar{X}_i - \bar{X} \right)^2
    • 처리 내 제곱합(SSE): 각 그룹 데이터가 그룹 평균에서 얼마나 벗어나는지를 측정
      SSE=i=1kj=1ni(XijXˉi)2SSE = \sum_{i=1}^{k} \sum_{j=1}^{n_i} \left( X_{ij} - \bar{X}_i \right)^2
    • 총 제곱합(SST): 위 두 제곱합의 합이며, 데이터의 총 변동성을 나타냅니다.
      SST=i=1kj=1ni(XijXˉ)2SST = \sum_{i=1}^{k} \sum_{j=1}^{n_i} \left( X_{ij} - \bar{X} \right)^2
      즉 SST는
      SST=SSTr(SSB)+SSESST = SSTr(SSB) + SSE
  1. F-검정(F-test)
    ANOVA에서는 F-통계량을 사용하여 그룹 간의 차이가 유의미한지 검토
    F-통계량은 처리 간 평균 제곱(MSTr)처리 내 평균 제곱(MSE)의 비율로 계산
    F=MSTrMSEF = \frac{MSTr}{MSE}
    여기서 MSTr은 처리 간 제곱합을 자유도로 나눈 값
    MSE는 처리 내 제곱합을 자유도로 나눈 값
  1. 결과 해석
    F-검정에서 도출된 p-값이 유의 수준(보통 0.05)보다 작으면 귀무가설을 기각하고, 그룹 간 평균에 통계적으로 유의미한 차이가 있다고 결론
    p-값이 유의 수준보다 크다면 귀무가설을 기각할 수 없음

일원 분산 분석의 단계

  1. 데이터 수집
  2. 가설 설정
  3. 분산 분석 수행
    • 각 그룹의 분산을 계산
    • F-통계량
  4. 결과 해석
    • p-값을 이용해 귀무가설을 기각할지 여부를 결정

문제

세 가지 다른 교육 방법(A, B, C)을 사용하여 수험생들의 시험 성적을 개선시키는 효과를 평가하고자 한다. 30명의 학생들을 무작위로 세 그룹으로 배정하여 교육을 실시하였고, 시험을 보고 성적을 측정하였습니다.
1. f값
2. p값
3. 검정결과 출력

  • 귀무가설(H0H0): 세 그룹 간의 평균 성적은 차이가 없다.
  • 대립가설(H0H0): 차이가 있다

각 그룹의 데이터

groupA = [85, 92, 78, 88, 83, 90, 76, 84, 92, 87]
groupB = [79, 69, 84, 78, 79, 83, 79, 81, 86, 88]
groupC = [75, 68, 74, 65, 77, 72, 70, 73, 78, 75]

shapiro로 데이터가 정규분포를 따르는지 여부 확인

Shapiro-Wilk 검정
1. 귀무가설(H0H_0): 데이터가 정규분포를 따른다
2. 대립가설(H1H_1): 데이터가 정규분포를 따르지 않는다.

  • p-값 > 0.05: 귀무가설 기각하지 않음 -> 데이터 정규분포 따름
  • p-값 < 0.05: 귀무가설 기각 -> 데이터는 정규분포를 따르지 않음
from scipy import stats
print(stats.shapiro(groupA))
print(stats.shapiro(groupB))
print(stats.shapiro(groupC))
out:
ShapiroResult(statistic=0.9364545941352844, pvalue=0.5142781734466553)
ShapiroResult(statistic=0.9197027683258057, pvalue=0.3544830083847046)
ShapiroResult(statistic=0.9560540914535522, pvalue=0.7401155233383179)
  • p 값이 다 0.05보다 크기 때문에, 귀무가설 채택

Levene 검정으로 3개의 그룹이 등분산성을 가지는지 여부

Levene 검정
1. 귀무가설(H₀): 각 그룹의 분산이 동일하다(등분산성 가정이 성립한다).
2. 대립가설(H₁): 적어도 하나의 그룹의 분산이 다른 그룹과 다르다(등분산성 가정이 성립하지 않는다).

  • p-값 > 0.05: 귀무가설 기각하지 않음 -> 데이터 등분산성 따름
  • p-값 < 0.05: 귀무가설 기각 -> 데이터는 등분산성을 따르지 않음
print(stats.levene(groupA,groupB,groupC))
out:
LeveneResult(statistic=0.38606847697756774, pvalue=0.6834162323267926)
  • p-값>0.05, 세 그룹 모두 등분산성을 따른다

method1: 회귀모델을 기반으로 한 ANOVA 테이블

그룹 데이터프레임으로 만들기

import pandas as pd
data = {
    'scores': groupA + groupB + groupC,
    'groups': ['A'] * len(groupA) + ['B'] * len(groupB) + ['C'] * len(groupC)
}
df = pd.DataFrame(data)
df
out:
scores	groups
0	85	A
1	92	A
2	78	A
3	88	A
4	83	A
5	90	A
6	76	A
...

일원분산분석을 위한 모델 학습

ols 함수로 ANOVA 모델 학습
ols 함수는 일반선형회귀를 수행, 이를 통해 ANOVA 모델 학습
즉 ANOVA는 그룹을 예측 변수로 사용한 단순 회귀 분석으로 볼 수 있음

from statsmodels.formula.api import ols
model = ols('scores ~ groups', df).fit()
  • scores ~ groups는 종속 변수(scores)와 독립 변수(groups) 간의 관계를 나타내어 성적을 예측하는 모델을 학습
  • df는 데이터프레임으로, groups 열은 각각의 그룹을, scores 열은 각 그룹에서 측정된 값을 포함

ANOVA 검정 수행

statsmodels.stats.anova 모듈의 anova_lm 함수를 통해 ANOVA 수행 F-통계량과 p-value를 구함

from statsmodels.stats.anova import anova_lm
print(anova_lm(model))
out:
 			df  sum_sq     mean_sq          F    PR(>F)
groups     2.0   834.2  417.100000  16.884108  0.000018
Residual  27.0   667.0   24.703704        NaN       NaN

df 자유도
- df(groups): 총 그룹의 수 -1 (3-1 = 2)
- df(Residual): 전체 데이터 수 - 그룹 개수 (30 - 3 = 27)

sum_sq (제곱합)
- groups: 그룹간 제곱합, 각 그룹의 평균과 전체 평균 간의 차이를 제곱하여 더한 값 ( 그룹간 차이가 클 수록 값이 커짐)
- Residual: 잔차 제곱의 합으로, 각 데이터의 실제 값과 해당 그룹의 평균 간 차이를 제곱하여 더한 값 (데이터의 변동성 나타냄)

mean_sq(평균 제곱)

  • 제곱합을 자유도로 나눈 값

F-통계량

  • 그룹 간 평균 제곱을 잔차 평균 제곱으로 나눈 값
  • F=MSTrMSE=meansq(groups)meansq(Residual)F = \frac{MSTr}{MSE} = \frac{meansq(groups)}{meansq(Residual)}

PR(>F) (P-value)

  • p-value는 귀무가설 기각 여부

결론

F-통계량: 16.88, p-value:0.000018
p-value < 0.05, 귀무가설을 기각
세 그룹(A, B, C) 간 평균 성적 차이가 통계적으로 유의미하다는 결론


method2: f_oneway 사용

일원배치법 수행 (f_oneway)

# 일원배치법 수행
f_value, p_value = stats.f_oneway(groupA, groupB, groupC)

# F-value
print(round(f_value,2))

# p-value
print(format(p_value,'.6f'))
16.88
0.000018

결론은 위와 같음

f_oneway vs ols

1. f_oneway vs ols의 개요

  • f_oneway (단순 ANOVA):

    • scipy.stats에서 제공하는 함수, 단순한 일원분산분석을 수행
    • 주어진 두 개 이상의 그룹의 평균 차이가 유의미한지 검정하는 간단한 방법
    • F-통계량p-value만 반환
  • ols + anova_lm (회귀 분석을 이용한 ANOVA):

    • statsmodels에서 제공하는 함수, 일반 선형 회귀(OLS 회귀)를 이용한 ANOVA 수행
    • 회귀 분석의 방법론을 사용하여 ANOVA를 더 구조적으로 수행, 더 많은 통계적 정보(회귀 계수, 모델의 적합성 평가 등)를 제공
    • 회귀 모델을 기반으로 한 ANOVA 테이블을 생성, 자세한 정보를 제공

2. 차이점

항목f_onewayols + anova_lm
모델링 접근법단순한 ANOVA 수행OLS 회귀를 이용한 ANOVA 수행 (회귀 모델 기반)
출력 정보F-통계량과 p-value자유도, 제곱합, 평균 제곱, F-통계량, p-value 등
확장성다변량 분석이 어려움여러 독립 변수 추가가 가능 (확장된 회귀 분석)
사용성빠르고 간단하게 평균 차이를 검정하는 데 적합회귀 계수나 모델 적합성을 추가적으로 평가 가능
복잡한 모델링단일 요인(그룹) 간 평균 차이 검정에 적합다중 요인 분석 및 상호작용, 공변량 등을 다룰 수 있음
고급 기능 지원제한적잔차 분석, 회귀 계수 추정 등 다양한 통계적 분석 가능

요약

  • f_oneway단순한 그룹 간 평균 차이 검정, F-통계량p-value를 반환하여 그룹 간 평균 차이가 있는지 판단
  • olsanova_lm회귀 분석 기반의 ANOVA를 수행, 더 확장된 분석(여러 요인, 상호작용, 공변량 분석 등)을 지원, 더 자세한 ANOVA 테이블과 통계 정보

출처: https://www.kaggle.com/code/agileteam/t3-anova

profile
gpt로 다시 배우는 개발

0개의 댓글