AI/Data Science

[분석통계] 통계적 검정 방법 간단 정리

Linuxias 2023. 5. 27. 14:08
반응형

1개의 모집단에 관한 검정

1개의 샘플 내에서의 모집단의 평균에 관한 검정 (One-sampel T-test)

  • scipy.stat.ttest_1sample() 사용
  • alternative 변수에 greater(우측검정), less(좌측검정), two-sided(양측검정) 입력
from scipy import stats
stats.ttest_1sample(data, popmean = mu, alternative = 'two-sided')

 

1개의 샘플 내에서의 모집단의 비율에 관한 검정

  • 모집단의 데이터가 범주형인 경우
  • 특정 범주의 발생비율이 모수이며 해당 모수를 검정하고자 한다.
  • 비율은 근사적 정규분포를 따르기에 Z-test를 사용한다.
from statsmodels.stats.proportion import sms
sms.proportions_ztest(count, nobs=n, 
                      value = 귀무가설의 p,
                      prop_value = 분산계산에 사용된 p,
                      alternative='larger')

1개의 샘플 내에서의 모집단의 분산에 관한 검정

  • 모집단이 정규분포를 따르는 경우
  • 모집단 $\sigma^2$ 에 관한 검정
  • 분산에 관한 검정은 카이제곱 검정을 사용한다.
import scipy.stats as stats

# 임계값 계산
stats.chi2.ppf(0.95, df)

# p-value 계산 (우측검정인 경우)
1 - stats.chi2.cdf(검정통계량, df)
# 검정통계량 =  (n - 1) * (표준편차^2 / 분산)

 

2개의 모집단에 관한 검정

두 모집단의 모평균 검정 (모집단이 등분산인 경우)

  • 두 개의 모집단의 각 모평균$\mu_{1}, \mu_{2}$ 차이에 관한 검정
  • 두 분산이 동일한 경우에 사용한다 (등분산) -> 서로 독립
  • $\mu_{1} - \mu_{2}$에 관한 추론을 추정량 ($\overline{X_{1}} - \overline{X_{2}}$)의 표본분포를 이용
  • T = $\frac{( \overline{X_{1}} - \overline{X_{2}})}{\ \sqrt{S^2_{p}(\frac{1}{n_{1}} + \frac{1}{n_{2}})}} $
  • 여기서 $S^2_{p} = \frac{(n_{1} - 1)S^2_{1}+(n_{2} - 1)S^2_{2}}{n_{1} + n_{2} - 2}$
import pandas as pd
import numpy as np

import statsmodels.stats.api as sms
import scipy.stats as stats

df1.mean()
df1.var()

n1 = len(df1)
n2 = len(df2)
Sp = ((n1 - 1) * df1.var() + (n2 - 1) * df2.var()) / (n1 + n2 - 2)

t = (df1.mean() - df2.mean()) / np.sqrt(Sq * (1/n1 + 1/n2))

# p -value
2 * (1-stats.t.cdf(0.9273, df = n1 + n2 -2)
# 임계값
stats.t.ppf(0.975, df = n1 + n2 - 2)


# 또는

stats.ttest_ind(df1, df2, equal_var = True, alternative='two-sided')

 

두 모집단의 모평균 검정 (모집단이 이분산인 경우)

  • 두 개의 모집단의 각 모평균$\mu_{1}, \mu_{2}$ 차이에 관한 검정
  • 두 분산이 동일하지 않은 경우에 사용한다 (이분산)
  • 두 모집단이 정규분포이고, 모분산 $\sigma_{0}^2, \sigma_{1}^2$이 알려지지 않고 서로 다른 경우이다.
  • 비교할 두 표본의 값의 크기가 다르고, 결측치가 있는 경우 nan_policy 파라미터 사용하여 처리
stats.ttest_ind(df1, df2, equal_var=False, alternative='less', nan_policy='omit')

 

등분산 검정

  • 모집단 평균 검정 시 등분산, 이분산 여부를 모르기에 등분산 검정 시행 후에 나온 결과로 등산분 또는 이분산 모집단 평균 검정을 시행하자.
  • $H_{0} : \frac{\sigma^2_{1}}{\sigma^2_{2}} = 1$ (등분산) 
    • 귀무가설 채택 시, 모집단이 등분산인 경우의 모평균 검정
  • $H_{1} : \frac{\sigma^2_{1}}{\sigma^2_{2}} \neq 1$ (이분산)
    • 대립가설 채택 시, 모집단이 이분산인 경우의 모평균 검정
  • F-검정을 사용, $F = \frac{S^2_{1}}{S^2_{2}}$
  • 자유도 $v_{1} = n_{1} - 1, v_{2} = n_{2} - 1 $
f = data['A'].var() / data['B'].var()
df1 = data['A'].count() - 1
df2 = data['B'].count() - 1
stats.f.cdf(f, df1, df2)

 

정규성 검정

위의 모든 모델들은 모집단이 정규분포 라는 가정 하에 진행이 된다. 하지만 실제 정규분포인지 아닌지는 모르는 상황이다. 실제로 정규분포인지 확인하기 위한 정규성 검정을 진행한다.

정규성 검정은 아래와 같이 몇 가지 방법을 사용하여 확인할 수 있다.

  • Q-Q plot
  • Shapiro-Wilks Test
  • Kolmogorov-Smirnov Test (KS-Test)

각 방법의 사용법은 아래 링크를 참고한다.

2023.05.29 - [AI/Data Science (실습)] - [분석통계] 정규성 검정

반응형