-
Python 데이터분석 기초 34 - 서로 독립인 두 집단의 평균 차이 검정(independent samples t-test), 정규성, 등분산성Python 데이터 분석 2022. 11. 8. 12:19
예제 1)
# 두 집단의 가설검정 – 실습 시 분산을 알지 못하는 것으로 한정하겠다. # * 서로 독립인 두 집단의 평균 차이 검정(independent samples t-test) # 남녀의 성적, A반과 B반의 키, 경기도와 충청도의 소득 따위의 서로 독립인 두 집단에서 얻은 표본을 독립표본(two sample)이라고 한다. from scipy import stats import pandas as pd from numpy import average # 실습) 남녀 두 집단 간 파이썬 시험의 평균 차이 검정 male = [75, 85, 100, 72.5, 86.5] female = [63.2, 76, 52, 100, 70] # 귀무 : 남녀 두 집단 간 파이썬 시험의 평균에 차이가 없다. # 대립 : 남녀 두 집단 간 파이썬 시험의 평균에 차이가 있다. print(average(male), ' ', average(female)) # 83.8 72.24 print(83.8 - 72.24) # 11.560 two_sample = stats.ttest_ind(male, female) # 두 개의 표본에 대한 t-test 실시 print(two_sample) # Ttest_indResult(statistic=1.233193127514512, pvalue=0.2525076844853278) # 해석 : pvalue = 0.25250768 > 0.05 이므로 귀무가설 채택 <console> 83.8 72.24 11.560000000000002 Ttest_indResult(statistic=1.233193127514512, pvalue=0.2525076844853278)
예제 2)
# 실습) 두 가지 교육방법에 따른 평균시험 점수에 대한 검정 수행 two_sample.csv' data = pd.read_csv("../testdata/two_sample.csv") print(data.head(3), len(data)) # 귀무 : 두 가지 교육방법에 따른 평균시험 점수에 차이가 없다. # 대립 : 두 가지 교육방법에 따른 평균시험 점수에 차이가 있다. ms = data[['method', 'score']] print(ms) # 교육방법별로 데이터 분리 m1 = ms[ms['method'] == 1] m2 = ms[ms['method'] == 2] score1 = m1['score'] score2 = m2['score'] print(score1) print(score2) print(score1.isnull().sum()) # 0 print(score2.isnull().sum()) # 2 NaN : 제거, 0, 평균으로 대체 sco1 = score1.fillna(score1.mean()) sco2 = score2.fillna(score2.mean()) # NaN를 평균으로 대체 print(sco2.isnull().sum()) # 정규성 검정 import matplotlib.pyplot as plt import seaborn as sns # sns.histplot(sco1, kde=True, color='r') # sns.histplot(sco2, kde=True, color='b') # plt.show() # 정규성 print(stats.shapiro(sco1).pvalue) # 0.3679903745651245 > 0.05 정규성 만족 print(stats.shapiro(sco2).pvalue) # 0.6714189648628235 > 0.05 정규성 만족 # 등분산성 print(stats.levene(sco1, sco2).pvalue) # 0.4568427112977609 > 0.05 등분산성 만족, 표본이 30개 이상일 경우 사용(모수 검정) print(stats.fligner(sco1, sco2).pvalue) # 0.44323735267062647 > 0.05 등분산성 만족, 표본이 30개 이상일 경우 사용(모수 검정) print(stats.bartlett(sco1, sco2).pvalue) # 0.26789717886602216 > 0.05 등분산성 만족, 표본이 30개 미만일 경우 사용(비모수 검정) result = stats.ttest_ind(sco1, sco2) # 정규성 만족, 등분산성 만족 print('t-value:%.5f, p-value:%.5f'%result) # t-value:-0.19649, p-value:0.84505 # 해석 : p-value : 0.86309 > 0.05 이므로 귀무 채택. 두 가지 교육방법에 따른 평균시험 점수에 차이가 없다. print('참고 ---------') result = stats.ttest_ind(sco1, sco2, equal_var=True) # 정규성 만족, 등분산성 만족 print('t-value:%.5f, p-value:%.5f'%result) result = stats.ttest_ind(sco1, sco2, equal_var=False) # 정규성 만족, 등분산성 불만족 print('t-value:%.5f, p-value:%.5f'%result) # result2 = stats.wilcoxon(sco1, sco2) # 정규성을 만족하지 않는 경우 # ValueError: The samples x and y must have the same length. result2 = stats.mannwhitneyu(sco1, sco2) print('t-value:%.5f, p-value:%.5f'%result2) <console> no gender method survey score 0 1 1 1 1 5.1 1 2 1 2 0 NaN 2 3 1 1 1 4.7 50 method score 0 1 5.1 1 2 NaN 2 1 4.7 3 2 NaN 4 1 5.4 5 2 4.4 6 2 4.9 7 1 5.2 8 2 4.3 9 2 5.8 10 1 5.7 11 2 5.1 12 2 5.3 13 2 5.4 14 1 5.1 15 1 4.8 16 1 4.1 17 1 4.8 18 1 5.2 19 1 4.7 20 1 4.4 21 1 5.2 22 1 5.3 23 1 6.1 24 1 6.3 25 1 4.1 26 1 5.3 27 1 5.1 28 1 3.8 29 1 5.6 30 1 5.3 31 1 6.4 32 1 5.5 33 1 4.7 34 2 3.9 35 2 3.3 36 2 5.6 37 1 5.6 38 1 6.2 39 1 5.9 40 1 3.4 41 2 6.3 42 1 6.4 43 2 6.8 44 1 5.2 45 2 5.5 46 1 5.8 47 2 5.4 48 2 6.7 49 1 5.2 0 5.1 2 4.7 4 5.4 7 5.2 10 5.7 14 5.1 15 4.8 16 4.1 17 4.8 18 5.2 19 4.7 20 4.4 21 5.2 22 5.3 23 6.1 24 6.3 25 4.1 26 5.3 27 5.1 28 3.8 29 5.6 30 5.3 31 6.4 32 5.5 33 4.7 37 5.6 38 6.2 39 5.9 40 3.4 42 6.4 44 5.2 46 5.8 49 5.2 Name: score, dtype: float64 1 NaN 3 NaN 5 4.4 6 4.9 8 4.3 9 5.8 11 5.1 12 5.3 13 5.4 34 3.9 35 3.3 36 5.6 41 6.3 43 6.8 45 5.5 47 5.4 48 6.7 Name: score, dtype: float64 0 2 0 0.3679903745651245 0.6714189648628235 0.4568427112977609 0.44323735267062647 0.26789717886602216 t-value:-0.19649, p-value:0.84505 참고 --------- t-value:-0.19649, p-value:0.84505 t-value:-0.18204, p-value:0.85693 t-value:261.00000, p-value:0.69678
문제 2번 정규성 검사 등분산성 : 등분산성 조건을 충족하는지 확인하기 위해서는 scipy에서 제공하는 검정을 주로 사용한다.
하지만 등분산성 조건을 충족하지 못하더라도 t-test를 사용할 수 있기는 하다.
- bartlett : scipy.stats.bartlett
- fligner : scipy.stats.fligner
- levene : scipy.stats.levene
등분산성은 집단 간의 비교를 할때만 검정한다.
참고
Daum 카페
cafe.daum.net
'Python 데이터 분석' 카테고리의 다른 글
Python 데이터분석 기초 35 - 서로 대응인 두 집단의 평균 차이 검정(paired samples t-test) (0) 2022.11.08 Python 데이터분석 기초 35 - 어느 음식점 매출 자료와 날씨 자료를 활용하여 강수 여부에 따른 매출액 평균에 차이를 검정 (0) 2022.11.08 one-sample t 검정 : 문제3 (0) 2022.11.08 one-sample t 검정 : 문제2(데이터 공백제거, to_numeric) (0) 2022.11.08 one-sample t 검정 : 문제1 (0) 2022.11.08