- 2표본 문제 : 두 모집단에 관한 검정
- 2표본 대푯값의 차이에 대한 검정
정규분포를 가정할 수 있음 | 정규분포를 가정할 수 없음 | |
대응표본 | 대응비교 t 검정 | 윌콕슨의 부호순위검정 |
독립표본 | 독립비교 t 검정 | 만·위트니의 U 검정 |
>> 대응표본 : 데이터에 대응이 있다. / 두 데이터에서 서로 대응하는 동일한 개체에 대해 각각 다른 조건으로 측정한 것
>> 독립표본 : 데이터에 대응이 없다. / 두 데이터에서 개체가 다른 데이터로 되어 있는 독립표본
1) 대응비교 t 검정
대응하는 데이터가 있고, 데이터 차이에 정규분포를 가정할 수 있는 경우의 평균값 차이에 대한 검정
- 예시
* A 학생은 친구 20명에게 1주일간 근력 운동을 하게 함(intervention, 개입)
* 운동 전후에 집중력을 측정하는 테스트 받게 됨
* 가설설정
귀무가설 : 근력운동 전후 집중력 평균 차이가 없다
대립가설 : 근력운동 전후 집중력 평균 차이가 있다
(t-test 귀무가설에서는 '평균 차이'가 꼭 언급되어야 함)
* 대응되는 데이터의 차이 확인
training_rel = pd.read_csv('data/ch11_training_rel.csv')
training_rel['차'] = training_rel['후'] - training_rel['전']
training_rel.head()
# out:
* t 검정
t, p = stats.ttest_1samp(training_rel['차'], 0) # scipy의 ttest_1samp 함수
t, p
# out:
(2.204, 0.040)
>> p값(0.04)이 유의수준보다 작다.(귀무가설 기각 = 근력운동은 집중력에 유의한 차이를 준다)
t, p = stats.ttest_rel(training_rel['후'], training_rel['전']) # ttest_rel 함수
t, p
# out:
(2.204, 0.040)
>> 결과가 동일하다. ttest_rel 함수는 전과 후의 데이터로 검정을 수행하므로 차이를 구하지 않아도 된다.
2) 독립비교 t 검정
대응하는 데이터가 없고, 독립된 2표본 모집단에 정규분포를 가정할 수 있는 경우 평균값의 차이에 대한 검정
- 예시
* A 학생 그룹 : 인문계열 / B 학생 그룹 : 체육계열, 평소에도 운동을 많이 함
* A 그룹, B 그룹의 집중력 테스트 평균에서 차이가 나지 않을까 생각하여 테스트 실시
-> 이 데이터로부터 어떤 검정을 수행해야 A 학생과 B 학생 학급의 집중력에 유의한 차이가 있을지 확인
* 가설설정
귀무가설: A 그룹의 평균과 B 그룹의 평균 차이가 없다.
대립가설: A 그룹의 평균과 B 그룹의 평균 차이가 있다.
* 독립비교 t-검정 두 가지 가정
각 그룹 데이터의 정규성을 검정
두 그룹의 분산이 같다(=등분산성 검정), levene 검정 시행
training_ind = pd.read_csv('data/ch11_training_ind.csv') # 데이터 불러오기
t, p = stats.ttest_ind(training_ind['A'], training_ind['B'], equal_var = True) # 등분산성이 같다!
t, p
# out:
(-1.761, 0.086)
>> p값이 유의수준 0.05보다 크기 때문에 귀무가설 채택
# Levene 검정 이후, 살펴봤더니 등분산성이 다를 때
t, p = stats.ttest_ind(training_ind['A'], training_ind['B'], equal_var = False)
t, p
- 비모수 검정
모수 검정에서 각 가정을 만족시키지 못할 때, 비모수 검정을 쓴다.
3) 윌콕슨의 부호순위검정
대응표본에서 차이에 정규분포를 가정할 수 없는 경우, 중앙값의 차이에 대한 검정
(t 검정과 달리 평균 차이가 아니라 중앙값(50%에 해당하는 값)임을 유의)
- 예시
대응표본이기 때문에 데이터의 차이에 주목한다.
training_rel = pd.read_csv('data/ch11_training_rel.csv')
toy_df = training_rel[:6].copy()
toy_df['차'] = toy_df['후'] - toy_df['전']
toy_df
# out:
윌콕슨의 부호순위검정은 순위에 의해 검정을 수행한다.
# 순위 적용
diff = toy_df['후'] - toy_df['전']
rank = stats.rankdata(abs(diff)).astype(int)
toy_df['순위'] = rank
toy_df
# out:
차이의 부호가 마이너스인 것의 순위합과, 차이의 부호가 플러스인 것의 순위합을 각각 구한다.
import numpy as np
r_minus = np.sum((diff < 0) * rank)
r_plus = np.sum((diff > 0) * rank)
r_minus, r_plus # 검정통계량 8
# out:
(8, 13)
>> 작은 쪽이 검정통계량이 되기 때문에 검정통계량은 8 (r_minus)이다.
>> 윌콕슨의 부호순위검정 : 이것이 임계값보다 작은 경우 귀무가설이 기각되는 단측검정 수행
다음은 근력운동 후의 테스트 결과가 전원 향상된 상황이다. 이는 중앙값의 차이가 있는 경우다.
toy_df['후'] = toy_df['전'] + np.arange(1, 7)
diff = toy_df['후'] - toy_df['전']
rank = stats.rankdata(abs(diff)).astype(int)
toy_df['차'] = diff
toy_df['순위'] = rank
r_minus = np.sum((diff < 0) * rank)
r_plus = np.sum((diff > 0) * rank)
r_minus, r_plus
# out:
(0, 21)
>> 차이가 마이너스인 데이터가 하나도 없으므로 검정통계량 0
>> 즉, 차이에 편차가 있으면 검정통계량이 작아진다.
이번에는 근력운동 후 테스트 결과가 올라간 사람도 있고 내려간 사람도 있는 상황이다.
toy_df['후'] = toy_df['전'] + [1, -2, -3, 4, 5, -6]
diff = toy_df['후'] - toy_df['전']
rank = stats.rankdata(abs(diff)).astype(int)
toy_df['차'] = diff
toy_df['순위'] = rank
r_minus = np.sum((diff < 0) * rank)
r_plus = np.sum((diff > 0) * rank)
r_minus, r_plus
# out:
(11, 10)
>> 검정통계량 10
>> 결과가 올라간 사람과 내려간 사람이 동일하게 분산되어 있으므로 r_minus와 r_plus가 비슷한 값이 된다.
=> 차이에 편향이 있을수록 r_minus와 r_plus에 편향이 생기고, 검정통계량은 작은 값이 된다.
=> 검정통계량이 임계값보다 작으면 중앙값에 차이가 있다고 할 수 있음
'Python' 카테고리의 다른 글
캐글 튜토리얼 연습 (0) | 2024.01.16 |
---|---|
통계검정별 사용함수 정리(+예시) (0) | 2024.01.12 |
가설검정 (t-검정/가설검정 오류/양측검정과 단측검정) (1) | 2024.01.11 |
[plotly] 사용법 간단 정리 (0) | 2024.01.09 |
[pandas] 데이터 둘러보기, 다뤄보기 (0) | 2024.01.09 |