해당 포스팅에서는 Python을 활용하여 표본을 추출하고 T-Test를 진행합니다.
표본추출
import pandas as pd
import numpy as np
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
층화임의추출
- 모집단이 이일적인 몇개의 계층으로 이루어져있을때 모든계층으로부터 원소를 임읠 추출하여 각 계층을 고루 대표할 수 있도록 랜덤하게 표본을 추출하는 방법
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = \
train_test_split(iris.data,#input data(feature)
iris.target, #output data(label)
test_size=0.2, #테스트 셋의 비율(전체중 20%, 기본:0.25)
stratify = iris.target, #각 class들을 같은 비율로 나눈다.
random_state=1 #random 시드값
)
T-Test
일표본(단일표본) T-Test
- 단일모집단에서 관심이 있는 연속형변수의 평균값을 특정기준값과 비교할때 사용
- 모집단 평균과 일부집단의 편균비교
- 귀무가설 : 차이가 없음
- 대립가설 : 차이가 있음
# 정규성 검정
from scipy.stats import shapiro
# 알려진 평균
mu = 25
# 수집된 표본
data = [35,40,12,15,21,14,46,10,28,48,16,30,32,48,31,22,12,39,19,25]
# 정규성 검정
shapiro(data)
# ShapiroResult(statistic=0.9335052371025085, pvalue=0.1803210973739624)
# 자유도
print(len(data)-1) # 19
from scipy.stats import ttest_1samp
ttest_1samp(data, mu) # p value가 0.05보다 크기때문에 귀무가설을 기각할수없음 -> 평균 25
# Ttest_1sampResult(statistic=0.7687155636314738, pvalue=0.4515123595472501)
대응표본 T-Test
- 한 집단의 두개 변수의 점수 비교
- 귀무가설 : 한집단의 사전, 사후 점수차이는 없음
- 대립가설 : 한집단의 사전, 사후 점수차이가 있음
x1 = [.430,.266,.567,.531,.707,.716,.651,.589,.469,.723]
x2 = [.415,.238,.390,.410,.605,.609,.632,.523,.411,.612]
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(6, 6))
plt.grid()
plt.boxplot([x1, x2])
plt.xlabel('when')
plt.ylabel('score')
plt.title('Box Plot')
plt.grid()
plt.show()
정규성 및 등분산성 검정
# 정규성 검사
from scipy.stats import shapiro
normal1 = shapiro(x1)
normal2 = shapiro(x2)
print(normal1, normal2) #p-Value가 둘다 0.05보다 크기때문에 정규성에 문제 없음
# ShapiroResult(statistic=0.928533136844635, pvalue=0.39620575308799744) ShapiroResult(statistic=0.8750206828117371, pvalue=0.08990474045276642)
# 등분산성 구하기(Levene test)
from scipy.stats import levene
levene(x1, x2)
# LeveneResult(statistic=0.0030014695285592624, pvalue=0.9568528070428306)
# 등분산성 구하기(Bartlett test)
from scipy.stats import bartlett
bartlett(x1, x2) #p-Value가 0.05보다 크므로 등분산성 있음
# BartlettResult(statistic=0.1364681869732803, pvalue=0.7118176678579515)
# 대응표본 T검정
from scipy.stats import ttest_rel
ttest_rel(x1, x2)#p-Value가 0.05보다 작으믈 귀무가설 기각 -> 두 그룹의 평균차이는 통계적으로 유의함
# Ttest_relResult(statistic=4.772148651603281, pvalue=0.0007546007653856079)
독립표본 T-Test
- 독립적인 두 집단의 평균 비교
- 귀무가설 : 두집단의 평균 차이 없음
- 대립가설 : 두집단의 평균 차이 있음
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target
x1 = np.array(df.iloc[:,0][0:50])
x2 = np.array(df.iloc[:,0][50:100])
import matplotlib.pyplot as plt
%matplotlib inline
plt.figure(figsize=(6, 6))
plt.grid()
plt.boxplot([x1, x2])
plt.xlabel('species')
plt.ylabel('sepal')
plt.title('Iris Box Plot')
plt.show()
정규성 및 등분산성 검정
# 정규성 검정
normal1 = shapiro(x1)
normal2 = shapiro(x2)
print(normal1, normal2) #두개다 p-value가 0.05이상이므로 정규성 만족
# ShapiroResult(statistic=0.9776989221572876, pvalue=0.4595281183719635) ShapiroResult(statistic=0.9778355956077576, pvalue=0.46473264694213867)
#등분산성 검정
from scipy.stats import levene, ttest_ind, bartlett
levene(x1, x2) #p-value가 0.05보다 작으므로 등분산성을 만족하지 못함
# LeveneResult(statistic=8.172720533728683, pvalue=0.005195521631017526)
bartlett(x1, x2) #p-value가 0.05보다 작으므로 등분산성을 만족하지 못함
# BartlettResult(statistic=6.891726740802407, pvalue=0.008659557933880048)
# 등분산성을 만족하지 않으면 독립t검정을 수행한다!!
ttest_ind(x1, x2, equal_var=False) #p-Value가 0.05보다 작기 때문에 2개 그룹의 평균은 통계적으로 유의한 차이가 있다.
# Ttest_indResult(statistic=-10.52098626754911, pvalue=3.746742613983842e-17)
728x90
반응형
'Data Analysis & ML > Python을 활용한 통계분석' 카테고리의 다른 글
[통계분석] 탐색적 요인분석(EFA) (0) | 2020.12.24 |
---|---|
[통계분석] PCA(주성분분석) (0) | 2020.12.24 |
[통계분석] 상관분석 (피어슨, 스피어만, 켄달타우) (0) | 2020.12.19 |
[통계분석] 분산분석(ANOVA), 이항검정 (0) | 2020.12.19 |
[통계분석] 교차분석(카이제곱 검정) (0) | 2020.12.19 |