Reference
- <파이썬 한권으로 끝내기>, 데싸라면▪빨간색 물고기▪자투리코드, 시대고시기획 시대교육
SciPy 패키지를 이용한 통계분석
https://docs.scipy.org/doc/scipy/reference/stats.html
Statistical functions (scipy.stats) — SciPy v1.10.1 Manual
Statistical functions (scipy.stats) This module contains a large number of probability distributions, summary and frequency statistics, correlation functions and statistical tests, masked statistics, kernel density estimation, quasi-Monte Carlo functionali
docs.scipy.org
t-test 검정
검정통게량이 귀무가설 하에서 t-분포를 따르는 통계적 가설 검정 방법
어떤 특정 집단의 평균의 값을 추정하거나 차이를 검정할 때 사용할 수 있다.
- 종속변수 : 연속형
- 독립변수 : 범주형
DataSet
http://incredible.ai/assets/posts/Linear-Regression/cats.csv
1. 일표본 T검정 (one sample t-test)
cats 데이터에서 고양이들의 평균몸무게가 2.6kg인지 아닌지 통계적 검정을 수행하고, 결과를 해석해보자
양측검정, 유의수준 : 0.05
귀무가설 : 모평균의 값은 2.6kg이다
대립가설 : 모평균의 값은 2.6kg가 아니다.
import pandas as pd
cats=pd.read_csv('data/cats.csv')
cats
Sex | Bwt | Hwt | |
---|---|---|---|
0 | F | 2.0 | 7.0 |
1 | F | 2.0 | 7.4 |
2 | F | 2.0 | 9.5 |
3 | F | 2.1 | 7.2 |
4 | F | 2.1 | 7.3 |
... | ... | ... | ... |
139 | M | 3.7 | 11.0 |
140 | M | 3.8 | 14.8 |
141 | M | 3.8 | 16.8 |
142 | M | 3.9 | 14.4 |
143 | M | 3.9 | 20.5 |
144 rows × 3 columns
import scipy.stats as stats
from scipy.stats import shapiro
mu = 2.6 # 고양이들의 평균 몸무게가 2.6kg인지 아닌지
# shapiro : 데이터 정규성 검정
shapiro(cats['Bwt'])
ShapiroResult(statistic=0.9518786668777466, pvalue=6.730228778906167e-05)
pvalue가 유의수준(0.05)보다 작으므로, '데이터가 정규분포를 따른다'는 귀무가설 기각
- 정규분포를 따르지 않는다 : wilcoxon
- 정규분포를 따른다 : ttest_1samp
# 정규분포를 따르지 않는다.
stats.wilcoxon(cats.Bwt - mu, alternative='two-sided')
# 정규분포를 따른다
# stats.ttest_1samp(cats.Bwt, popmean=mu)
WilcoxonResult(statistic=3573.0, pvalue=0.025245202948140935)
pvalue는 유의수준(0.05)보다 작으므로, "고양이의 몸무게가 2.6kg이다"라는 귀무가설을 기각할 수 있음
2. 대응표본 T검정 (paired sample t-test)
10명의 환자 대상 수면영양제 복용 전과 후의 수면시간을 측정하였다.
영양제의 효과가 있는지를 판단해보자.
유의수준 = 0.05
귀무가설 : 수면제 복용 전과 후의 수면시간 차이는 없다.
대립가설 : 수면제 복용 전과 후의 수면시간 차이는 있다.
# 데이터 불러오기 및 확인
import pandas as pd
data = {'before':[7,3,4,5,2,1,6,6,5,4],
'after':[8,4,5,6,2,3,6,8,6,5]}
data = pd.DataFrame(data)
data
before | after | |
---|---|---|
0 | 7 | 8 |
1 | 3 | 4 |
2 | 4 | 5 |
3 | 5 | 6 |
4 | 2 | 2 |
5 | 1 | 3 |
6 | 6 | 6 |
7 | 6 | 8 |
8 | 5 | 6 |
9 | 4 | 5 |
stats.ttest_rel(data['after'],data['before'],alternative='greater')
TtestResult(statistic=4.743416490252569, pvalue=0.0005269356285082765, df=9)
pvalue 값이 유의수준(0.05)보다 작으므로 귀무가설을 기각
3. 독립표본 T검정 (Independent sample t-test)
cats 데이터가 정규성을 따른다는 가정 하에 수컷인 고양이와 암컷인 고양이의 몸무게 차이를 비교하라
귀무가설 : 수컷과 암컷 고양이의 몸무게 차이는 없다
대립가설 : 수컷과 암컷 고양이의 몸무게 차이는 있다.
import pandas as pd
cats=pd.read_csv('./data/cats.csv')
female = cats.loc[cats.Sex == 'F', 'Bwt']
male = cats.loc[cats.Sex == 'M', 'Bwt']
# 등분산성 검정
stats.levene(female, male)
LeveneResult(statistic=19.43101190877999, pvalue=2.043528525518961e-05)
성별에 따른 몸무게가 등분산성을 만족하지 않으므로, equal_val=False로 독립 t-test를 진행
stats.ttest_ind(female, male, equal_var=False)
Ttest_indResult(statistic=-8.70948849909559, pvalue=8.831034455859356e-15)
pvalue가 유의수준(0.05)보다 작으므로 귀무가설을 기각
즉, 수컷과 암컷 고양이의 몸무게 차이는 존재한다.
4. 정리
데이터 정규성 검정 : shapiro
등분산성 검정 : levene
일표본 t-검정
정규분포를 따른다 : ttest_1samp
정규분포를 따르지 않는다 : wilcoxon
대응표본 t-검정 : ttest_rel
독립표본 t-검정 : ttest_ind (levene 했을 때 등분산성 만족하지 않는다면 equal_var를 False로 설정)
'🥇 certification logbook' 카테고리의 다른 글
빅데이터분석기사 (빅분기) 실기 총 정리 / 시험 시작 전 확인 (0) | 2023.12.19 |
---|---|
[ADsP] 군집분석 (0) | 2023.06.18 |
[python 통계분석] 교차분석(카이제곱 검정) (0) | 2023.06.18 |
[python 데이터 전처리] 데이터 스케일링 (data scaling) (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 07_Merge , Concat (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 06_Pivot (0) | 2023.06.15 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 05_Time_Series (0) | 2023.06.13 |
[python 데이터 핸들링] 판다스 연습 튜토리얼 - 04_Apply , Map (0) | 2023.06.13 |