다시 이음

데이터 통계 -2 (추가적 가설 검정) 본문

AI 일별 공부 정리

데이터 통계 -2 (추가적 가설 검정)

Taeho(Damon) 2021. 7. 16. 19:17

올바른 가설 검정위한 조건

 

- 독립성 : 두 샘플그룹이 연결성이 있는지

- 등분산성 : 비교할 대상의 scale이 비슷한지

- 정규성 : 정규분포와 일치하는지 - 정규분포는 평균 µ 을 기준으로 좌우로 대칭

 

어제 공부한

one sample t-test는 특정한 그룹의 평균에 예측값이 같은지 다른지를 검증하였고,

two sample t-test는 특정한 그룹들의 평균을 비교하여 서로간의 크고 작음을 검증하였다.

(서로 다른 그룹과 비교(독립성0), 같은 그룹이 어떤 행동을 했나 안했나(독립성X,정규성0)으로 구분지을 수 있다.)

 

 그중 독립성이 가정된 샘플에 대해 정규성에 만족한다면 모수적 방법, 정규성이 불만족하다면 비모수적 방법을 사용한다.

 

Non-Parametric Methods(비모수적 방법)

모집단이 특정 확률 분포 (normal과 같은)를 따른다는 전제를 하지 않는 방식.

parameter estimation이 필요하지 않기 때문에 non-parametric이라고 부름

 

  • Categorical 데이터를 위한 모델링
  • 혹은 극단적 outlier가 있는 경우 매우매우 유효한 방식
  • distribution free method라고 부르기도 함.
  • Chisquare
  • Spearman correlation
  • Run test
  • Kolmogorov Smirnov
  • Mann-Whitney U
  • Wilcoxon
  • Kruskal-Wallis 등

 

카이제곱검증(Chi-squared test)

 

Chi-squared test는 표본집단의 분포를 비교할 때 선택하는 방법 , 특히 명목척도 자료의 분석

 

* 내가 이해한 것 :

  • 카이를 제곱한 이유 : 비교를 할때 차이를 극명하게 보여주기 위해 - 제곱때문에 그래프가 0부터 시작한다.
  • 그래프를 보고 알 수 있는 것 : x값은 카이제곱통계값, 그래프 라인에 해당하는 값은 카이제곱값을 적분하여 p-value를 나타낸 것이다.     
  • 즉, 카이검정 통계값이 커질 수록 유의수준에 가까워진다. 그러나 반대로 p-value 값은 작아질 수록 유의수준에 가까워진다.
  • 통계값이 커질 수록 귀무가설을 기각하는 기각역(p)에 들어가게 되고, p-value 값은 0.05이하로 가면 귀무가설을 기각하는 기각역(p)에 속한다.

카이제곱검정 그래프

 

1) 카이제곱 적합도 검정( one sample chi-squared test )

 

주어진 데이터가 균등한 분포를 나타내고 있는지 

 

귀무가설 : 예측치와 비슷할 것이다 

대립가설 : 예측치와 다를것이다. 

 

예시 ) 주사위를 던졌을 때 각 1~6까지의 값이 예측치(평균)과 비슷할 것인지.

카이제곱을 구하는 법(one sample)

observed = 관측 데이터

expected = 예측 데이터 = observed 관측데이터의 총합 / 관측데이터 개수

 

파이썬에서 검정하기

from scipy import stats
from scipy.stats import chisquare

#데이터 array입력해서 p-value 확인하기
chisquare(데이터 array, axis=None)

#chisquare 메소드 없이 함수로 풀이하기
total_obs = np.sum(obs) # 관측데이터 총합
exp = total_obs / obs.count() # 기대값 구하기
x1 = (obs-exp)**2/exp 
x2 = np.sum(x1)  #카이제곱 구하기
stats.chi2.pdf(x2, df(=자유도)) # 카이제곱 값과 자유도를 넣으면 p-value 확인가능
1 - stats.chi2.cdf(x2, df ) #동일

 

 

2) 카이제곱 독립성 검정( two sample chi-squared test )

 

두 변수간의 연관성을 파악하는 방법 

 

귀무가설 : 연관성이 없을 것이다.(독립적이다.) 

대립가설 : 연관성이 있을 것이다. (독립적이지 않다.)

 

카이제곱을 구하는 식은 같다.

 

그러나, Expected value는

  (A+B)*(A+C) / T (A+B)*(B+D) / T A+B
  (A+C)*(C+D) / T (B+D)*(C+D) / T C+D
  A+C B+D T

즉, 각 데이터마다 예측값이 모두 다르다.

from scipy import stats
from scipy.stats import chi2_contingency

chi2 = chi2_contingency(데이터프레임, correction = True or False)

# 따로 카이제곱을 구할 필요 없이 관측데이터 값으로만으로 확인가능

# 함수를 통해 카이제곱값 구하기
obs = np.array([[9, 2], [13, 3]])
total_obs = np.sum(obs)
exp = np.array([[(9+2)*(9+13), (9+2)*(2+3)], [(13+3)*(9+13), (13+3)*(2+3)]])
exp = exp / total_obs # 예측값을 구하기 위해 총합을 나눔
squared = np.power(obs - exp, 2) # 카이제곱 값구하는 식 대입
x2 = np.sum(squared / exp) # 카이제곱 값 구함

[참고] 여러 검정방법 구분표