3 minute read

T-test와 Anova test는 모집단이 정규분포를 따를때 내가 세운 가설을 검증하는 방법이다. 그렇다면 모집단이 정규 분포를 따르지 않는다면 어떻게 가설을 검증해야 할까?

등분산성 검증

이게 정규성을 띄는지 봐야 T를 하든 Chi를 하든 정하니까 정규성 확인:

  • 귀무가설: 모집단이 정규분포를 따른다.

  • 대립가설: 따르지 않는다.
  • normaltest 함수를 쓰면 통계치와, p-value를 알려줌. 통계치는 별로 안 중요하다.
    from scipy.stats import normaltest
    normaltest(sample)
    

Non-Parametric Methods

모집단이 특정확률분포(정규분포 등)을 따른다는 전제를 하지 않는 방식. parameter 추정이 필요없어서 non-parametic method or distribution free method라고 불림 언제 사용할까?

  • Categorical 데이터 모델링(numeric이 아니니까 정규분포를 따를 수가 없겠지. 평균도 없고)
  • 극단적인 Outlier가 있어서 평균에 너무 큰 방해를 줄 때 매우 유효함
  • Chisquare, Run test, Kruskal-Walis 등 비모수적 평균 비교법 사용

One sample X2 Test

귀무가설: 이 분포는 특정 분포와 유사할 것이다.

대립가설: 이 분포는 특정 분포와 유사하지 않을 것이다.

image

observed는 관측치(실제값), expected는 기댓값(주로 평균). 하지만 expected가 항상 일치하는 것은 아님. 위의 계산을 통해 나온 X2 은 통계치를 의미한다. 이 통계치는 데이터마다 매우 다르기 때문에 상대적으로 비교하기가 힘들다. 따라서 이 통계치를 p-value로 변환시켜서 특정 분포와 유사한지 판단한다. p-value는

from scipy import stats
1 - stats.chi2.cdf(카이제곱 통계치, df = 자유도 = n-1 )

자유도 = 해당 parameter를 결정짓기 위한 독립적으로 정해질 수 있는 값의 수.

Chiesquare함수 쓰면 진짜 간단하게 구할 수 있음 통계치랑 p-value 한 번에. 굳이 위에 카이제곱을 계산할 필요가 없다.

from scipy.stats import chisquare  
chisquare(관측치,axis = [기댓값]) # 만약 기댓값이 모두 일치하면 axis는 생략 가능.

p-value가 0.05보다 크다. 통계적으로 유의미한 차이가 있지 않다. 귀무가설 기각 실패. 해당 집단의 분포가 특정 분포와 같다.

Two sample X2 Test

귀무가설: 두 집단이 연관성이 없을 것이다.

대립가설: 두 집단이 연관성이 있을 것이다.

chi2_contingency 결과해석 1 : X2 statistic 2 : p-value 3 : degree of freedom 4 : expected value for Observed

from scipy.stats import chi2_contingency
chi2_contingency(관측치는 two sample이니까 행과 열이 있는 df가  )
#pd.cross_tab함수 써서 변수 두개를 cross table로 만들고 넣으면 됨. 아님 어레이로 그냥 넣어도 되고

p-value가 0.05보다 크다 -> 귀무가설 기각 실패. 두 집단이 연관성이 없다.

p-value가 0.05보다 작다 -> 귀무가설 기각. 두 집단이 연관성이 있다.

DF에서 One-sample chi-square test 하기

DF는 기본적으로 행과 열로 이루어져있어서 Two-sample 해야할 거 같은 행이나 열만 가지고 One-sample 하라고 하면 행을 기준으로 다 더하거나 열을 기준으로 다 더해서 그 더한 값들로 One-sample 진행하면 됨.

chisquare(df.sum(axis = 1))
#axis는 1로 하면 한 열을 다 더하는 것 같지만 각각의 열들을 더하는 것으로 이해하면 됨.
#그러니까 각 행에 따라서 1열, 2열, 3열, 4열,.....을 더하는것.
#반대로 axis = 0은 각 열에 따라서 1행부터 마지막 행까지 다 더하는게 됨.

DF에서 two-sample chi-square test 하기

행과 열 다 쓰면됨.

chi2_contingency(df)

Type of Error

image

TP: 귀무가설이 참인데, 가설검정도 참이라고 한 경우

TN: 귀무가설이 거짓인데, 가설검정도 거짓이라고 한 경우

FN: 귀무가설이 참인데, 가설검정은 거짓이라고 한 경우 (Type I Error) 가짜 거짓

  • 어떤 효과가 우연히 발생한 것인데, 그게 사실이라고 잘못 판단한 경우
  • 통계적으로 유의미하지 않는(p-value가 0.05보다 큼, 귀무가설 채택) 효과를, 유의미하다고 판단하는 경우
  • ex) 두그룹에게 신약의 효과를 입증한다고 했을 때,
  • 귀무가설: 두 그룹의 차이가 없음 = 효과없음
  • 대립가설: 두 그룹의 차이 있음 = 효과있음.
  • 우연히 발생한 효과를 진짜 효과로 오해해서 대립가설을 채택하는 1종 오류 주의
  • 우연히 대립가설 뜬건데 그게 진짜인줄 알고 귀무가설을 기각시키는 오류 주의

FP: 귀무가설이 거짓인데, 가설검정은 참이라고 한 경우 (Type II Error) 가짜 참

  • 사실인데, 그게 우연히 발생했다고 하는 경우
  • 표본 크기가 너무 작아서 효과를 알아낼 수 없다고 판단하는 경우
  • ex) 암 진단
  • 귀무가설: 암이 아니다
  • 대립가설: 암이다
  • 암이라는게 사실인데 우연으로 오해해서, 암이 아니라고 하는 귀무가설을 채택하는 2종 오류 주의
  • 대립가설이 진짠데 그게 우연인 줄 알고 귀무가설 채택하는 오류 주의

귀무가설과 대립가설은 항상 정해져있는게 아니다. 상황에 따라 바뀔 수도 있다. 귀무가설이라고 해서 항상 효과가 없다, 암이 아니다 처럼 부정적인 것만 있는게 아니라는 뜻이다.

다음 포스팅에서는 Anova Test와 신뢰 구간에 대해 다뤄보자. Anova Test를 하는 함수도 함께.

Discussion

정규성(정규분포)을 확인하는 것 이 왜 중요할까요?

답변:

정규분포는 데이터가 평균에 가까울수록 발생할 확률이 높고, 평균에서 멀수록 발생할 확률이 낮은 분포이다. 다시말해, 데이터의 값들이 평균에 몰려있어서 분포를 그리면 평균을 중심으로 좌우대칭인 종모양이 형성된다. 종모양의 선 밑의 값이 확률이 되기 때문에 평균에 가까울수록 특정 이벤트가 발생할 확률이 높아진다. 이 정규분포를 확인하는 것이 중요한 이유는 우리가 예측할때 사용하는 많은 통계기법들이 데이터가 정규분포를 따른다고 가정하기 때문이다. 하나 혹은 두 그룹간 데이터의 연관성과 평균을 비교하는 T-test, 세 그룹 이상의 데이터의 평균을 비교하여 유의미한 차이가 있는지 확인하는 Anova 검정 모두 모집단이 정규분포를 띈다고 가정한다. 데이터가 정규분포를 따르지 않을때는 가설검정을 할 때 비모수검정인 chi square test 등을 사용할 수 있다.

데이터가 정규성을 띈다 = 데이터가 표준화가 되어 있다. = 분석하기에 용이하다.

Categories:

Updated: