ADP/실기

t-test

hyerimir 2024. 1. 24. 22:20

 

# 일표본 t-검정(one sample t-test)
# 단일모집단에서 관심이 있는 연속형변수의 평균값을 특정 기준값과 비교

# 고양이들의 평균 몸무게가 2.6kg인지 아닌지 통계적 검정 수행(양측검정, 유의수준 = 0.05)
import pandas as pd
cats = pd.read_csv('cats.csv')
cats.info()

# cats의 Bwt 정규성 검정 : Shaprio test
# 귀무가설 : 정규성을 가진다
# 대립가설 : 정규성을 가지지 않는다
import scipy.stats as stats
from scipy.stats.import shaprio
mu = 2.6
shaprio(cats['Bwt'])
# p-value 값이 유의수준보다 작아, 귀무가설을 기각
# Bwt 변수는 정규분포를 따르지 않는다고 결론
# 따라서 wilcox test로 t검정 진행
# cats의 Bwt t-test(wilcox test)
stats.wilcoxon(cats.Bwt - mu, alternative = 'two-sided')
# 유의수준보다 작아, 고양이들의 평균 몸무게는 2.6kg 이다라는 귀무가설 기각
# 고양이들의 평균 몸무게는 2.6kg가 아닌 것으로 결론

import matplotlib.pyplot as plt
cats_Bwt_cnt = pd.value_counts(cats['Bwt'].values, sort=False)

width = 0.4
plt.bar(cats_Bwt_cnt.index, cats_Bwt_cnt.values, width)
plt.title('Bwt')
plt.ylabel('Count')
# 대응표본 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.mean()

stats.ttest_rel(data['after'], data['before'], alternative = 'greater')
# 앞에 오는 것이 기준이 됨

# 유의수준보다 작으므로, 수면영양제를 복용하기 전과 후의 평균 수면시간 차이 통계적 유의
# 영양제를 복용한 후, 수면 시간이 늘었다고 말할 수 있음
# 독립표본 t-검정(Independent Sample t-test)
# 두 개의 독립된 모집단 평균 비교
# 모집단, 모수, 표본이 모두 두 개씩 존재

# 두 모집단은 정규성 만족해야함
# 두 모집단의 분산이 서로 같아야 함 -> 등분산성
# 독립변수는 범주형, 종속변수는 연속형

# 정규성 검정
import scipy.stats as stats
from scipy.stats import shapiro
stats.shapiro(cats.Bwt)
# 귀무가설 기각, 정규 분포 따르지 않음

# 등분산성 검정
female = cats.loc[cats.Sex == 'F', 'Bwt']
male = cats.loc[cats.Sex = 'M', 'Bwt']
stats.levene(female, male)
# 귀무가설 기각, 등분산성 만족하지 않음

stats.ttest_ind(female, male, equal_var = False)
# 이 안에 시리즈 형태로 들어가야 함
# 귀무가설 기각, 통계적으로 유의

print(female.mean())
print(male.mean())