통계학/통계
[통계분석] 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