Home 파이썬을 활용한 데이터 분석 (중급) - 7. Analysis of Variance with python
Post
Cancel

파이썬을 활용한 데이터 분석 (중급) - 7. Analysis of Variance with python

본 post는 국가생명연구자원정보센터(KOBIC) 주관 인사이트마이닝 이부일 CEO의 Analysis of variance with python을 정리한 내용입니다.

Intro


Python을 이용하여 Analysis of variance with python 수행과정을 알아봅니다.

언제 사용하는가?


Analysis of variance with python은 세 개 이상의 독립적인 모집단의 수치형 자료의 평균에 차이가 있는지 분석할 때 사용하는 방법입니다. 모든 모집단의 수치형 자료가 정규분포를 따를 때 사용할 수 있습니다.

가설 세우기


  • 귀무가설 (Null Hypothesis, H0)
    • 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 없습니다.
  • 대립가설 (Alternative Hypothesis, H1 or HA)
    • 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 있습니다.

Post-Image SST(Sum of Square Total)
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


  • SST(Sum of Squuare Total)는 총제곱합으로 Y에 있는 모든 다름의 양을 의미합니다.
  • SST = SSE + SSB
  • SSE: 집단 내 제곱합을 의미합니다. 집단 내부적인 이유때문에 생긴 Y의 다름의 양입니다. 즉, SSE가 클수록 \(H_{0}\)(집단 간 차이가 없음)을 지지합니다.
  • SSB: 집단 간 제곱합을 의미합니다. 집단이 달라서 생긴 Y의 다름의 양입니다. 즉, SSB가 클수록 \(H_{1}\)(집단 간 차이가 있음)을 지지합니다.

Post-Image F분포
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


Analysis of variance


  • 1단계: 정규성 검정(Normality Test)
    • 귀무가설: 정규분포를 따릅니다.
    • 대립가설: 정규분포를 따르지 않습니다.
    • n < 5,000: Shapiro-Wilk Normality Test
    • n >= 5,000: Anderson-Darling Normality Test
    • 정규성 검정은 control group에서 한 번, treat1 group에서 한 번, treat2 group에서 한 번, 총 세 번 시행합니다.
  • 2단계: Levene의 등분산 검정
    • 귀무가설: 등분산입니다.
    • 대립가설: 이분산입니다.
  • 3단계: 등분산이 가정된 ANOVA 또는 이분산이 가정된 ANOVA
    • ANOVA를 시행합니다.

실습


  • 가설 설정
    • 귀무가설: 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 없습니다.
    • 대립가설: 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 있습니다.

Post-Image 데이터 로딩
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


  • 분석 1단계: 정규성 검정(Normality Test)
    • 귀무가설: 정규분포를 따릅니다.
    • 대립가설: 정규분포를 따르지 않습니다.
    • n < 5,000 : Shapito-Wilk Normality Test (shapiro(data.variable))
    • n >= 5,000 : Anderson-Darling Normality Test (anderson(data.variable))
    • shapiro normality test 결과,
      • ctrl group: 유의확률(p-value)가 0.747로 정규성 가정을 만족합니다.
      • trt1 group: 유의확률(p-value)가 0.452로 정규성 가정을 만족합니다.
      • trt2 group: 유의확률(p-value)가 0.564로 정규성 가정을 만족합니다.

Post-Image 정규성 검정
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


  • 분석 2단계: Levene의 등분산 검정
    • 귀무가설: 등분산입니다.
    • 대립가설: 이분산입니다.
    • levene 등분산 검정 결과 유의확률(p-value) 0.341로 유의수준(0.05)보다 크므로 귀무가설을 기각하지 못합니다. 즉, 등분산입니다.

Post-Image Levene의 등분산 검정
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


  • 분석 3단계: Analysis of variance
    • 귀무가설: 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 없습니다.
    • 대립가설: 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 있습니다.
    • 유의확률(p-value) 0.016으로 유의수준(0.05)보다 작으므로 귀무가설을 기각합니다. 즉, 재배방법(group)에 따라 풀의 생산량(weight)에 차이가 있습니다.

Post-Image ANOVA
https://www.edwith.org/python-data-analysis-2023/lecture/1475049


코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import pandas as pd
import scipy.stats as stats

PlantGrowth = pd.read_excel(
    io = '07PlantGrowth.xlsx',
    sheet_name = 0
)

print(PlantGrowth)


# Analysis I: Normality Test
# n < 5,000 -> Shapiro-Wilk Normality Test
print(stats.shapiro(PlantGrowth.loc[PlantGrowth['group'] == 'ctrl', 'weight']))
print(stats.shapiro(PlantGrowth.loc[PlantGrowth['group'] == 'trt1', 'weight']))
print(stats.shapiro(PlantGrowth.loc[PlantGrowth['group'] == 'trt2', 'weight']))


# Analysis II: Levene의 등분산 검정
# 귀무가설: 등분산입니다.
# 대립가설: 이분산입니다.
stats.levene(
    PlantGrowth.loc[PlantGrowth['group'] == 'ctrl', 'weight'],
    PlantGrowth.loc[PlantGrowth['group'] == 'trt1', 'weight'],
    PlantGrowth.loc[PlantGrowth['group'] == 'trt2', 'weight'],
)


# Analysis III: ANOVA
stats.f_oneway(
    PlantGrowth.loc[PlantGrowth['group'] == 'ctrl', 'weight'],
    PlantGrowth.loc[PlantGrowth['group'] == 'trt1', 'weight'],
    PlantGrowth.loc[PlantGrowth['group'] == 'trt2', 'weight'],
)



Take Home Message


Analysis of variance 이론을 학습하고 Google colab에서 실습해 보았습니다.

This post is licensed under CC BY 4.0 by the author.

파이썬을 활용한 데이터 분석 (중급) - 6. Wilcoxon's matched pairs signed rank test with python

파이썬을 활용한 데이터 분석 (중급) - 8. Parametric Multiple Comparison with python