본문 바로가기
자격증/[빅분기] 빅데이터분석기사

[작업형3] 단일표본검정 심화

by 바다의 공간 2024. 11. 5.
# 데이터 (정규성에 만족하지 않게 일부 변경)
import pandas as pd
df = pd.DataFrame({
    '무게':[219, 121, 121, 119, 125, 115, 121, 118, 117, 127,
           123, 129, 119, 124, 114, 126, 122, 124, 121, 116,
           123, 123, 127, 118, 122, 117, 124, 125, 123, 121],
})

💜이번에는 정규분포를 따르지않게 숫자 한개를 219로 굉장히 크게 바꿨습니다.

이럴때는 어떻게 단일표본검정(ttest)를 해야할까요? 할 수 없쥬..

그래서 정규분포를 따르는지 확인하고 따른다면 ttest진행해도 되지만 아니라면 윌콕으로 비모수 검정으로 대체합니다.

 

💜그래서 비모수일때는 보통 아래의 순서로 진행을 하는데 

1. 샤피로 윌크 정규성 검정

2.윌콕의 부호 순위 검정 수행

이렇게 입니다. 

 

먼저 정규분포 따르는지 확인하고 따르지 않는다면 윌콕슨 부호 순위 검정을 사용합니다.


💜 여기서 살짝 알아둬야할것이 있습니다.

보통 귀무가설을 기각하는 목적으로 연구결과를 발표할텐데..

샤프로윌크검정에서만큼은 귀무가설이 채택되기를 바라야합니다..

  • 귀무가설 (H0): 주어진 데이터 샘플은 정규 분포를 따른다.
  • 대립가설(H1): 주어진 데이터 샘플은 정규 분포를 따르지 않는다.

0.05보다 큰 값이 나와줘야 정규분포를 따른다고 볼 수 있습니다.

# Shapiro-Wilk(샤피로-윌크) 정규성 검정
from scipy import stats
stats.shapiro(df['무게'])

여기서 shapiro() 에서는 데이터만 넣어주면 됩니다.

 

💜결과

ShapiroResult(statistic=0.35728970196526855, pvalue=2.2139240997414947e-10)

검정통계량은 0.357이고 pvalue는 0.05보다 작기때문에 정규분포를 따르지 않습니다 라는것입니다.

->실제로 우리가 만든 데이터는 정규분포를 따르지 않으므로 잘 한것임.

사실 'e'가 들어있는지 없는지를 확인해야하는데 보통 그냥 e가 들어가면 0.05보다 작다는것을 알 수 있습니다.


다음으로 정규분포를 따르지 않을때에는 비모수를 사용해야하는데 

💜윌콕의 부호 순위 검정 수행을 수행해볼것입니다.

 

여기서 비전공자를 위한 비모수란?

비모수는 정규분포를 따르지 않는데이터예요.

 

비모수검정?

데이터가 특정한 분포를 따른다는 가정 없이 검정을 수행할 수 있는 방법!

 

예시로 보자면(단측검정)

Wilcoxon 검정 (비모수 검정)
귀무가설 (H0): μ = μ0, "합격 원두(dark)" 상품의 중앙값 무게는 120g이다.
대립가설(H1): μ < μ0, "합격 원두(dark)" 상품의 중앙값 무게는 120g 보다 작다
(추가) 비모수 검정: 평균 -> 중앙값으로 변경 (중앙값도 평균값이라 동일하다고 하겠습니다.)
# Wilcoxon(윌콕슨)의 부호 순위 검정 수행
from scipy import stats
stats.wilcoxon(df['무게'] -120, alternative='less')

여기서 단일표본사용 willcoxon() 에서는 데이터 -120, alternative는 관측값이 더 작아야하기때문에 less를 사용합니다.

 

💜결과

WilcoxonResult(statistic=341.0, pvalue=0.9882949283346534)

귀무가설을 기준으로는 귀무가설 채택입니다.