가설검정

19. 가설검정#

기본 설정

numpypandas 라이브러리를 각각 nppd로 불러온다.

import numpy as np
import pandas as pd

데이터프레임의 chained indexing을 금지시키기 위한 설정을 지정한다. Pandas 3.0 버전부터는 기본 옵션으로 지정된다.

pd.options.mode.copy_on_write = True

주피터 노트북에서 부동소수점의 출력을 소수점 이하 6자리로 제한한다. 아래 코드는 주피터 노트북에서만 사용하며 일반적인 파이썬 코드가 아니다.

%precision 6
'%.6f'

아래 코드는 데이터프레임 내에서 부동소수점의 출력을 소수점 이하 6자리로 제한한다.

pd.set_option('display.precision', 6)

데이터 시각화를 위해 matplotlib.pyplotplt로, seabornsns로 불러온다. seaborn 라이브러리는 통계 관련 데이터의 정보를 보다 세련되고 정확하게 전달하는 그래프를 그리는 도구를 제공한다. matplotlib 라이브러리를 바탕으로 만들어져서 함께 사용해도 된다.

import matplotlib.pyplot as plt
import seaborn as sns

그래프 스타일을 seaborn에서 제공하는 white 스타일로 지정한다.

sns.set_style("white")

데이터 저장소 디렉토리

코드에 사용되는 데이터 저장소의 기본 디렉토리를 지정한다.

data_url = 'https://raw.githubusercontent.com/codingalzi/statsRev/refs/heads/master/data/'

19.1. 이론#

다음과 같은 두 가지 가설을 생각한다.

  • 귀무가설null hypothesis \((\text{H}_0)\) : 모집단에 대하여 기존에 사실이라고 알려져 있거나 처음부터 주장하는 가설

  • 대립가설alternative hypothesis (\(\text{H}_1\)) : 귀무가설에 대립되어 만들어지는 가설로 모집단에 대한 주장을 담고 있으며 실험이나 조사를 통해 입증하고 싶은 가설

가설검정은 조사된 데이터의 통계량(표본평균, 표본분산 등)을 통하여 귀무가설을 기각하고 대립가설을 채택할 충분한 증거가 있는지 확인하는 과정으로 다음과 같은 두 가지의 오류를 생각할 수 있다.

제 1종 오류: 귀무가설이 참인데 귀무가설을 기각할 오류. 제1종 오류를 범할 확률은 보통 \(\alpha\)로 나타내고 이를 유의수준 Significance Level이라 한다.

제 2종 오류: 귀무가설이 거짓인데 귀무가설을 채택할 오류. 제2종 오류를 범할 확률은 보통 \(\beta\)로 나타내는데 제 1종 오류를 범할 확률 \(\alpha\)를 높이면 \(\beta\)는 낮아지는 경향이 있다.

  • 제 1종 오류를 허용할 한계인 유의수준 \(\alpha\) 만을 다루기로 한다. 유의수준은 연구자가 설정하는 값으로, 일반적으로 0.05 (5%) 또는 0.01(1%)를 많이 사용한다. 유의수준이 낮을수록 제1종 오류를 범할 확률이 줄어든다.

기각역과 가설검정의 종류

유의수준(\(\alpha\))과 대립가설의 성격에 따라 귀무가설을 기각하는 영역(기각역)이 정해지며 이에 따라 다음과 같은 종류의 가설검정을 생각할 수 있다.

  • 양측검정Two-tailed test: 대립가설이 ‘차이가 있다’ (\(\textbf{H}_1: \mu \ne \mu_0\)) 와 같이 특정 값과 다르다는 형태일 때 사용한다. 이때는 분포의 양쪽 꼬리 부분에 기각역이 설정되며, 유의수준 \(\alpha\)는 양쪽 꼬리에 \(\alpha/2\)씩 나누어진다.

  • 단측검정One-tailed test : 대립가설이 ‘더 크다’ (\(\textbf{H}_1: \mu > \mu_0\)) 또는 ‘더 작다’ (\(\textbf{H}_1: \mu < \mu_0\)) 와 같이 특정 방향의 차이를 주장할 때 사용한다. 이때는 분포의 한쪽 꼬리에만 기각역이 설정되며, 유의수준 \(\alpha\) 전체가 해당 꼬리 부분에 위치한다.

유의수준과 임계값(critical value)

표준정규분포 \(N(0, 1^2)\)을 따르는 확률변수 \(Z\)에 대하여

\[P(Z\ge z_{\alpha})=\alpha \]

라 하면 확률 \(\alpha\)에 따른 변수 \(z_{\alpha}\)가 정해진다.

이때 주어진 유의수준 \(\alpha\)에 대한 가설검정의 기각역은 양측검정의 경우

\[\alpha = P(|Z| \ge z_{\alpha/2}) = P(Z\le -z_{\alpha/2}, Z \ge z_{\alpha/2})\]

단측검정의 경우

\[\alpha = P(Z\le -z_{\alpha}) \,\,또는 \,\,\alpha = P(Z\ge z_{\alpha})\]

이다.

  • 여기서 유의수준 \(\alpha\)의 중요한 기준이 되는 임계값을 생각할 수 있는데 양측검정의 경우 두 개의 임계값 \(-z_{\alpha/2}, z_{\alpha/2}\), 단측검정의 경우 한 개의 임계값 \(-z_{\alpha}\) 또는 \(z_{\alpha}\)이 있다.

표본평균 분포

확률 변수 \(X\)로 나타내어지는 모집단의 평균을 \(\mu\) 분산을 \(\sigma^2\)이라 하자. 이때, 충분히 큰 크기 \(n\)인 표본의 표본평균 \(\overline{X}\)는 중심극한정리에 의하여 정규분포 \(N(\mu, \sigma^2/n)\)을 따른다. 즉,

\[\overline{X} \sim N(\mu, \sigma^2/n)\]

이라 표현한다. 또한, 정규분포 성질에 의하여

\[Z = \frac{\overline{X} - \mu}{\sigma/\sqrt{n}}\sim N(0, 1^2)\]

이다.

  • 따라서 충분히 큰 표본으로부터의 모평균 관련한 추정과 검정은 표준정규분포를 사용한다.

검정통계량과 \(p\)-값

충분히 큰 크기 \(n\)의 표본 데이터를 가지고 모평균에 대한 가설검정을 하려 하며 표준정규분포를 사용한다.

귀무가설 \(\text{H}_0\) : 모평균은 \(\mu_0\)이다.

  • 검정통계량Test Statistic : 표본 데이터로부터 계산되는 값으로 가설검정을 수행하는 기준이 된다. 이 경우 조사된 표본의 평균값을 \(X_0\)라 하면

\[z_0= \frac{X_0 - \mu_0}{\sigma/\sqrt{n}}\]

이 검정통계량이 된다. (여기서 모분산이 알려지지 않은 경우 포본의 불편분산을 사용하기도 한다.)

  • \(p\)-값\(p\)-value: 귀무가설 하에서 현재 검정통계량 값 또는 그보다 더 극단적인 값이 나타날 확률로

\[ P(z\le z_0) 또는 P(z\ge z_0)\]

인데 이 경우 표준정규분포를 이용하여 계산하고 대립가설 \(\text{H}_1\)에 따라 선택한다.

귀무가설 기각

유의수준 \(\alpha\)/임계값 그리고 조사된 데이터로부터의 \(p\)-값/검정추정량을 비교하여 가설검정을 진행한다.

방법 1. 임계값과 검정추정량 비교

  • 검정통계량이 기각역에 속하면 귀무가설 \(\text{H}_0\)을 기각하고 대립가설 \(\text{H}_1\)을 채택한다.

  • 검정통계량이 기각역에 속하지 않으면 귀무가설을 기각할 수 없다.

방법 2. 유의수준과 \(p\)-값 비교

  • 단측검정에서는 \(p\)-값이 유의수준 \(\alpha\)보다 작은 경우, 양측검정에서는 \(p\)-값이 \(\alpha/2\)보다 작은 경우 귀무가설 \(\text{H}_0\)을 기각하고 대립가설 \(\text{H}_1\)을 채택한다.

  • 그렇지 않으면 귀무가설을 기각할 수 없다.

가설검정 절차

  • 귀무가설 \(\text{H}_0\), 대립가설 \(\text{H}_1\) 설정

  • 분포 결정

  • 대립가설 \(\text{H}_1\)에 따른 가설검정의 종류와 기각역 결정

  • 유의수준/임계값

  • \(p\)-값/검정추정량 (표본 데이터로 부터 계산한다)

  • 귀무가설 \(\text{H}_0\)을 기각할 지를 결정한다.

예제 (단측 검정)

어떤 회사의 기존 제품의 사용 시간은 그 평균이 \(100\)이고 분산은 \(10^2\)이라 알려져 있다. 새로운 공정으로 생산된 제품 30개의 표본을 추출하여 조사하였더니 평균 사용시간이 \(98\)이었다. 새로운 공정에 문제가 없는지 유의수준 5%에서 검정하여라.

풀이)

  1. 가설:

  • 귀무가설 \(\text{H}_0\): 새로운 공정으로 생산된 제품의 평균 사용 시간은 100시간이다 (\(\mu = 100\)).

  • 대립가설 \(\text{H}_1\): 새로운 공정으로 생산된 제품의 평균 사용 시간은 100시간보다 짧다 (\(\mu < 100\)).

  1. 분포: 모분산이 알려져 있고 표본 크기가 충분히 크므로 표준정규분포 \(N(0, 1^2)\)을 사용한다.

  2. 가설검정의 종류와 기각역: \(\text{H}_1\)\(\mu < 100\)이므로 기각역을 왼쪽꼬리로 하는 왼쪽꼬리 단측검정을 택한다.

  3. 유의수준/임계값:

    • 표준정규분포에 의하여 누적 확률이 0.05가 되는 z-값은 약 -1.645 이다.

    • 따라서 임계값 \(-z_{0.05} \approx -1.645\)

    • 왼쪽 꼬리 기각역은 \(\{ Z \le -1.645 \}\) 이다.

  4. \(p\)-값/검정통계량 (표본 데이터로 부터 계산한다):

    • 주어진 정보: 표본평균 \(X_0 = 98\), 모평균 (귀무가설 하) \(\mu_0 = 100\), 모표준편차 \(\sigma = 10\), 표본 크기 \(n = 30\).

    • 검정통계량 \(z_0\)를 계산한다. $\(z_0= \frac{X_0 - \mu_0}{\sigma/\sqrt{n}} = \frac{98 - 100}{10/\sqrt{30}}\)\( \)\( \approx \frac{-2}{10/5.477} = \frac{-2}{1.826} \approx -1.095\)$

    • p-값을 계산한다. 대립가설이 \(\mu < 100\)이므로, 귀무가설 하에서 검정통계량이 -1.095보다 작거나 같을 확률이 p-값이다. 표준정규분포표 또는 계산기를 사용하면
      $\(p\text{-값} = P(Z \le z_0) = P(Z \le -1.095)\approx 0.1367\)$

  5. 귀무가설을 기각할 지를 결정한다:

    • 방법 1. 임계값과 검정통계량 비교:

      • 검정통계량 \(z_0 \approx -1.095\) 입니다.

      • 임계값은 약 -1.645 입니다.

      • 검정통계량 \((-1.095)\)은 임계값 \((-1.645)\)보다 크므로 기각역(\(Z \le -1.645\))에 속하지 않는다.

      • 귀무가설을 기각할 수 없다.

    • 방법 2. 유의수준과 \(p\)-값 비교:

      • 유의수준 \(\alpha = 0.05\) 입니다.

      • p-값 \(\approx 0.1367\) 입니다.

      • p-값 \((0.1367)\)은 유의수준 \((0.05)\)보다 크므로 귀무가설을 기각할 수 없다.

결론: 귀무가설 \(\text{H}_0\)을 채택한다. 즉, 유의수준 5% 하에서 새로운 공정에 문제가 있다고 할 수 없다.

19.2. 예제#

아래 코드는 캘리포니아 주택가격 데이터셋에서 주택가격이 50만을 초과하는 경우는 삭제하고 인덱스를 초기화한 후 가구소득 특성만을 남긴다. 또한 인덱스의 이름을 district로 지정하며, 가구소득 범주를 추가한다.

housing = pd.read_csv(data_url+"california_housing_mini.csv")

# 주택가격이 50만1달러 이상인 구역 삭제
house_value_max = housing['median_house_value'].max() # 500,001
mask = housing['median_house_value'] >= house_value_max
housing = housing[~mask]

# 인덱스 초기화
housing = housing.reset_index(drop=True)

# 인덱스 이름 지정
housing.index.name = 'district'

# 가구소득 범주 추가
housing["income_cat"] = pd.cut(housing["median_income"],
                               bins=[0., 1.5, 3.0, 4.5, 6., np.inf],
                               labels=[1, 2, 3, 4, 5])

housing
median_income median_house_value income_cat
district
0 8.3252 452600.0 5
1 8.3014 358500.0 5
2 7.2574 352100.0 5
3 5.6431 341300.0 4
4 3.8462 342200.0 3
... ... ... ...
19670 1.5603 78100.0 2
19671 2.5568 77100.0 2
19672 1.7000 92300.0 2
19673 1.8672 84700.0 2
19674 2.3886 89400.0 2

19675 rows × 3 columns

위 자료 housing에서 집값의 평균값과 표준편차는 다음과 같다.

  • 평균값

house_value_mean = housing['median_house_value'].mean()
house_value_mean
192477.921017
  • 표준편차

house_value_std = housing.median_house_value.std(ddof=0)
house_value_std
97709.026443

집값 대상 가설검정

아래 testStatistic()는 모평균과 모분산이 알려져 있는 경우에 주어진 표본의 평균값에 대한 검정통계량과 p-값을 계산한다.

  • sample: 표본

  • mu_p: 모평균

  • sigma_p: 모분산

  • alpha=0.05: 유의수준. 기본값은 5%

  • oneTailed=False: 단측검정 여부. 기본값은 False, 즉 양측검정 실행이 기본값.

  • lessThan=None: 단측검정의 경우 검정통계량보다 작은 값이 나올 확률을 p-값으로 계산할지 여부. 즉, True이면 왼쪽 꼬리검정 진행, False이면 오른쪽 꼬리검정 진행.

from scipy.stats import norm

def testStatistic(sample, mu_p, sigma_p, alpha=0.05, oneTailed=False, lessThan=None):

    mu_sample = sample.mean()
    n_sample = len(sample)
    
    z0 = (mu_sample - mu_p) / (sigma_p/np.sqrt(n_sample))
    
    if oneTailed and lessThan:
        p_value = norm.cdf(z0)
    elif oneTailed and not lessThan:
        p_value = 1 - norm.cdf(z0)
    elif not oneTailed and z0 <= 0:
        p_value = norm.cdf(z0) * 2
    elif not oneTailed and z0 > 0:
        p_value = (1 - norm.cdf(z0)) * 2
        
    return z0, p_value

예제 1: 가구소득 3구간에서만 표본을 선택하는 경우 (양측검정)

가구소득별 5구간중 3구간에서의 평균 주택가격이 전체 주택가격 평균과 제일 유사할 것이라 짐작할 수 있다. 가설검정을 통하여 논의하여 보자.

  • 전체 구역의 주택가격

housing.median_house_value.median()
173800.000000
  • 가구소득 3구간 구역의 기초 통계

mask = housing['income_cat'] == 3
housing_3Cat = housing.median_house_value[mask]
housing_3Cat.describe()
count      7103.000000
mean     193988.680698
std       81583.050538
min       14999.000000
25%      137150.000000
50%      178500.000000
75%      233800.000000
max      500000.000000
Name: median_house_value, dtype: float64

질문: 가구소득 3구간에서의 집값이 전체 평균 집값과 다르다고 할 수 있는가? 가구소득 3구간에서의 1%의 표본을 조사하여 판단하여 보자.

위 질문에 답하기 위해 먼저 가구소득 3구간에서 1%의 표본을 무작위로 선택한다.

sample_3Cat = housing_3Cat.sample(frac=0.01, random_state=43)

양측검정을 위해 귀무가설과 대립가설을 다음과 같이 설정한다.

  • 귀무가설 \(\text{H}_0\): sample_3Cat에 속한 구역들의 평균 집값이 house_value_mean와 같다.

  • 대립가설 \(\text{H}_1\): sample_3Cat에 속한 구역들의 평균 집값이 house_value_mean 다르다.

우선 귀무가설이 참이라고 가정한다. 그러면 다음이 성립한다.

\[\overline{X} \sim N(\mu, \sigma^2/n)\]
\[Z = \frac{\overline{X} - \mu}{\sigma/\sqrt{n}}\sim N(0, 1^2)\]

따라서 표본 sample_3Cat에 속한 구역의 평균 집값의 검정통계량 \(z_0\)\(p\)-값은 다음과 같다.

z0, p_value = testStatistic(sample_3Cat, house_value_mean, house_value_std)

print(f"검정통계량: {z0:.6f}")
print(f"p-값: {p_value:14.6f}")
검정통계량: 0.417664
p-값:       0.676193

검정통계량이 0.417664이다. 반면에 유의수준 5%의 상위 임계값은 1.959964이다. 즉 계산된 검정통계량보다 크다.

z_25p = norm.ppf(0.975)
z_25p
1.959964

또한 \(p\)-값이 0.05보다 크다.

결론:

  • 양측검정의 기각역은 \(\{ z \mid z \le -1.959964 \; \text{또는} \; z \ge 1.959964 \}\)

  • 검정통계량 \(-1.959964 < z_0 = 0.417664 < 1.959964\) 이므로 기각역에 속하지 않는다.

  • 따라서 귀무가설을 기각하지 않는다.

  • 즉, 가구소득 3구간에 속한 사람들이 산 집값이 평균과 다르다고 볼 수 없다.

예제 2: 가구소득 2구간에서만 표본을 선택하는 경우 (왼쪽 꼬리 단측검정)

가구소득 2구간의 주택가격은 전체 구역의 주택가격보다 작을 것이다. 가설검정을 통하여 작다고 할 수 있겠는지 판단하여 보자.

  • 가구소득 2구간 구역의 기초 통계

mask = housing['income_cat'] == 2
housing_2Cat = housing.median_house_value[mask]
housing_2Cat.describe()
count      6552.000000
mean     134935.408730
std       69001.703453
min       14999.000000
25%       85675.000000
50%      118800.000000
75%      166100.000000
max      500000.000000
Name: median_house_value, dtype: float64

질문: 가구소득 2구간에서의 집값이 전체 평균 집값보다 작은가? 가구소득 2구간에서의 1%의 표본을 조사하여 판단하여 보자.

먼저 가구소득 2구간에서 1%의 표본을 무작위로 선택한다.

sample_2Cat = housing_2Cat.sample(frac=0.01, random_state=43)

단측검정을 위해 귀무가설과 대립가설을 다음과 같이 설정한다.

  • 귀무가설 \(\text{H}_0\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean와 같다.

  • 대립가설 \(\text{H}_1\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean 보다 작다.

우선 귀무가설이 참이라고 가정한다. 그러면 다음이 성립한다.

\[\overline{X} \sim N(\mu, \sigma^2/n)\]
\[Z = \frac{\overline{X} - \mu}{\sigma/\sqrt{n}}\sim N(0, 1^2)\]

따라서 표본 sample_2Cat에 속한 구역의 평균 집값의 검정통계량 \(z_0\)\(p\)-값은 다음과 같다.

z0, p_value = testStatistic(sample_2Cat, house_value_mean, house_value_std, oneTailed=True, lessThan=True)

print(f"검정통계량: {z0:.6f}")
print(f"p-값: {p_value:14.6f}")
검정통계량: -4.712372
p-값:       0.000001

검정통계량이 -4.712372이다. 반면에 유의수준 5% 임계값은 -1.644854이다. 즉 계산된 검정통계량보다 작다.

z_m5p = norm.ppf(0.05)
z_m5p
-1.644854

또한 \(p\)-값이 0.05보다 작다.

결론:

  • 왼쪽 꼬리 단측검정의 기각역은 \(\{ z \mid z \le -1.644854 \}\)

  • 검정통계량 \(z_0 = -4.712372 < -1.644854\) 이므로 기각역에 속한다.

  • 따라서 귀무가설을 기각하고 대립가설을 채택한다.

  • 즉, 가구소득 2구간에 속한 사람들이 산 집값이 평균보다 작다고 할 수 있다.

예제 3: 선택 편향 방지 (오른쪽 꼬리 단측검정)

위 예제는 각 가구소득 구간별로 예상되는 평균 집값과의 차이의 의미를 판단하기 위하여 의도적으로 편향된 표본을 선택하였다. 계산 결과 위의 가구소득 구간 기준으로는 검정통계량과 임계값의 차이도 많이 남을 알 수 있다.

문제의 성격에 따라 선택 편향selection bias이 발생하지 않도록 표본을 선택하는 일이 매우 중요할 수 있다. 이제는 되도록 편향이 발생하지 않는 표본 선택 방법을 논의하고자 한다.

선택 편향을 피하기 위한 샘플 선택으로 아래 코드에서는 전체 데이터셋에서 1% 크기의 표본을 무작위로 선택한다.

sample_general = housing.median_house_value.sample(frac=0.01, random_state=43)

표본의 주택가격 전체 구역의 주택가격 보다 조금 크다.

sample_general.describe()
count       197.000000
mean     201719.796954
std       97015.201123
min       36600.000000
25%      126100.000000
50%      180400.000000
75%      266500.000000
max      455300.000000
Name: median_house_value, dtype: float64

오른쪽 꼬리 단측검정을 위해 귀무가설과 대립가설을 다음과 같이 설정한다.

  • 귀무가설 \(\text{H}_0\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean와 같다.

  • 대립가설 \(\text{H}_1\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean 보다 크다.

우선 귀무가설이 참이라고 가정한다. 그러면 다음이 성립한다.

\[\overline{X} \sim N(\mu, \sigma^2/n)\]
\[Z = \frac{\overline{X} - \mu}{\sigma/\sqrt{n}}\sim N(0, 1^2)\]

따라서 표본 sample_general에 속한 구역의 평균 집값의 검정통계량 \(z_0\)\(p\)-값은 다음과 같다.

z0, p_value = testStatistic(sample_general, house_value_mean, house_value_std, oneTailed=True, lessThan=False)

print(f"검정통계량: {z0:.6f}")
print(f"p-값: {p_value:14.6f}")
검정통계량: 1.327573
p-값:       0.092160

검정통계량이 1.327573이다. 반면에 유의수준 5% 임계값은 1.644854이다. 즉 계산된 검정통계량보다 작다.

z_5p = norm.ppf(0.95)
z_5p
1.644854

또한 \(p\)-값이 0.05보다 크다.

결론:

  • 오른쪽 꼬리검정의 기각역은 \(\{ z \mid z \ge 1.644854 \}\)

  • 검정통계량 \(z_0 = 1.327573 < 1.644854\) 이므로 기각역에 속하지 않는다.

  • 따라서 귀무가설을 기각할 수 없다.

  • 즉, 표본 평균이 전체 평균 집값 보다 크다고 볼 수 없고 따라서 전체 평균 집값이 타당하다고 볼 수 있다.

예제 4: 층화표집 활용 (양측검정)

선택 편향의 위험성을 보다 줄이기 위해 층화표집을 활용한다. 아래 코드는 전체 데이터셋에서 1% 크기의 표본을 층화표집 기법으로 선택한다.

stratification = housing.groupby('income_cat', observed=True, group_keys=True)
stratified_sampling = stratification.apply(lambda y:y.sample(frac=0.01, random_state=42), include_groups=False)
stratified_sampling = stratified_sampling.reset_index(level=0)
stratified_sampling
income_cat median_income median_house_value
district
4388 1 1.1868 93800.0
13310 1 1.3811 51300.0
3262 1 1.1650 53300.0
4752 1 0.9234 187500.0
12210 1 1.4861 63100.0
... ... ... ...
1334 5 6.0497 177500.0
10235 5 7.8496 490800.0
3986 5 6.1274 315900.0
8559 5 6.4310 492500.0
8728 5 7.6059 323700.0

197 rows × 3 columns

sample_stratified = stratified_sampling.median_house_value

표본의 주택가격이 전체 구역의 주택가격 보다 조금 작다.

sample_stratified.describe()
count       197.000000
mean     186095.939086
std       97399.417945
min       40000.000000
25%      115800.000000
50%      162200.000000
75%      234800.000000
max      496000.000000
Name: median_house_value, dtype: float64

왼쪽 꼬리 단측검정을 위해 귀무가설과 대립가설을 다음과 같이 설정한다.

  • 귀무가설 \(\text{H}_0\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean와 같다.

  • 대립가설 \(\text{H}_1\): sample_2Cat에 속한 구역들의 평균 집값이 house_value_mean와 다르다.

우선 귀무가설이 참이라고 가정한다. 그러면 다음이 성립한다.

\[\overline{X} \sim N(\mu, \sigma^2/n)\]
\[Z = \frac{\overline{X} - \mu}{\sigma/\sqrt{n}}\sim N(0, 1^2)\]

따라서 표본 sample_general에 속한 구역의 평균 집값의 검정통계량 \(z_0\)\(p\)-값은 다음과 같다.

z0, p_value = testStatistic(sample_stratified, house_value_mean, house_value_std, oneTailed=True, lessThan=True)

print(f"검정통계량: {z0:.6f}")
print(f"p-값: {p_value:14.6f}")
검정통계량: -0.916756
p-값:       0.179635

검정통계량이 -0.916756이다. 반면에 유의수준 5% 임계값은 -1.644854이다. 즉 계산된 검정통계량보다 크다.

z_5p = norm.ppf(0.05)
z_5p
-1.644854

또한 \(p\)-값이 0.05보다 크다.

결론 1:

  • 왼쪽 꼬리검정의 기각역은 \(\{ z \mid z \le -1.644854 \}\)

  • 검정통계량 \(z_0 = -0.916756 > -1.644854\) 이므로 기각역에 속하지 않는다.

  • 따라서 귀무가설을 기각할 수 없다.

  • 즉, 표본 평균이 전체 평균 집값 보다 작다고 볼 수 없고 따라서 전체 평균 집값이 타당하다고 볼 수 있다.

결론 2:

  • 표본을 선택할 때 무작위 추출한 경우보다 \(p\)-값이 더 크다.

  • 이는 층화추출로 생성된 표본의 평균값이 보다 모평균에 가까움을 의미한다.

  • 이유는 표준정규분포의 특성상 \(p\)-값이 클 수록 검정통계량이 0에 가까워지기 때문이다.