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를 수행하는 방법