Python에서 3원 anova를 수행하는 방법


3원 ANOVA는 세 가지 요인에 걸쳐 분포된 세 개 이상의 독립 그룹의 평균 간에 통계적으로 유의미한 차이가 있는지 여부를 확인하는 데 사용됩니다.

다음 예에서는 Python에서 3원 분산 분석을 수행하는 방법을 보여줍니다.

예: Python의 3원 분산분석

연구자가 두 가지 훈련 프로그램이 대학 농구 선수들 사이에서 점프 높이의 평균 향상으로 이어지는지 여부를 확인하려고 한다고 가정해 보겠습니다.

연구원은 성별과 부문(디비전 I 또는 II)도 점프 높이에 영향을 미칠 수 있다고 의심하며, 이것이 그가 이러한 요인에 대한 데이터도 수집하는 이유입니다.

그의 목표는 훈련 프로그램, 성별, 부문이 점프 높이에 어떤 영향을 미치는지 확인하기 위해 3원 분산 분석을 수행하는 것입니다.

Python에서 이 3원 분산 분석을 수행하려면 다음 단계를 따르세요.

1단계: 데이터 생성

먼저 데이터를 보관할 pandas DataFrame을 만들어 보겠습니다.

 import numpy as np
import pandas as pd

#createDataFrame
df = pd. DataFrame ({' program ': np.repeat ([1,2],20),
                   ' gender ': np. tile (np. repeat (['M', 'F'], 10), 2),
                   ' division ': np. tile (np. repeat ([1, 2], 5), 4),
                   ' height ': [7, 7, 8, 8, 7, 6, 6, 5, 6, 5,
                              5, 5, 4, 5, 4, 3, 3, 4, 3, 3,
                              6, 6, 5, 4, 5, 4, 5, 4, 4, 3,
                              2, 2, 1, 4, 4, 2, 1, 1, 2, 1]})

#view first ten rows of DataFrame 
df[:10]

	program gender division height
0 1 M 1 7
1 1 M 1 7
2 1 M 1 8
3 1 M 1 8
4 1 M 1 7
5 1 M 2 6
6 1 M 2 6
7 1 M 2 5
8 1 M 2 6
9 1 M 2 5

2단계: 3원 분산분석 수행

다음으로 statsmodels 라이브러리의 anova_lm() 함수를 사용하여 3원 분산 분석을 수행할 수 있습니다.

 import statsmodels. api as sm
from statsmodels. formula . api import ols

#perform three-way ANOVA
model = ols("""height ~ C(program) + C(gender) + C(division) +
               C(program):C(gender) + C(program):C(division) + C(gender):C(division) +
               C(program):C(gender):C(division)""", data=df) .fit ()

sm. stats . anova_lm (model, typ= 2 )

	                          sum_sq df F PR(>F)
C(program) 3.610000e+01 1.0 6.563636e+01 2.983934e-09
C(gender) 6.760000e+01 1.0 1.229091e+02 1.714432e-12
C(division) 1.960000e+01 1.0 3.563636e+01 1.185218e-06
C(program):C(gender) 2.621672e-30 1.0 4.766677e-30 1.000000e+00
C(program):C(division) 4.000000e-01 1.0 7.272727e-01 4.001069e-01
C(gender):C(division) 1.000000e-01 1.0 1.818182e-01 6.726702e-01
C(program):C(gender):C(division) 1.000000e-01 1.0 1.818182e-01 6.726702e-01
Residual 1.760000e+01 32.0 NaN NaN

3단계: 결과 해석

Pr(>F) 열에는 각 개별 요인에 대한 p-값과 요인 간의 상호 작용이 표시됩니다.

결과를 보면, 세 가지 요인 간의 상호작용 중 어느 것도 통계적으로 유의미하지 않음을 알 수 있습니다.

또한 세 가지 요인(프로그램, 성별, 부서) 각각이 다음 p-값에서 통계적으로 유의미하다는 것을 알 수 있습니다.

  • 프로그램 P-값: 0.00000000298
  • 성별 P-값: 0.00000000000171
  • 분할 P 값: 0.00000185

결론적으로, 훈련 프로그램, 성별, 부문은 모두 선수의 점프 높이 증가를 나타내는 중요한 지표라고 말할 수 있습니다.

또한 이 세 가지 요소 사이에는 유의미한 상호작용 효과가 없다고 말할 수 있습니다.

추가 리소스

다음 튜토리얼에서는 Python에서 다른 ANOVA 모델을 적용하는 방법을 설명합니다.

Python에서 일원 분산 분석을 수행하는 방법
Python에서 양방향 ANOVA를 수행하는 방법
Python에서 반복 측정 ANOVA를 수행하는 방법

의견을 추가하다

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다