2020. 8. 20. 23:08ㆍ데이터 분석 기본
이전 포스팅(https://direction-f.tistory.com/35)에서 표본이 충분히 클 때 두 집단의 차이를 보는 통계적 추론 방안을 다루었습니다. 이번 포스팅에서는 표본의 크기가 충분히 크지 못할 때(30개 미만일 때) 어떻게 통계적 추론을 할지에 대해서 정리해보도록 하겠습니다.
독립 표본의 경우에 우리는 표본의 크기가 충분히 크지 않을 때 표준정규분포 대신 t-distribution을 활용하였습니다. 두 집단간의 차이비교도 마찬가지로 우리는 t-분포를 활용합니다. 다만 표본의 수가 충분히 클 때와 다른 점은, 공통분산을 추정한다는 것입니다.
[두 모평균의 차이 추론(표본이 작을 때)]
표본이 크기가 작을 때, 두 집단의 차이에 대해서 통계적 추론을 하기 위해서는 아래와 같은 두 가지의 가정이 필요합니다.
가정(1): 두 모집단이 모두 정규분포를 따른다.
가정(2): 두 모집단의 표준편차가 일치한다.
공통분산은 가정(2)를 만족하기 위해 필요한 개념입니다. 즉, 공통분산을 구하여야만이 우리는 표본이 적을때도 t-분포를 적용하여 두 집단간의 차이를 검증할 수 있습니다. 두 모집단의 표준편차가 일치한다고 가정한다면 표본평균들의 차이는 다음과 같은 정규분포를 따르게 됩니다.
공통분산의 추정량은 각 표본의 편차제곱합을 더하여 두 표본의 자유도를 더한 값을 나누어주며, 아래와 같이 정의됩니다.
구한 공통분산을 활용하여 (μ1-μ2)에 대한 검정을 위한 확률변수는 아래와 같이 정의되면 자유도가 (n1+n2-2)인 t-분포를 따릅니다.
최종적으로, 표본이 작을 때 (μ1-μ2)에 대한 신뢰구간 및 검정은 아래와 같이 정리 할 수 있습니다.
(1) 100(1-α)% 신뢰구간:
(2) H0: (μ1-μ2)=δ0에 대한 검정:
H0: (μ1-μ2)=δ0, 두 집단간의 차이가 있는지 검증하는 방안을 우리는 통상적으로 T-test라고 부릅니다. 즉 집단간의 차이가 유의한지 Test를 하는 것입니다.
지금까지 각 표본의 모집단의 표준편차가 동일하다고 가정할 때, 검정을 수행하는 것입니다. 만약 명확히 모집단의 표준편차가 다르면 어떻게 될까요? 이 때는 근사적으로 t-분포를 따른다고 보고 추론을 합니다. 이 때 확률변수 t는 아래와 같이 정의되며, (n1-1)이나 (n2-1)중에 적은 값을 자유도로 가집니다.
파이썬으로 실습을 진행해보겠습니다.
from scipy.stats import t
import matplotlib.pyplot as plt
import numpy as np
## 임의적으로 Random Sample 생성
sample_data1=np.random.randint(60,75,30)##low, high, size
sample_data2=np.random.randint(60,75,25)##low, high, size
#Sample1 정보
n1 = 30
mean_1 = sample_data1.mean()
var_1 = sample_data1.var(ddof=1)
std_1 = sample_data1.std(ddof=1)
#Sample2 정보
n2 = 25
mean_2 = sample_data2.mean()
var_2 = sample_data2.var(ddof=1)
std_2 = sample_data2.std(ddof=1)
#공통분산, 표준편차 계산
equal_var = ((n1-1)*var_1+(n2-1)*var_2)/(n1+n2-2)
equal_std = np.sqrt(equal_var)
## 95%신뢰구간
df = n1+n2-2
t_ = t(df)
t_025 = t_.ppf(0.975)
L_= round((mean_1-mean_2) - t_025*(equal_std*np.sqrt((1/n1)+(1/n2))),2)
U_= round((mean_1-mean_2) + t_025*(equal_std*np.sqrt((1/n1)+(1/n2))),2)
print("{} < {} < {}".format(L_, (mean_1-mean_2), U_)) ## 결과 0.39 < 2.7 < 5.01
## 가설검증 수행
## H1: (mean_1-mean_2) !=0
t_statistic = (mean_1-mean_2)/(equal_std*np.sqrt((1/n1)+(1/n2)))
if t_statistic <= t_025 or t_statistic >= t_025:
print("H0 기각 (menq_1과 mean_2는 다르다)")
else :
print("H0 채택 (menq_1과 mean_2는 다르지 않다)")
## 결과 H0 기각 (menq_1과 mean_2는 다르다)
## p-value(양측검정이기 때문에 2배)
p_val=2*min(t_.cdf(t_statistic),(1-t_.cdf(t_statistic)))
print(t_statistic) #2.3457492956179795
print(p_val) #0.022763016309548245
## scipy 패키지로 T-test 수행
from scipy import stats
print(stats.ttest_ind(sample_data1,sample_data2))
#결과 Ttest_indResult(statistic=2.34574929561798, pvalue=0.02276301630954812)
## 모집단의 표준편차가 같다는 가정을 적용하지 않을 때
print(stats.ttest_ind(sample_data1,sample_data2, equal_var=False))
# 결과 Ttest_indResult(statistic=2.3519948200767145, pvalue=0.02251635206666634)
'데이터 분석 기본' 카테고리의 다른 글
단순회귀분석에서의 추론 (0) | 2020.08.25 |
---|---|
단순회귀분석 (0) | 2020.08.24 |
두 모집단의 비교(표본이 클 때) (0) | 2020.08.20 |
가설검정 > P-value(유의확률) (0) | 2020.08.13 |
가설검정 > 검정통계량과 기각역 (0) | 2020.08.12 |