본문 바로가기

Information/통계강의

2.3.1 Z-검정

반응형

2.3.1 Z-검정

 

모집단의 평균과 표준편차가 얼마라는 것이 알려져 있을 때, 새롭게 조사된 표본의 평균이 모집단의 평균과 같은 지를 추정하는 검정이다. 이때 표본의 크기는 30보다 커야 하고 모집단에서 균일한 확률로 선택되어야 한다. (작은 수의 표본일 경우는 t-검정을 수행)

 

Z-검정을 할 수 있는 조건

  • 종속 변수가 양적 변수
  • 모집단의 평균과 표준편차를 알아야 함
  • 모집단의 분포가 정규분포여야 함
  • 두 집단을 비교할 경우, 두 집단의 분산이 같아야 함

 

Z-검정에서의 귀무/대립 가설

  • 귀무가설: 모집단의 평균과 표본 평균이 같다.
  • 대립가설: 모집단의 평균과 표본 평균이 다르다. 

Z-검정 방법

표본의 Z 검정 통계량을 구하고, Z 값이 임계값 보다 크고 작음에 따라 귀무가설을 기각 혹은 채택한다.

 

Z검정 통계량 수식:

$$ Z_0 = \frac{(\bar {x} - \mu)}{\frac {\sigma}{\sqrt {n}}} $$

 

$Z_0$ : Z 검정 통계량

$\bar {x}$: 표본 평균

$\mu$: 모 평균 (귀무가설에서 주장하는 평균)

$\sigma$: 모 표준편차

$n$: 표본 개수

 

수식에서 $\frac{\sigma}{\sqrt{n}}$은 '표준오차'라고 하며, 어떤 모집단에서 표본을 뽑아냈을 때, 그 표본 평균에 대한 표준편차를 의미하며, 이 표본 평균에 대한 표준편차는 모집단의 표준편차와 달리 더 작은 값을 가지며 그 계산 값은 모 표준편차를 개수의 제곱근으로 나눈 값이 된다. 

 

Z검정 통계량의 의미는 무엇일까? 

이것은 표본의 평균이, 모평균과 모표준편차에 의해 그려지는 정규분포에서 어디에 위치해 있는가를 나타내는 값이다.  정규분포 곡선을 이미지로 그려보면, 표본의 평균이 이 정규분포 곡선의 x축 어디 값인가를 나타낸다. 

왜 그런가 하면, (표본평균 - 모평균)을 한 것을 표준오차(모표준편차를 개수 제곱근으로 나눈 값)로 나누고 있기에, 표본평균과 모평균의 차이값이 표준오차의 몇 배인가를 나타내는 것이다. 

만약 차이가 3인데 표준오차가 1이면, 평균에서부터 표준오차의 3배되는 지점이라는 것이고, 표준오차가 2라면 1.5배 되는 오른쪽 지점이라는 얘기.

 

Z-검정 예

어느 학교의 고3 학생에 대한 3월 국어 모의고사의 역대 평균 점수는 75점, 표준편차는 15점이다. 그런데, 올해 3월 국어 모의고사를 본 100명에 대한 평균을 조사해봤더니 평균이 79.5점이 나왔다. 이 평균점수가 역대 평균점수와 같은지 유의수준 0.05에서 검정하시오.  
  • 귀무 가설: 올해 시험 본 100명의 평균과 역대 평균값이 같다. 
  • 대립 가설: 같지 않다.

 

$$Z_0 = \frac{(\bar {x} - \mu)}{\frac {\sigma}{\sqrt {n}}} =  \frac{(79.5-75)}{\frac {15}{10}} = \frac {4.5}{1.5} = 3$$

 

이제 모집단의 표준 정규분포와 나의 Z값을 비교하면 되는데, '같은지'를 검정하는 것이기 때문에 '양측 검정'을 사용한다.  즉, 왼쪽 편 기각 역과 오른편 기각역을 합친 것이 유의 수준이 된다.

따라서, 유의 수준이 0.05이기에, 기각역은 0.025가 되고, 표준 정규분포에서 확률이 0.025가 되는 값은 1.96이다. (정규분포 함수 통해 계산 가능). Z=3이기에 임계치 1.96보다 더 큰 값이기에, 기각역에 해당하게 되어, 귀무가설을 기각한다.

 

 


정규 분포에서의 값 구하기

 

scipy.stats.norm에 있는 함수를 이용해서, 정규 분포 그래프에서의 값들을 구할 수 있다.

 

  • pdf (probability density function, 확률밀도함수)
  • cdf (cumulative distribution function, 누적분포함수)
  • ppf (percent point function, 누적분포함수의 역함수)

pdf (probability density function, 확률 밀도 함수)

pdf는, 평균 $\mu$와 표준편차 $\sigma$인 정규분포에서, 어떤 값 $x$에 대한 확률 값을 구하는 함수이다.

cdf(cumulative distribution function, 누적 분포 함수)

cdf는, 정규 분포 곡선에서 x의 값에 따른 누적 확률을 구하는 값이다. 

 

pdf가 x의 값에 따른 정규분포 확률값을 나타내기에, pdf 곡선은 우리가 알고 있는 종모양의 곡선이다. 이 곡선의 면적을 구하는 것은, x가 나올 수 있는 모든 경우에 대한 확률이기에, 전체 면적을 더하면 1이 된다. 

cdf는 이러한 x가 증가함에 따른 누적 확률이기에, 누적 확률 값은 0에서 시작해서 1까지 증가하게 된다.

 

 

ppf(percent point function, 누적분포함수의 역함수)

ppf는 누적분포함수에서 해당 확률일 때의 x를 구하는 함수이다.

 

 

아래 코드는 위의 pdf, cdf, ppf에 대한 곡선을 그리는 코드이다.

 

import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

rv = stats.norm(loc=0, scale=1)
xx = np.linspace(-4, 4, 100)
plt.figure(figsize=(8,4))

pdf = rv.pdf(xx)
plt.plot(xx, pdf)

plt.title("Probability Density Function")
plt.xlabel("$x$"); plt.ylabel("$y=pdf(x)$")

plt.axvline(x=-1, ymin=0, ymax=0.6, color='red')
plt.axhline(y=rv.pdf(-1), xmin=0, xmax=0.385, color='red')
plt.text(-4,0.25,'pdf(-1)',color='red')

plt.show()
rv = stats.norm(loc=0, scale=1)
xx = np.linspace(-4, 4, 100)
plt.figure(figsize=(8,4))

cdf = rv.cdf(xx)
plt.plot(xx, cdf)

plt.title("Cumulative Distribution Function")
plt.xlabel("$x$"); plt.ylabel("$y=cdf(x)$")

plt.axvline(x=1, ymin=0, ymax=0.81, color='red')
plt.axhline(y=rv.cdf(1), xmin=0, xmax=0.61, color='red')
plt.text(-4, rv.cdf(1.1),'cdf(1)',color='red')

plt.show()
rv = stats.norm(loc=0, scale=1)
xx = np.linspace(0, 1, 100)
plt.figure(figsize=(8,4))

ppf = rv.ppf(xx)
plt.plot(xx, ppf)

plt.title("Percent Point Function")
plt.xlabel("$x$"); plt.ylabel("$y=ppf(x)$")

plt.axvline(x=0.8, ymin=0, ymax=0.66, color='red')
plt.axhline(y=0.82, xmin=0, xmax=0.77, color='red')
plt.text(0.02, 1.0,'ppf(0.8)',color='red')

plt.show()

 


Z-검정에 대한 p-value

 

sklearn 패키지에는 Z-검정에 대한 통계값(Z값) 및 p-value를 구하는 함수가 없다. 공식이 간단해서 직접 구해도 되기 때문이기도 한데, 만들어보기로 한다.

 

import numpy as np
import scipy.stats as stats
from pandas import Series
import pandas as pd

def ztest(mu, sigma, xbar, n ):    
    z = (xbar - mu) / (sigma/np.sqrt(n))
    p = 2 * stats.norm.cdf(z)
    if z>0:
        p = 2 * (1 - stats.norm.cdf(z))
    return z,p

def ztest_1samp(x:Series, mu=0, sigma=1):    
    return ztest(mu=mu, sigma=sigma, xbar=x.mean(), n=x.count())

위에서 p값을 구할 때 2를 곱한 것에 유의.

Z-검정의 경우 귀무가설이 '~ 평균값이 같지 않다'이기 때문에, 양측 검정이다. 따라서, 유의수준이 5%이면, 양쪽 기각역으로 2.5%씩이 되기 때문에, p값은 더 극단적으로 왼쪽 혹은 오른쪽으로 가야 한다.(2배 더) 

따라서, 왼쪽의 경우는 cdf로 구한 값에 2배, 오른쪽의 경우는 (1-cdf) 한 값에서 2배를 한 것이 p값이 된다. 

 

위에서 만든 함수를 이용해서 p-value를 구하는 예를 풀어보자. (샘플의 수가 30보다 적어서, 실제로 Z 검정을 하는 것이 타당하지 않을 수 있다. 그냥 계산을 위한 예제라고 생각해서 풀기 바람)

 

모집단이 표준정규분포를 따른다고할 때, 거기에서 10개의 샘플을 뽑았다. 이 샘플들이 평균이 모집단의 평균과 같다고 할 수 있는가? 유의수준 5%에서 검정하시오.

[ 1.76405235,  0.40015721,  0.97873798,  2.2408932 ,  1.86755799, -0.97727788,  
    0.95008842, -0.15135721, -0.10321885,  0.4105985]
x = pd.Series([
    1.76405235,  0.40015721,  0.97873798,  2.2408932 ,  1.86755799, -0.97727788,  
    0.95008842, -0.15135721, -0.10321885,  0.4105985])
ztest_1samp(x,mu=0,sigma=1)

(2.3338341863399275, 0.019604405976765493)

 

Z값은 2.33이고, p-value는 0.0196으로 0.05보다 작기에, 귀무가설이 기각되어, 이 샘플들의 평균은 모집단의 평균과 같다고 할 수 없다. 

 

- 끝-

반응형

'Information > 통계강의' 카테고리의 다른 글

2.3 평균에 대한 검정  (0) 2021.02.17
2.2 가설 검정  (0) 2021.02.17
2.1 분포 (예제 풀이)  (0) 2021.02.15
2.1 분포 (이론)  (0) 2021.02.14
2. 분포 및 가설검정  (0) 2021.02.14