Data Analysis/Statistics
Python_Statistics_t-test
mansoorrr
2023. 12. 7. 17:53
t-test
- t-분포를 따르는 통계적 가설 검정 방법
- 모집단 표준편차를 알 수 없을때
- 표본평균과 모집단 평균 사이의 표준화된 거리를 설명
- 관측값은 정규분포를 따르는 모집단에서 추출
- 정규분포(z분포)는 모집단의 표준편차를 알고 있다고 가정
- 표본크기가 커질수록 t분포는 정규분포와 비슷해짐
- 정규분포와 마찬가지로 t분포의 평균도 0
- 기본적으로 정규분포와 모양이 비슷하지만 꼬리가 두꺼움
- 일반적으로 표본 크기가 30이상인 경우 z분포 사용 가능
- 모집단을 대표하는 표본의 분산이나 표준편차를 가지고 검정하는 방법
- 어느 특정 집단의 평균값을 추정하거나 차이를 검정할때 사용가능
- 종속변수는 연속형이어야 하며 독립변수는 범주형이어야 함
- t검정통계량: 분산을 사용하여 집단간의 차이를 통계적으로 표현한 것
- 두 집단의 차이의 평균(X)을 표준오차(SE)로 나눈 값
- 결국 표준오차와 표본평균차이의 비율
- t-test에는 대표적으로 3가지 분석방법이 있음(일표본, 독립표본, 대응표본)
일표본
- 관심있는 변수의 평균값을 특정 기준값과 비교
- 검증하고자 하는 기준값이 있어야함(1)
- 정규성 검정실시(2)
- 정규성을 만족할때: 일표본 t-test실행
- 정규성을 만족하지 않을때: 윌콕슨의 부호 순위검정 실행
- H0: 정규성을 가진다
- H1: 정규성을 가지지 않는다
- 가설수립(3)
- H0: 모평균의 평균은 ****이다.
- H1: 모평균의 평균은 ****이 아니다.
- 유의수준(a)설정: 보통 .05
- 검정통계량의 값 및 p-value계산(4)
- 귀무가설 기각여부 판단 및 해석(5)
예시 1) 고양이의 몸무게가 평균이 2.6kg인지 통계적 검정(양측검정, 유의수준=.05)
- 정규성검정
- H0: 데이터가 정규분포를 따른다.
- H1: 데이터가 정규분포를 따르지 않는다.
- statistic: 0.95 / p-value: 6.730e-05로 유의수준보다 작게 나타나므로 귀무가설을 기각한다.
- 따라서 데이터가 정규분포를 따르지 않으므로 윌콕슨의 부호 순위 검정을 실시한다.
# 정규성검정
import scipy.stats as stats
from scipy.stats import shapiro
shapiro(cats["Bwt"])
# ShapiroResult(statistic=0.9518786668777466, pvalue=6.730228778906167e-05)
- wilcoxon t-test
- 검정을 위한 기준평균 설정
- H0: 고양이의 평균 무게는 2.6kg이다.
- H1: 고양이의 평균 무게는 2.6kg이 아니다.
- wilcoxon t-test결과 statistic: 3573.0 / p-value: 0.025로 유의수준보다 작게 나타난다.
- 따라서 귀무가설을 기각하고 대립가설을 채택한다.
- 그러므로 고양이의 평균 무게는 2.6kg이라고 할 수 없다.
#wilcoxon t-test
#기준이되는 평균(모집단의 평균)
mu = 2.6
#wilcoxon
stats.wilcoxon(cats["Bwt"] - mu, alternative="two-sided")
#WilcoxonResult(statistic=3573.0, pvalue=0.02524520294814093)
독립표본
- 두 개의 독립된 모집단의 평균을 비교할때 사용
- 두 모집단은 정규성을 만족해야함(1)
- H0: 정규성을 따른다. -> 등분산 가정 실시
- H1: 정규성을 따르지 않는다. -> 윌콕슨의 부호순위 검정 실행
- 집단간 등분산성 가정(2)
- H0: 등분산을 만족한다.
- H1: 등분산을 만족하지 않는다.
- 가설수립(3)
- H0: 두 모평균의 차이가 없다.
- H1: 두 모평균의 차이가 있다.
- 유의수준(a) 설정: 기본적으로 .05 (4)
- 검정통계량의 값 및 p-value 계산 (5)
- 귀무가설의 기각여부 판단 및 해석 (6)
예시 1) cats데이터로 수컷고양이와 암컷고양이의 몸무게 차이 검정
- 정규성 검정
- H0: 정규성을 따른다.
- H1: 정규성을 따르지 않는다.
#---------- shapiro검정 실시
import scipy.stats as stats
from scipy.stats import shapiro
# 경우 1)
#shapiro검정 결과 p-value <.05 이므로 귀무가설을 기각한다.
#따라서 정규성을 따르지 않는다.
#그러므로 wilcoxon 검정을 실시한다.
# 경우 2)
#shapiro검정 결과 p-value >.05 이므로 귀무가설을 체택한다.
#따라서 정규성을 따른다.
#그러므로 등분산 검정을 실시한다.
- 등분산 검정 실시
- H0: 두 집단이 등분산이다.
- H1: 두 집단이 등분산이 아니다.
#---------- 집단으로 구분
male = cats.loc[cats["Sex"]=="M", "Bwt"]
female = cats.loc[cats["Sex"]=="F", "Bwt"]
#---------- 등분산검정실시
stats.levene(male, female) #LeveneResult(statistic=19.43101190877999, pvalue=2.0435285255189404e-05)
# 등분산 검정의 p-value <.05 미만으로 나타나 귀무가설을 기각한다.
# 따라서 집단간의 등분산이 가정되지 않는다.
# 등분산이 가정되지 않는 것을 포함하여 독립표본 t-test를 진행한다.
- 독립표본 t-test 실시
- H0: 집단간(수컷고양이와 암컷고양이) 몸무게 차이는 없다.
- H1: 집단간(수컷고양이와 암컷고양이) 몸무게 차이는 있다.
#----------- 독립표본 t-test실시(equal_var=False로 설정: 등분산이 가정되지 않았기 때문)
stats.ttest_ind(male, female, equal_var=False) #TtestResult(statistic=8.70948849909559, pvalue=8.831034455859356e-15, df=136.83788299625363)
# p-value < .05로 나타나므로 귀무가설을 기각한다.
# 따라서 집단간(수컷고양이과 암컷 고양이)의 몸무게 차이는 존재한다.
대응표본
- 단일 모집단에게 어떤 처리를 가했을 경우
- 처리 전과 처리 후의 평균의 차이를 비교할때 사용한다.
- 같은 집단으로 기본적으로 등분산을 가정한다.
- 모집단의 관측값은 정규성을 만족해야 한다.
- H0: 정규성을 가정한다. -> 대응표본 검정 실시
- H1: 정규성을 가정하지 않는다 -> 윌콕슨 검정 실시
- 대응표본 검정 실시
- H0: 처리 전과 처리 후의 평균에 차이는 없다.
- H1: 처리 전과 처리 후의 평균은 차이가 있다.
예시 2) 수면영양제 복용 전과 후의 수면시간을 측정하여 영양제의 효과가 있는지 판단
- 정규성 검정
- H0: 수면영양제 복용 전과 복용 후는 정규성을 따른다.
- H1: 수면영양제 복용 전과 복용 후는 정규성을 따르지 않는다.
- 정규성 검정 결과 p-value >.05 이므로 귀무가설을 채택
- 따라서 정규성을 만족함
- 대응표본 t-test실시
#---------- 데이터 생성
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
#---------- 정규성 검정
import scipy.stats as stats
stats.shapiro(data["before"]) # ShapiroResult(statistic=0.9644591808319092, pvalue=0.835266649723053)
stats.shapiro(data["after"]) # ShapiroResult(statistic=0.945683479309082, pvalue=0.6177965998649597)
- 대응표본 t-test 실시
- H0: 복용전과 복용 후의 수면시간은 차이가 없다.
- H1: 복용전과 복용 후의 수면시간은 차이가 있다.
- p-value < .05 이므로 귀무가설을 기각한다.
- 대립가설을 채택하고 복용 전과 복용 후의 수면시간의 차이가 있으므로
- 영양제를 복용한 후 수면시간이 늘었다는 결론을 도출한다.
#---------- 대응표본 t-test실행
# 두 집단의 평균이 다른지: alternative = 양측검정(two-sided)
# 두 집단의 평균중 어디가 더 큰지 작은지: alternative = 단측검정
#--> 효과성검증: 사전보다 사후가 더 큰지 작은지 --> before가 after보다 작은지 --> alternative="less"
stats.ttest_rel(data["before"], data["after"], alternative="less") #TtestResult(statistic=-4.743416490252569, pvalue=0.0005269356285082764, df=9)