
오늘의 학습
1. t검정
2. 다중검정
3. 카이제곱검정
➖ 두 집단 간의 평균 차이가 통계적으로 유의미한지 확인
➖ 독립표본 t검정 / 대응표본 t검정
[파이썬 실습]
# 학생 점수 데이터
scores_method1 = np.random.normal(70,10,30)
scores_method2 = np.random.normal(75,10,30)
# 독립표본 t검정
t_stat, p_val = stats.ttest_ind(scores_method1, scores_method2)
print(f"T-Statistic:{t_stat},P-value;{p_val}")
➖ 여러 가설 동시 검정하지만 오류 발생 가능 O
➖ 각 검정마다 유의수준 조정할 필요 O
➡️ 조정 안 할 경우 1종 오류 발생 활률 증가
[1종 오류와 2종 오류]

📍 제 1종 오류
➖ 귀무가설이 참인데 기각하는 오류 = 아무 영향이 없는데 영향이 있다고 하는 것!
➖ 위양성
➖ 유의수준(a)을 경계로 귀무가설 기각하므로 유의수준만큼 오류 발생
➖ 제 1종 오류가 발생하지 않을 확률
| 하나의 검정 | n개의 검정 |
|---|---|
| 1-a | (1-a)**n |
즉, n개의 검정에서 하나 이상의 제 1종 오류가 발생할 확률 (전체 제 1종 오류율)
: 1 - (1-a)**n
⭐️ n이 커질수록 오류가 발생할 확률 빠르게 증가 ⬆️
= 개별검증보다 다중검정의 오류율이 높음
➡️ 유의수준 설정으로 오류 제어 가능
📍 제 2종 오류
➖ 귀무가설이 거짓인데 기각하지 않는 오류 = 영향이 있는데 없다고 하는 것!
➖ 위음성
➖ 제 2종 오류가 발생하지 않을 확률: 1-p (검정력)
⭐️ 제 2종 오휴가 일어날 확률은 p(베타)로 정의
➡️ 통제 방법
➡️ 오류 보정 방법: 본페로니 보정
[파이썬 실습]
import numpy as np
import scipy.stats as stats
# 세 그룹의 데이터 생성
np.random.seed(42)
group_A = np.random.normal(10,2,30)
group_B = np.randpm.normal(12,2,30)
group_C = np.random.noraml(11,2,30)
# 세 그룹 간 평균 차이에 대한 t검정 수행
p_values = []
p_values.append(stats.ttest_ind(group_A, group_B).pvalue)
p_values.append(stats.ttest_ind(group_A, group_C).pvalue)
p_values.append(stats.ttest_ind(group_B, group_C).pvalue)
⭐️ 여기까지만 진행하고 끝내면 제 1종 오류 발생 가능
# 본페로니 보정 적용 필수!!
alpha = 0.05 # 유의수준 a 설정
adjusted_alpha = alpha/len(p_values) # 오류 줄이기 위해서 유의수준 더 낮은 값으로 변환
# 결과 출력
print(f"본페로니 보정된 유의 수준: {adjusted_alpha:.4f}")
for i, p in enumerate(p_values):
if p < adjusted_alpha:
print(f"검정 {i+1}: 유의미한 차이 발견 (p={p:.4f})")
else:
print(f"검정 {i+1}: 유의미한 차이 없음 (p={p:.4f})")
➖ 적합도 검정 : 범주형 데이터의 표본 분포가 모집단 분포와 일치하는지 검정
➖ 독립성 검정 : 두 범주형 변수 간의 독립성 검정
[파이썬 실습]
# 적합도 검정
observed = [20,30,25,25]
expected = [25,25,25,25]
chi2_stat, p_value = stats.chisquare(observed, f_exp=expected)
print(f"적합도 검정 카이제곱 통계량: {chi2_stat}, p-값:{p_value}")
📍 scipy.stats.chisquare
➖ 카이제곱 적합도 검정 수행 -> 관찰된 빈도 분포가 기대된 빈도 분포와 일치하는지 평가
➖ 단일 표본에 대해 관찰된 빈도가 특정 이론적 분포와 일치하는지 확인하는 데 상요
➖ chi2 : 카이제곱 통계량
➖ p : p-값
# 독립성 검정
observed = np.array([10,10,20],[20,20,40])
chi2_stat, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"독립성 검정 카이제곱 통계량: {chi2_stat},p-값:{p_value}")
📍 scipy.stats.chi2_contingency
➖ 카이제곱 검정 수행 -> 두 개 이상의 범주형 변수 간 독립성 검정
➖ 관측 빈도 담고 있는 교차표를 입력으로 받아 카이제곱 통게량, p-값, 자유도, 기대 빈도 반환
➖ chi2 : 카이제곱 통계량
➖ dof : 자유도 (행의 수 -1)*(열의 수-1)
➖ expected : 기대 빈도