ADP/통계분석

[통계분석] 예제로 풀어보는 분산분석(ANOVA) - 일원배치 분산분석

rtw0202 2024. 10. 11. 13:42
728x90

일원배치 분산분석

하나의 요인(성별, 종교, 부서)에 따른 세 개 이상의 집단 평균 비교

종(Species)별로 꽃받침의 폭(SepalWidthCm)에 차이가 있는지 통계적 검정을 수행하여라. (유의수준 = 0.05) 

setosa = data[data['Species']==target_list[0]]['SepalWidthCm']
versicolor = data[data['Species']==target_list[1]]['SepalWidthCm']
virginica = data[data['Species']==target_list[2]]['SepalWidthCm']

 

1. 가설설정

귀무가설 : 세 가지 종에 대해 꽃받침의 평균은 차이가 없다.

대립가설 : 적어도 하나의 종에 대한 꽃받침의 평균은 차이가 있다.

 

2. 유의수준 설정 (0.05) 

문제에서 제시된 0.05 사용

 

3. 정규성 검정

from scipy.stats import shapiro

print(stats.shapiro(setosa))
print(stats.shapiro(versicolor))
print(stats.shapiro(virginica))

# 출력값
# ShapiroResult(statistic=0.9686918964570316, pvalue=0.20465666067562632)
# ShapiroResult(statistic=0.9741332819702798, pvalue=0.3379951061741378)
# ShapiroResult(statistic=0.9673905311257006, pvalue=0.18089604109069918)

=> p-value가 유의수준(0.05)보다 크기 때문에 '데이터는 정규성을 만족한다'라는 귀무가설 채택

 

4.  등분산성 검정

stats.levene(setosa, versicolor, virginica)

# 출력값
# LeveneResult(statistic=0.6475222363405327, pvalue=0.5248269975064537)

=> p-value가 유의수준(0.05)보다 크기 때문에 '데이터는 등분산성을 만족한다'라는 귀무가설 채택

 

5. 검정통계량 값 및 p-value(유의확률) 계산

stats.f_oneway(setosa, versicolor, virginica)

# 출력값
# F_onewayResult(statistic=47.36446140299382, pvalue=1.3279165184572242e-16)

=> p-value가 유의수준(0.05)보다 작기 때문에 '적어도 하나의 종에 대한 꽃받침의 평균은 차이가 있다'라는 대립가설 채택

 

6. 사후검정

귀무가설 : 집단들 사이의 평균은 차이가 없다.

대립가설 : 집단들 사이의 평균은 차이가 있다.

# 각 집단의 평균을 그래프로 표시
from statsmodels.stats.multicomp import pairwise_tukeyhsd
from statsmodels.stats.multicomp import MultiComparison

mc = MultiComparison(data=data['SepalWidthCm'], groups=data['Species'])
tuekeyhsd = mc.tukeyhsd(alpha=0.05)
fig = tuekeyhsd.plot_simultaneous()

# 두 집단씩 짝을 지어 다중비교를 수행
tuekeyhsd.summary()

=> p-value가 유의수준(0.05)보다 작기 때문에 '집단들 사이의 평균은 차이가 있다'라는 대립가설 채택

=> 모든 종들에 대해 꽃받침 폭의 평균은 통계적으로 유의한 차이가 있다

728x90